这里是一个与使用CHA构造Java字节码的调用图的算法有关的问题。OPAL-关于使用CHA算法在抽象类中定义方法的调用
由于抽象类中的方法没有具体的方法实现,因此向这些方法添加调用边缘可能有点误导。例如 以junit-4.12.jar
。 runFailed
已被定义在junit.runner.BaseTestRunner
这是一个抽象类。此外,也有方法getTest
调用runFailed
这junit.runner.BaseTestRunner
同时也定义在“假设层次的CHA调用图构造算法”(贾森&阿塔纳斯),据说
“给出一个调用站点xm(),其中x的声明类型为C,x的可能运行时类型必须是C的非抽象子类型。
至于即时考虑,没有添加从junit.runner.BaseTestRunner getTest
呼叫边缘(Calledge1)至junit.runner.BaseTestRunner runFailed
,更合理从junit.runner.BaseTestRunner getTest
添加一个呼叫边缘(Calledge2)至junit/textui/TestRunner runFailed
作为TestRunner的延伸BaseTestRunner。
在运行测试代码以获取CallGraph.calledByStatistics()的结果后,只找到Calledge1。 Calledge2缺失。
有没有人可以帮我确认一下? 预先感谢您。
问候,
江