Вот вопрос, связанный с алгоритмом построения графика вызовов для байт-кода Java с использованием CHA.ОПАЛ - О поиске меток методов, определенных в абстрактном классе с использованием алгоритма CHA
Как нет реализации конкретного метода для методов в абстрактных классах, добавление краю вызова к таким методам может быть немного ошибочным. принимают junit-4.12.jar
, например. runFailed
был определен в junit.runner.BaseTestRunner
, который является абстрактным классом. Кроме того, есть призывы к runFailed
в методе getTest
которые также определены в junit.runner.BaseTestRunner
While в «Успенском иерархии для СНА вызовов График строительства Алгоритм» (Jason & Атанас), он сказал, что
«дал узел вызова xm(), где объявленный тип x является C, возможный тип времени выполнения x должен быть не абстрактным подтипом C. "
Насколько я рассмотрел, без добавления края вызова (Calledge1) от junit.runner.BaseTestRunner getTest
до junit.runner.BaseTestRunner runFailed
, более разумно добавить край вызова (Calledge2) от junit.runner.BaseTestRunner getTest
до junit/textui/TestRunner runFailed
, как TestRunner расширяет BaseTestRunner.
Хотя после запуска тестового кода для получения результата CallGraph.calledByStatistics() был найден только Calledge1. Вызывается Calledge2.
Есть ли кто-нибудь, кто может оказать мне услугу, чтобы подтвердить это? Спасибо заранее.
С уважением,
Цзян