java - 如何使用 checkstyle 或 PMD 强制构造函数注入(inject)?

标签 java annotations guice checkstyle pmd

我想在 GWT 项目中使用 Guice 注释 com.google.inject.Inject 强制构造函数注入(inject),该注释可以放置在字段上进行字段注入(inject),也可以放置在构造函数上进行构造函数注入(inject)。

该项目已使用 checkstyle 和 PMD。

据我所知,我可以通过禁止字段上的注释来简单地强制构造函数注入(inject),但是我发现没有 checkstyle 模块或 PMD 规则可以执行此操作。我确信我遗漏了一些东西,因为这似乎是静态代码分析工具的日常任务。

最佳答案

这听起来很适合 Checkstyle 的 MatchXpath查看。您可以将两个模块添加到您的配置中,如下所示:

<module name="MatchXpath">
  <property name="query" value="//VARIABLE_DEF/MODIFIERS/ANNOTATION/IDENT[@text='Inject']"/>
  <message key="matchxpath.match"
                     value="Inject annotation only allowed on constructors."/>
</module>

<module name="MatchXpath">
  <property name="query" value="//METHOD_DEF/MODIFIERS/ANNOTATION[./IDENT[@text='Inject']]"/>
  <message key="matchxpath.match"
                     value="Inject annotation only allowed on constructors."/>
</module>

Java 文件示例:

public class Communication {
    @Inject @Named("SMSComms")
    CommunicationMode smsComms;

    @Inject
    public void setEmailCommunicator(@Named("EmailComms") CommunicationMode emailComms) {
        this.emailComms = emailComms;
    }

    @Inject
    public Communication(@Named("IMComms") CommunicationMode imComms) {
        this.imComms = imComms;
    }
}

结果:


➜  src java -jar checkstyle-8.40-all.jar -c config.xml Communication.java
Starting audit...
[ERROR] src/Communication.java:2:6: Inject annotation only allowed on constructors. [MatchXpath]
[ERROR] src/Communication.java:5:5: Inject annotation only allowed on constructors. [MatchXpath]
Audit done.
Checkstyle ends with 2 errors.

关于java - 如何使用 checkstyle 或 PMD 强制构造函数注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66352648/

相关文章:

java - 如何访问私有(private)包类的公共(public)成员?

java - 随机类种子和 nextInt 根据种子值对它们产生影响

ScalaTest、Mockito、Guice 和 PartialMocking

java - 识别 Java 注释处理器中类型的稳定性

java - 如何使用 rocoto 实现覆盖属性策略?

java - Guice:在 ServletModule 中注入(inject)拦截器

java - 如何创建特定的类构造函数

java - 使用 equals() 的给定实现检查特定对象是否在列表中

java注解判断被注解的方法是否执行

Scala tailrec 注释错误