multilang-depends / depends

Depends is a fast, comprehensive code dependency analysis tool
MIT License
195 stars 54 forks source link

failed testcases #21

Open hannkinnei opened 4 years ago

hannkinnei commented 4 years ago

Input:

package test;
public class A {
    public A() {
    }
}

package test;
public class B extends A {
    A a;

    public void setA(A a) {
        this.a = a;
    }
}

package test;
public class C {
    public void caller() {
        call("caller1", "caller2");
    }

    public void call(String a) {
        System.out.println(a);
    }

    public void call(String a, String b) {
        System.out.println(a + " " + b);
    }

    public void call(String... a) {
        System.out.println("array " + a);
    }

    public void call() {}
}
public class MyJavaTest extends JavaParserTest{
    @Before
    public void setUp() {
        super.init();
    }

    @Test
    public void testMethodOverload() throws IOException {
        System.out.println("testMethodOverload: ");
        String[] srcs = new String[] {
                "./src/test/resources/java-code-examples/MyJavaTest/test/C.java"
                };

        for (String src:srcs) {
            FileParser parser = createParser(src);
            parser.parse();
        }
        inferer.resolveAllBindings();
        Entity method = entityRepo.getEntity("test.C.caller");
        List<Relation> relations = type.getRelations();
        for(Relation relation : relations) {
            if(DependencyType.CALL.equals(relation.getType())) {
                FunctionEntity callFunction = (FunctionEntity) relation.getEntity();
                System.out.println(callFunction.getParameters().size());
                assertEquals(callFunction.getParameters().size(), 2);   // fail
            }
        }
    }

    @Test
    public void testMethodParameterTypeRelation() throws IOException {
        System.out.println("testMethodParameterTypeRelation: ");
        String[] srcs = new String[] {
                "./src/test/resources/java-code-examples/MyJavaTest/test/A.java",
                "./src/test/resources/java-code-examples/MyJavaTest/test/B.java"
                };

        for (String src:srcs) {
            FileParser parser = createParser(src);
            parser.parse();
        }
        inferer.resolveAllBindings();

        Entity method = entityRepo.getEntity("test.B.setA");
        List<Relation> relations = method.getRelations();
        for(Relation relation : relations) {
            System.out.println(relation.getType() + " " + relation.getEntity());
        }
        assertContainsRelation(method, DependencyType.PARAMETER, "test.A"); // fail
    }

    @Test
    public void testClassContain() throws IOException {
        System.out.println("testClassContain: ");
        String[] srcs = new String[] {
                "./src/test/resources/java-code-examples/MyJavaTest/test/A.java",
                "./src/test/resources/java-code-examples/MyJavaTest/test/B.java"
                };

        for (String src:srcs) {
            FileParser parser = createParser(src);
            parser.parse();
        }
        inferer.resolveAllBindings();
        Entity type = entityRepo.getEntity("test.B");
        List<Relation> relations = type.getRelations();
        for(Relation relation : relations) {
            System.out.println(relation.getType() + " " + relation.getEntity());
        }
        assertContainsRelation(type, DependencyType.INHERIT, "test.A"); // success
        assertContainsRelation(type, DependencyType.CONTAIN, "test.A"); // fail

    }

}

Output:

testMethodParameterTypeRelation: 
Dependency analaysing....
Dependency done....
Return Entity [id=-1, qualifiedName=built-in, rawName=built-in]
Use Entity [id=6, qualifiedName=test.B.a, rawName=a]
Use Entity [id=5, qualifiedName=test.B, rawName=B]
Use Entity [id=8, qualifiedName=test.B.setA.a, rawName=a]
testMethodOverload: 
Resolve type bindings....
Dependency analaysing....
Dependency done....
0
testClassContain: 
Resolve type bindings....
Dependency analaysing....
Dependency done....
Extend Entity [id=2, qualifiedName=test.A, rawName=A]
gangz commented 4 years ago

Thanks. The issue duplicates with https://github.com/multilang-depends/depends/issues/2, and currently there is still no schedule to fix it. But, it is really an important issue should be supported. if anyone who has plan to fix the issue, please kindly submit a pull request.