java - 如何在 IntelliJ IDEA 中查找顶级未注释的类

标签 java intellij-idea annotations code-inspection structural-search

动机:每个类/接口(interface)/注释/枚举都必须由@SomeAnnotation注释。但是,我们希望此注释仅位于顶级类中,而不是内部类中。

目标是创建一个结构检查,警告开发人员他们忘记注释类。 如何指定结构搜索/替换来查找所有缺少 @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$ {}

用于导入的完整模板(使用对话框中工具按钮下的从剪贴板导入模板):

<replaceConfiguration name="Method calls" text="@$Annotation$&#10;class $C$ {}" recursive="false" caseInsensitive="true" type="JAVA" pattern_context="default" reformatAccordingToStyle="false" shortenFQN="false" replacement="@SomeAnnotation&#10;class $C$ {}">
  <constraint name="__context__" script="&quot;if (C instanceof com.intellij.psi.PsiIdentifier) C = C.parent &#10;C.containingClass == null &amp;&amp; !(C instanceof com.intellij.psi.PsiAnonymousClass)&quot;" within="" contains="" />
  <constraint name="Annotation" regexp="SomeAnnotation" minCount="0" maxCount="0" within="" contains="" />
  <constraint name="C" within="" contains="" />
</replaceConfiguration>

关于java - 如何在 IntelliJ IDEA 中查找顶级未注释的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509708/

相关文章:

java - Hibernate 验证失败时意外的 UnsupportedOperationException

java - 使用 Curl 命令使用 Jersey、Jackson 和 json.org/java Parser 进行 JSON 格式化

java - IntelliJ理念14 : How do I import all existing idea modules in a folder tree into a project

intellij-idea - 使用 IntelliJ 进行 DSM 分析

java - Jersey WADL 生成器支持自定义注释

java - OpenJPA 将具有 oneToMany 映射的字段视为 Blob

java - 当项目本身用空格分隔时,如何分隔由空格组成的文件中的项目?

java - MVP多种观点结合起来形成整体观点

java - 为 Maven 项目订购模块构建顺序 IntelliJ

java - 对于 FindBugs,jar305.jar 中的注释是否应该优于 annotation.jar 中的类似注释?