首页 > 解决方案 > 如果基类匹配条件,IntelliJ 结构搜索会查找派生类

问题描述

假设我有一个带有 field 的基类refCount。我不小心创建了一个派生类,它还声明了一个同名的字段。(实际上,名称并不重要:重要的是类型,即ReferenceCount;但名称非常一致。)这是浪费内存,所以能够自动找到这些东西会很好。这可以通过结构搜索(或其他方式)来完成吗?

标签: javaintellij-ideaideeditorstructural-search

解决方案


看起来Java | Visibility | Field name hides field in superclass检查所做的事情与您需要的类似。

如果你想用结构搜索来做到这一点,你可以做这样的事情。搜索模板:

class $X$ {
  RefCount $f$;
}

并在“完全匹配”上添加以下“脚本”过滤器:

import com.intellij.psi.*;
for (PsiClass aClass : X.getSupers()) { // X refers to the template var $X$
  for (PsiField field : aClass.getAllFields()) {
    // compares the type of the super field with the type of field $a$
    if (field.getType().equals(a.getType())) {
      return true;
    }
  }
}
return false;

推荐阅读