Есть ли в IntelliJ способ выполнить поиск использования метода и отфильтровать его по конкретным аргументам, переданным методу?

У меня есть метод в моем классе Service, который выполняет обновление гибернации для любого объекта домена:

update(Object obj)

Он вызывается из множества классов в моем проекте для разных типов объектов. Я хотел бы найти все случаи использования этого метода, когда он вызывается для определенного объекта домена. Т.е. вызов методов вызова, который выполняет обновление моего объекта Title:

serviceClass.update(Title title)

Я использую IntelliJ в качестве своей IDE, и мне интересно, есть ли способ найти все эти использования. У кого-нибудь есть ИДЕЯ, как это сделать?

Заранее большое спасибо, Ронни


person rontron    schedule 19.10.2012    source источник
comment
Вы пробовали SSR?   -  person CrazyCoder    schedule 19.10.2012
comment
круто, спасибо за подсказку! Я попытался создать подходящий шаблон поиска, но смог найти любое решение для проведения instance of теста параметра метода. Мне нужно это сделать, потому что метод может быть вызван как objectDAO.update(t) или objectDAO.update(title) или любой другой параметр, называющий один из наших программистов, который только что имел в виду ... Любая идея, как я мог бы справиться с этим?   -  person rontron    schedule 19.10.2012
comment
Попробуйте method calls существующий шаблон и измените его вот так.   -  person CrazyCoder    schedule 19.10.2012
comment
на самом деле я думал, что это именно то, что я ищу, но в некоторых случаях это не сработает. Сигнатура метода void update(Object obj), и если я отфильтрую тип параметра, как вы сказали, с определенным типом Title, никаких вхождений не обнаружено. Если я фильтрую по типу Object, все вхождения будут найдены :( похоже, что SSR недостаточно умен, чтобы оценить тип, прежде чем он будет приведен в Object ...   -  person rontron    schedule 19.10.2012
comment
он достаточно умен, но я ошибся с опцией использовать тип выражения java вместо формального типа аргумента.   -  person CrazyCoder    schedule 19.10.2012
comment
спасибо, тип выражения java выполнил свою работу.   -  person rontron    schedule 19.10.2012


Ответы (2)


Я попробовал это на небольшом примере проекта и смог добиться желаемого поведения с помощью Structural Search and Replace с измененным шаблоном method calls:

введите описание изображения здесь

$MethodCall$ Ограничения текста, Текст / регулярное выражение следует установить на update, чтобы методы с другими именами игнорировались. $Parameter$ Количество вхождений, Минимальное количество должно быть установлено на 1, чтобы игнорировать вызовы методов без параметров или с несколькими параметрами.

Полученные результаты:

results

person CrazyCoder    schedule 19.10.2012
comment
Я также добавил текстовое ограничение update для переменной $ MethodCall $ действительно получают только методы обновления, которые вызываются с заголовком. По какой-то причине у меня также есть несколько методов update () с пустыми аргументами, но только несколько, чтобы я мог жить с этим ... - person rontron; 19.10.2012
comment
Спасибо за указатель, обновлю ответ. Если вы установите минимальное количество параметров равным 1, он не будет соответствовать вызовам методов без параметров. - person CrazyCoder; 19.10.2012

Если вас интересуют цепочки вызовов, которые предоставляют определенные входные данные для данного метода, попробуйте команду Анализировать-> Поток данных сюда.

Это позволяет вам видеть, какие значения передаются и через какие цепочки вызовов. И, например, откуда могут поступать значения null.

Действительно, довольно мощная функция.

person Pakka Pakka    schedule 19.10.2012