9

我试图在 IntelliJ IDEA(未来检查)中找出一个结构替换模板,用于在不删除任何其他现有注释的情况下向类/接口/枚举添加缺少的注释。

到目前为止,我尝试了以下几种

搜索模板:

@$OtherPossibleAnnotation$ // min: 0, max: 0, text/regexp: AnnotationName, invert condition: true
@$MissingAnnotation$ // min: 0, max: 0, text/regexp: AnnotationName
class $C$ {
    $Content$ // min: 0, max: unlimited
}

替换模板:

@$OtherPossibleAnnotation$
@AnnotationName
class $C$ {
    $Content$
}

但我的尝试都没有奏效。我希望它能够工作

  • 使用任何现有的类注释集,并且还必须保留它们的潜在值,
  • 如果类上根本没有注释,
  • 在理念 14 和理念 15 中,
  • 还应该保持课堂内容不变。

因此,例如以下

@ProductArea("Area A")
class A {
    public void method1() {
        System.out.println("Should remain");
    }
}

应该替换为

@ProductArea("Area A")
@AnnotationName
class A {
    public void method1() {
        System.out.println("Should remain");
    }
}

有人可以建议吗?

4

1 回答 1

2

The following works for me in IntelliJ IDEA 2019.3 EAP.

Search Template:
@$MissingAnnotation$ // count=[0,0], text=AnnotationName
class $C$ {
}
Replace Template
@AnnotationName
class $C$ {
}

This will keep existing annotations and class content, but only when using IntelliJ IDEA 2019.3 EAP

To save some manual editing, copy the following to your clipboard and use "Import Template from Clipboard" under the cog menu in the Structural Search dialog:

<replaceConfiguration name="method calls" text="@$MissingAnnotation$ &#10;class $C$ {&#10;}" recursive="false" caseInsensitive="true" type="JAVA" pattern_context="default" reformatAccordingToStyle="false" shortenFQN="true" replacement="@AnnotationName&#10;class $C$ {&#10;}">
  <constraint name="__context__" within="" contains="" />
  <constraint name="MissingAnnotation" regexp="AnnotationName" minCount="0" maxCount="0" within="" contains="" />
  <constraint name="C" within="" contains="" />
</replaceConfiguration>
于 2019-10-01T13:10:48.947 回答