2017-01-22 8 views
0

Вот вопрос, связанный с алгоритмом построения графика вызовов для байт-кода 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.

Есть ли кто-нибудь, кто может оказать мне услугу, чтобы подтвердить это? Спасибо заранее.

С уважением,

Цзян

ответ

1

Я нашел OPAL предлагает два вида вызова графа. Второй не добавит края «библиотечного вызова» к краю вызова.

В CallGraph.calledByStatistics()

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

в CallGraph.callsStatistics()

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