Java IntelliJ structural search在基类符合条件时查找派生类

Java IntelliJ structural search在基类符合条件时查找派生类,java,intellij-idea,ide,editor,structural-search,Java,Intellij Idea,Ide,Editor,Structural Search,假设我有一个带有字段refCount的基类。我无意中创建了一个派生类,该派生类还声明了一个同名字段。(事实上,名称并不重要:重要的是类型,即ReferenceCount;但名称非常一致。)这是一种内存浪费,因此能够自动找到这样的东西会很好。这可以通过结构化搜索(或者其他方式)来实现吗?看起来Java | Visibility |字段名隐藏了超类中的字段检查功能与您需要的类似 如果你想用结构化搜索,你可以这样做。 搜索模板: class $X$ { RefCount $f$; } 并在“完全

假设我有一个带有字段
refCount
的基类。我无意中创建了一个派生类,该派生类还声明了一个同名字段。(事实上,名称并不重要:重要的是类型,即ReferenceCount;但名称非常一致。)这是一种内存浪费,因此能够自动找到这样的东西会很好。这可以通过结构化搜索(或者其他方式)来实现吗?

看起来
Java | Visibility |字段名隐藏了超类中的字段
检查功能与您需要的类似

如果你想用结构化搜索,你可以这样做。 搜索模板:

class $X$ {
  RefCount $f$;
}
并在“完全匹配”上添加以下“脚本”过滤器:


看起来
Java | Visibility |字段名隐藏了超类中的字段
inspection的功能与您所需要的类似

如果你想用结构化搜索,你可以这样做。 搜索模板:

class $X$ {
  RefCount $f$;
}
并在“完全匹配”上添加以下“脚本”过滤器:


看起来IntelliJ(2018.3)的新版本让这变得相当简单,尽管有点尴尬。如果我知道这会到来,我会很想使用预览版

诀窍是首先为基类创建(并保存!)一个搜索模板;例如:

class $Class$ {RefCount $count$;}
class $Child$ extends $Base$ {RefCount $count$;}
然后像这样做:

class $Class$ {RefCount $count$;}
class $Child$ extends $Base$ {RefCount $count$;}
然后为
$Base$
添加一个“reference”过滤器,该过滤器引用您保存的模板


如果Child扩展了Parent,而Parent又扩展了祖父母,那么这个技巧就不起作用了,该字段在Child和祖父母中声明,但在Parent中不声明。我认为这可以很容易地解决这个问题,但我不知道怎么做。

看起来IntelliJ(2018.3)的新版本让这个问题变得相当简单,尽管有点尴尬。如果我知道这会到来,我会很想使用预览版

诀窍是首先为基类创建(并保存!)一个搜索模板;例如:

class $Class$ {RefCount $count$;}
class $Child$ extends $Base$ {RefCount $count$;}
然后像这样做:

class $Class$ {RefCount $count$;}
class $Child$ extends $Base$ {RefCount $count$;}
然后为
$Base$
添加一个“reference”过滤器,该过滤器引用您保存的模板


如果Child扩展了Parent,而Parent又扩展了祖父母,那么这个技巧就不起作用了,该字段在Child和祖父母中声明,但在Parent中不声明。我认为这可以很容易地解决,但我实际上不知道怎么做。

我不这么认为,因为该字段在基类中是私有的。当超类的字段为
私有时,检查还可以选择发出警告。那么,谢谢你,这解决了我90%的问题。理想情况下,我希望匹配字段的类型,而不是它的名称,但由于名称非常一致,这样就可以了。谢谢编辑:等等,不,没有,太多与我感兴趣的领域无关的误报,尽管可以说这些也值得一看。如果它与类型匹配,就会有更多的误报。通常,是的。我想说的是:找到基类有一个类型为X的字段,而子类也有类型为X的字段的所有情况,其中X在我的控制之下。特别是,我想要X=RefCount。这应该没有任何误报。我不这么认为,因为该字段在基类中是私有的。当超类的字段
私有时,检查还可以选择发出警告。那么,谢谢,这解决了我90%的问题。理想情况下,我希望匹配字段的类型,而不是它的名称,但由于名称非常一致,这样就可以了。谢谢编辑:等等,不,没有,太多与我感兴趣的领域无关的误报,尽管可以说这些也值得一看。如果它与类型匹配,就会有更多的误报。通常,是的。我想说的是:找到基类有一个类型为X的字段,而子类也有类型为X的字段的所有情况,其中X在我的控制之下。特别是,我想要X=RefCount。这应该没有任何误报。似乎“引用”筛选器需要“在层次结构中搜索”复选框。当“引用”过滤器需要“在层次结构中搜索”复选框时,您可能需要为此提交请求。您可能希望在以下位置提交该请求: