在PMD中设置XPath冲突抑制

在PMD中设置XPath冲突抑制,xpath,pmd,Xpath,Pmd,我正在PMD中设置自定义规则,但在不使用不推荐的功能的情况下,很难使XPath抑制生效。我使用的是PMD 6.32 我的规则是修改Java/Codestyle规则集中的规则ShortVariable: <rule ref="category/java/codestyle.xml/ShortVariable"> <properties> <!-- ignore ID --> &l

我正在PMD中设置自定义规则,但在不使用不推荐的功能的情况下,很难使XPath抑制生效。我使用的是PMD 6.32

我的规则是修改
Java/Codestyle
规则集中的规则
ShortVariable

<rule ref="category/java/codestyle.xml/ShortVariable">
        <properties>
            <!-- ignore ID -->
            <property name="violationSuppressXPath" value="//VariableDeclaratorId[@Image='id']"/>
        </properties>
    </rule>

我面临两个问题:

  • 当我运行检查时,我在日志中得到以下信息:
    java.lang.RuntimeException:在带有XPath导航的FindChildNodes中使用不推荐的属性“VariableDeclaratorId/@Image”,请改用@Name
    。但是,当我将
    @Image
    的任何实例更改为
    @Name
    时,检查失败
  • 这个特殊的规则并没有像我希望的那样起作用。我想保留原始规则,但如果字段名为
    id
    ,则禁止使用它。相反,如果有一个名为
    id
    的字段,它将抑制类中所有变量的规则。规则应该是什么
  • 编辑 使用以下方法解决了
    id
    规则未正确应用的问题:

    但是,在将
    @Image
    的实例更改为
    @Name
    之后,其他一些支持根本没有被应用:

    应该禁止使用方法名
    hashCode
    等于
    的规则,但不是

    应禁止在名称以
    Repository
    结尾但不是

    应该在主方法中取消对方法的规则,但是正在取消对其他方法和应用程序类的规则

    至于您的问题:

  • 替换是正确的,除了弃用之外,两者之间没有区别,实际上:
  • /**
    *@不推荐使用{@link#getName()}
    *@返回
    */
    @凌驾
    @弃用属性(替换为=“@Name”)
    @不赞成
    公共字符串getImage(){
    返回getName();
    }
    /**返回变量的名称*/
    公共字符串getName(){
    返回super.getImage();
    }
    
  • 根据:
  • 注意使用
    引用上下文节点。应该避免在表达式的开头使用
    /
    ,因为它将测试文件中的所有节点,并抑制比预期更多的冲突

    因此,您只需使用:

    
    
    关于您的问题:

  • 替换是正确的,除了弃用之外,两者之间没有区别,实际上:
  • /**
    *@不推荐使用{@link#getName()}
    *@返回
    */
    @凌驾
    @弃用属性(替换为=“@Name”)
    @不赞成
    公共字符串getImage(){
    返回getName();
    }
    /**返回变量的名称*/
    公共字符串getName(){
    返回super.getImage();
    }
    
  • 根据:
  • 注意使用
    引用上下文节点。应该避免在表达式的开头使用
    /
    ,因为它将测试文件中的所有节点,并抑制比预期更多的冲突

    因此,您只需使用:

    
    
    使用
    会给我一个运行时异常:
    org.jaxen.saxpath.XPathSyntaxException:./[@Name='id']:2:应该是“.”、“…”、“@'、“*”中的一个,
    我已经用
    “/[@Name='id']”解决了这个问题。
    但是我现在遇到了一个问题,其他规则在转换为使用
    @Name
    后失败。我将用新问题更新我的初始问题,使用
    给我一个运行时异常:
    org.jaxen.saxpath.XPathSyntaxException:。/[@Name='id']:2:预期为“.”、“…”、“@'、“*”,
    我已经用
    “/[@Name='id']”解决了这个问题。
    但我现在遇到了一个其他规则失败的问题,将它们转换为使用
    @Name
    后。我将用新问题更新我的初始问题