Поиск всех вызовов методов с посетителем дерева

Я конвертирую простое правило статического анализа, реализованное для байт-кода, используя 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 последующие звонки не видны.

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