通过 IDEA 结构化查找多次使用注释查找 类

Find classes using an annotation multiple times via IDEA structured find

我想搜索 类,其中至少有 3 个字段使用 @Inject 注释进行注释,如下所示:

class SpecificUiComponent extends UIComponent {
      @Inject
      MyService1 myservice1;
      @Inject
      MyService2 myservice2;
      @Inject
      MyService3 myservice3;
}

我已经设法创建了一个搜索模板,该模板找到 类 扩展 UIComponent 并且其中还有一个 @Inject 注释,但是,如果我设置了 "min" 注释变量的出现次数为 3,Intellij 仍然返回 类 只有一个 @Inject.

我之所以要进行上述搜索,是为了找到那些 UI 组件,这些组件有很多外部防御,因此过于复杂,需要重构。如果你有更好的方法,也欢迎分享。

  • 转到编辑 -> 查找 -> 在路径中查找Ctrl + Shift + F.

  • 输入 @Inject[\S\s]*@Inject[\S\s]*@Inject 作为搜索短语。

(确保您在 Find in path 菜单中的 General 下勾选了 Regular Expression。:)))

要仅过滤扩展 UIComponent 的 类,您可以使用 extends UIComponent[\S\s]*@Inject[\S\s]*@Inject[\S\s]*@Inject 作为搜索短语。

另一方面,扩展 UIComponent 的 类 应该位于特定包内,对吗?所以你可以输入那个目录作为你的搜索路径。 :))

您想将字段的最小出现次数设置为 3,而不是注释。这是找类至少有3个字段带有@Inject注解,而不是类有1个字段至少有3个@Inject注解。要给出一个完整的示例,请使用如下模式:

class $Class$ extends $Parent$ { 
  @Inject
  $FieldType$ $Field$;
}

编辑变量 field,使 3 的出现次数最少,unlimited 的出现次数最多。 变量 parent 应该启用 text/regexp UIComponentApply constraint within type hierarchy 复选框。

这会发现 类 直接或间接扩展 UIComponent 至少有 3 个用 @Inject 注释的字段。