java-callgraph2 icon indicating copy to clipboard operation
java-callgraph2 copied to clipboard

关于实现关系的 method_call 缺失和错误

Open 0o0b opened this issue 1 year ago • 5 comments

使用过程中发现,对于继承关系,如:

public class A {
    public void exec() {}
}

public class B extends A {}

jacg_method_call中记录了子类方法对父类方法的调用关系:

B.exec 调用 A.exec

但是对于实现关系,如:

public interface A {
    default void exec() {}
}

public class B implements A {}

并没有记录子类方法对接口方法的调用关系。

是否可以添加这类调用关系?


特别地,对于多级实现关系,例如:

public interface A {
    default void exec() {}

    void test();
}

public interface B extends A {}

public class C implements B {
    public void test() {}
}

如果可以增加调用关系的话,首先必定要记录的是:

B.exec 调用 A.exec

至于C,建议记录:

C.exec 调用 B.exec

而不是:

C.exec 调用 A.exec

另外,目前的实现会生成两条调用关系:

B.test 调用 A.test(错误,应当是 A.test 调用 B.test)
B.test 调用 C.test

对于abstract class多级继承是否存在类似的问题,我尚未进行测试。

0o0b avatar Jun 18 '24 12:06 0o0b