Search code examples
inheritanceintellij-ideaiderefactoring

IntelliJ IDEA find usages of overriding method without finding sibling methods


I have a parent class P with subclasses A and B.

I would like to find all usages of a method f of A.

So either p.f() or a.f() but not b.f(), because an instance B b cannot call A.f.

I know I can find

  • Calls directly to A.f. This misses:

    P p = new A();
    p.f();
    
  • Calls to P.f and any override. This has too many false positives.

I know there are always going to be false positives using only compile-time information, but there could be fewer.


Solution

  • You could use Structural Search (Edit | Find | Search Structurally...) for this. Use a query like:

    $x$.f()
    

    with expression type filter A|P. This will find all calls to f() on expressions of a type of either A or P. If you have any more classes in the hierarchy between A and P, you will need to add these to the expression type filter also.