У меня есть родительский класс P с подклассами A и B.

Я хотел бы найти все случаи использования метода f из A.

Так что либо p.f(), либо a.f(), но не b.f(), потому что экземпляр B b не может вызывать A.f.

Я знаю, что могу найти

  • Звонит прямо на A.f. Это пропускает:

    P p = new A();
    p.f();
    
  • Вызовы на P.f и любые переопределения. Слишком много ложных срабатываний.

Я знаю, что всегда будут ложные срабатывания, используя только информацию времени компиляции, но их может быть меньше.

11
Mark 7 Ноя 2018 в 12:23

1 ответ

Лучший ответ

Для этого вы можете использовать Структурный поиск (Правка | Найти | Структурный поиск ...). Используйте такой запрос:

$x$.f()

С фильтром типа выражения A|P. Это найдет все вызовы f() для выражений типа A или P. Если у вас есть еще какие-либо классы в иерархии между A и P, вам также необходимо добавить их в фильтр типа выражения.

7
Bas Leijdekkers 8 Ноя 2018 в 08:40