Поиск всех вызовов методов с посетителем дерева
Я конвертирую простое правило статического анализа, реализованное для байт-кода, используя ASM для работы с SonarQube.
Я создал подкласс BaseTreeVisitor
и переопределить visitMethodInvocation(MethodInvocationTree tree)
метод.
Когда он анализирует простой метод, как
public void someMethod() {
org.fest.assertions.Assertions.assertThat(true);
}
Полное имя и тип вызываемого метода легко получить из MethodInvocationTree.
Однако для связанных вызовов методов, таких как
public void someMethod() {
org.fest.assertions.Assertions.assertThat(true).isEqualTo(true);
}
Только завершающий isEqualTo
вызов метода виден.
Как определить, что assertThat также называется?
Обнаружение вызовов методов с помощью ASM было тривиальным. Есть ли другая часть сонарного API, которую я должен использовать вместо TreeVisitor?
1 ответ
Проблема была моей собственной разработки, если
super.visitMethodInvocation(mit);
Не вызывается в переопределении visitMethodInvocation
последующие звонки не видны.