查找不覆盖方法的类

时间:2016-10-17 10:32:43

标签: java intellij-idea

IntelliJ IDEA中是否有任何方法可以搜索不会覆盖某种方法的类?

我们说我有这些课程:

public abstract class BaseClass {
  public void methodThatMightBeOverridden() {
  }
}

public class ConcreteClassWithOverriddenMethod extends BaseClass {
  @Override
  public void methodThatMightBeOverridden() {
    super.methodThatMightBeOverridden();
  }
}

public class ConcreteClassWithoutOverriddenMethod extends BaseClass {
}

public class AnotherConcreteClassWithoutOverriddenMethod extends ConcreteClassWithoutOverriddenMethod {
}

在IntelliJ中是否可以找到BaseClass的所有不覆盖methodThatMightBeOverridden()的扩展名?请注意,我需要查找类,即使它们没有直接实现BaseClass。在上面的示例中,这将是ConcreteClassWithoutOverriddenMethodAnotherConcreteClassWithoutOverriddenMethod

我知道如何使用类型层次结构来查找重写方法的类,但是却找不到相反的方法。

我试过谷歌搜索没有任何运气。此外,这是一个简化的例子。在实际代码中,我们有许多子类的实现,其中一些不扩展类。

2 个答案:

答案 0 :(得分:2)

我找到了对此的支持。通过站在方法上并按 Ctrl + Shift + H (或导航 - > 方法菜单中的层次结构,您可以清楚地看到所有重写方法:

Method Hierarchy

在这里,我将所有四个类放在一个名为Test的类中,如下所示,因此在类名后面的“in Test”文本。图片非常自我解释,但减号表示该类不会覆盖该方法。

package test;

public class Test {

  public abstract class BaseClass {
    public void methodThatMightBeOverridden() {
    }
  }

  public class ConcreteClassWithOverriddenMethod extends BaseClass {
    @Override
    public void methodThatMightBeOverridden() {
      super.methodThatMightBeOverridden();
    }
  }

  public class ConcreteClassWithoutOverriddenMethod extends BaseClass {
  }

  public class AnotherConcreteClassWithoutOverriddenMethod extends ConcreteClassWithoutOverriddenMethod {
  }

}

答案 1 :(得分:1)

您可以使用结构搜索。使用这样的搜索模板: class $ A $延伸$ B $ {    void $ m $(); } 在编辑变量下,变量m具有text / regexp methodThatMightBeOverridden和min + max occurrence数为0.并且变量B具有text / regexp BaseClass并且启用了类型层次结构中的Apply约束。