Я думаю, что IntelliJ IDEA "Структурный поиск" может быть хорошим инструментом для этого
И это действительно так. Документация может быть жесткой, хотя.
Давайте проверим Поиск шаблонов, фильтров и ограничений скрипта страница. Это происходит следующим образом.
Допустим, у вас есть переменная, которая соответствует методу, toString ()
метод. Тогда эта переменная на самом деле является узлом PsiMethod. Получение
variable.parent создаст узел PsiClass и т. д.
Затем variable.text выдаст вам весь текст метода. если ты
просто нужно имя метода, вы можете использовать variable.name.
Похоже, что задачу можно выполнить, выбрав подходящий шаблон и написав соответствующий скрипт Groovy.
Шаблон называется methods of the class
и находится под Existing templates
. Они предоставляют переменную __context__
для использования со скриптом.
Мы должны быть уверены, что у совпадающих методов есть параметры. Это достаточно просто, просто установите счетный фильтр для переменной $Parameter$
.
Затем нам нужно извлечь имя параметра нужного типа и посмотреть, вызывается ли он в теле метода. Следующий скрипт сделает.
def parameters = __context__.getParameterList().getParameters();
def parameter = parameters.find { p -> p.getType().getName().equals('MyClass') };
if (parameter == null) return false;
String parameterName = parameter.getName();
String methodText = __context__.getText();
String occurrence = "${parameterName}.";
String methodCall = "${parameterName}.getId()";
return methodText.count(occurrence) > 0 && methodText.count(occurrence) == methodText.count(methodCall);
Поместите его в переменный фильтр $Method$
и проверьте результаты.