OPAL-в отношении поиска вызовов методов, определенных в абстрактном классе с использованием алгоритма CHA

Вот вопрос, связанный с алгоритмом построения графа вызовов для байт-кода Java с использованием CHA.

Поскольку нет конкретной реализации метода для методов в абстрактных классах, добавление границы вызова к таким методам может быть немного обманчивым. принимать junit-4.12.jar например. runFailed был определен в junit.runner.BaseTestRunner который является абстрактным классом. Кроме того, есть звонки runFailed в методе getTest который также определен в junit.runner.BaseTestRunner

В "Иерархии допущений для алгоритма построения графа вызовов CHA"(Jason&Atanas) сказано, что

"учитывая сайт вызова 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 отсутствует.

Кто-нибудь может сделать мне одолжение, чтобы подтвердить это? Заранее спасибо.

С Уважением,

Jiang

1 ответ

Решение

Я обнаружил, что OPAL предлагает два вида графа вызовов. Второй не добавит ребро "библиотека-вызов" в ребро вызова.

В CallGraph.calledByStatistics()

Связывание происходит между Callsite (PC) и caller.method, например: между "INVOKEVIRTUAL(junit.runner.BaseTestRunner{ void runFailed(java.lang.String) })" "и junit/runner/BaseTestRunner.public junit.framework.Test getTest(java.lang.String)

В CallGraph.callsStatistics()

Привязка находится между subtype.method и caller.method, например: между "junit/textui/TestRunner.protected void runFailed(java.lang.String)" и "junit / runner / BaseTestRunner.public junit.framework.Test getTest (java)..lang.String)"

Другие вопросы по тегам