这是一个与使用 CHA 构造 Java 字节码调用图的算法有关的问题。
由于抽象类中的方法没有具体的方法实现,因此向此类方法添加调用边缘可能会有点误导。举junit-4.12.jar
个例子。runFailed
其中已经定义了junit.runner.BaseTestRunner
一个抽象类。此外,还有对runFailed
in 方法的调用,该方法getTest
也定义在junit.runner.BaseTestRunner
在“CHA 调用图构造算法的假设层次结构”(Jason&Atanas)中,据说
“给定一个调用站点 xm(),其中 x 的声明类型是 C,x 的可能运行时类型必须是 C 的非抽象子类型。”
据我考虑,如果不添加调用边缘(Calledge1) from junit.runner.BaseTestRunner getTest
to ,添加调用边缘(Calledge2) from tojunit.runner.BaseTestRunner runFailed
更合理,因为 TestRunner 扩展了 BaseTestRunner。junit.runner.BaseTestRunner getTest
junit/textui/TestRunner runFailed
而在运行测试代码得到 CallGraph.callByStatistics() 的结果后,只找到了 Calledge1。Calledge2 丢失。
有人可以帮我确认一下吗?先感谢您。
问候,
江