如何在 IntelliJ IDEA 中查找未注释 类 的顶层
How to find top level not annotated classes in IntelliJ IDEA
动机:每个class/interface/annotation/enum 都必须使用@SomeAnnotation 进行注释。但是,我们希望此注释仅位于 顶层 类 而不是内部层。
目标是创建结构检查,警告开发人员他们忘记注释 类。
如何指定结构 search/replace 以查找所有此类缺少 @SomeAnnotation 的顶级结构?
像这样的东西应该可以工作:
@$Annotation$ // min: 0, max: 0, text/regexp: SomeAnnotation
class $C$ {} // min: 1, max: 1
// Complete Match - Script text:
if (C instanceof com.intellij.psi.PsiIdentifier) C = C.parent
C.containingClass == null && !(C instanceof com.intellij.psi.PsiAnonymousClass)
脚本的第一行对于 IntelliJ IDEA 14 是必需的。脚本中的 C
引用模式中的 $C$
。
替换模板:
@SomeAnnotation
class $C$ {}
用于导入的完整模板(使用对话框中工具按钮下的Import Template from Clipboard
):
<replaceConfiguration name="Method calls" text="@$Annotation$ class $C$ {}" recursive="false" caseInsensitive="true" type="JAVA" pattern_context="default" reformatAccordingToStyle="false" shortenFQN="false" replacement="@SomeAnnotation class $C$ {}">
<constraint name="__context__" script=""if (C instanceof com.intellij.psi.PsiIdentifier) C = C.parent C.containingClass == null && !(C instanceof com.intellij.psi.PsiAnonymousClass)"" within="" contains="" />
<constraint name="Annotation" regexp="SomeAnnotation" minCount="0" maxCount="0" within="" contains="" />
<constraint name="C" within="" contains="" />
</replaceConfiguration>
动机:每个class/interface/annotation/enum 都必须使用@SomeAnnotation 进行注释。但是,我们希望此注释仅位于 顶层 类 而不是内部层。
目标是创建结构检查,警告开发人员他们忘记注释 类。 如何指定结构 search/replace 以查找所有此类缺少 @SomeAnnotation 的顶级结构?
像这样的东西应该可以工作:
@$Annotation$ // min: 0, max: 0, text/regexp: SomeAnnotation
class $C$ {} // min: 1, max: 1
// Complete Match - Script text:
if (C instanceof com.intellij.psi.PsiIdentifier) C = C.parent
C.containingClass == null && !(C instanceof com.intellij.psi.PsiAnonymousClass)
脚本的第一行对于 IntelliJ IDEA 14 是必需的。脚本中的 C
引用模式中的 $C$
。
替换模板:
@SomeAnnotation
class $C$ {}
用于导入的完整模板(使用对话框中工具按钮下的Import Template from Clipboard
):
<replaceConfiguration name="Method calls" text="@$Annotation$ class $C$ {}" recursive="false" caseInsensitive="true" type="JAVA" pattern_context="default" reformatAccordingToStyle="false" shortenFQN="false" replacement="@SomeAnnotation class $C$ {}">
<constraint name="__context__" script=""if (C instanceof com.intellij.psi.PsiIdentifier) C = C.parent C.containingClass == null && !(C instanceof com.intellij.psi.PsiAnonymousClass)"" within="" contains="" />
<constraint name="Annotation" regexp="SomeAnnotation" minCount="0" maxCount="0" within="" contains="" />
<constraint name="C" within="" contains="" />
</replaceConfiguration>