当前位置: 首页 > 知识库问答 >
问题:

PMD-跳过由@PostConstruct或@PreDestroy注释的检查方法

皇甫逸清
2023-03-14

我有以下课程:

import javax.annotation.PostConstruct;

public class PmdUnusedMethod {

    private void unusedMethod() {
    }

    @PostConstruct
    private void postConstructAnnotatedMethod() {
    }
}

和定义的PMD规则集:

<rule ref="rulesets/java/unusedcode.xml"/>

在这种情况下,PMD向我报告有关未使用方法的两个错误(“unusedMethod”和“postConstructAnnotatedMethod”),但我想忽略使用@PreDestroy和@PostConstruct注释的方法的规则“UnusedPrivateMethod”。

我知道我可以做这样的事:

<rule ref="rulesets/java/unusedcode.xml">
        <exclude name="UnusedPrivateMethod"/>
    </rule>
    <rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod">
        <properties>
            <property name="violationSuppressXPath"
                      value="//ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation/Name[@Image='PostConstruct']"/>
        </properties>
    </rule>

但在这种情况下,PMD跳过检查该规则,检查类中所有包含my注释的方法,而不仅仅是使用@PostConstruct注释的方法。我希望在检查代码后,我的“unusedMethod”只有错误,PMD不会通知“postConstructAnnotatedMethod”的错误。

我想这样做:

<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod">
    <properties>
        <property name="violationSuppressXPath"
                  value="//MethodDeclaration/Annotation/Name[@Image='PostConstruct']"/>
    </properties>
</rule>

仅跳过使用所需注释注释的方法,而不是所有方法。

此外,我不想用许多@SuppressWarnings(“PMD.UnusedPrivateMethod”)注释污染我的代码。

共有1个答案

梁磊
2023-03-14

以违规所在的节点为起点执行抑制XPath,因此您可以简单地“上到一个方法,检查注释”。

例如:

<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateMethod">
    <properties>
        <property name="violationSuppressXPath"
                  value="./ancestor::ClassOrInterfaceBodyDeclaration/Annotation/MarkerAnnotation/Name[@Image='PostConstruct']"/>
    </properties>
</rule>
 类似资料:
  • 我正在为Java11实现一个模块,并希望使用JSR250中的注释(javax.annotation.PostConstruct和javax.annotation.PreDestroy)。 我已经更改了根据依赖项从: 对此: 这个工件此行: 因此,我尝试将其添加到我的模块信息中。java文件: 但是,我得到了一个错误的导入: 错误消息是: 我已经研究了以下相关问题,但仍无法解决我的问题: 我不能在J

  • 我有一个包含三个字段的表,比如a、b、c。我想添加一个约束,确保如果a不为null,那么b和c也不为null。我已经使用以下SQL完成了这项工作 使用hibernate注解@Check有没有办法达到同样的效果? 我找不到一个有用的注释示例,开发人员倾向于根本不使用它吗?

  • 问题内容: 我认为我误会了read_csv的意图。如果我有文件“ j”,例如 我如何pandas.read_csv这个文件,跳过任何’#’注释行?我在帮助行的注释中看到它不被支持,但是它指示应该返回一个空行。我看到一个错误 CParserError:标记数据时出错。C错误:第2行中应有1个字段,看到了3个 我目前在 在版本‘0.12.0-199-g4c8ad82’上: CParserError:标

  • 我想我误解了阅读的意图。如果我有一个像“j”这样的文件 我怎样才能看到熊猫。读取此文件,跳过任何“#”注释行?我在帮助中看到,不支持行的“注释”,但它表示应返回空行。我看到一个错误 数据标记化出错。C错误:预期第2行中的1个字段,锯3 我现在在 在版本“0.12”上。0-199-g4c8ad82': 数据标记化出错。C错误:预期第2行中的1个字段,锯3

  • 对于用@X注释的类中的方法或用@X注释的方法,我需要一个切入点。我还需要注释对象。如果类和方法都被注释,我更喜欢将方法注释作为参数。 我尝试了以下操作,这会产生“绑定不一致”的警告。(为什么不直接将其设置为null?) 以下内容创建了“穿过切入点中的“||”的参数x的不明确绑定”警告。(在我看来,这不一定有意义:为什么不绑定第一个短路评估?) 如果存在类和方法注释,则将前面的尝试拆分为两个,自然会

  • 我正在尝试为我的类禁用几个任意PMD警告。 如何列出要忽略的几个PMD规则?我无法用谷歌找到。 它给出了Eclipse编译时错误: 这是可编译的,但被忽略了 这 结果是 Eclipse配置为接受PMD类型: 不支持@SuppressWarnings("PMD. DoNotCallSystemExit")