【问题标题】:Checking for variable value using Checkstyle/PMD/Findbugs使用 Checkstyle/PMD/Findbugs 检查变量值
【发布时间】:2018-12-13 00:30:24
【问题描述】:

我有一个多模块 Maven 项目,目前正在运行 Checkstyle、PMD 和 Findbugs。在某些类中,我有带有注释的方法。这些注释有一个参数,其值需要遵循某个正则表达式。是否有一种简单的方法来查找此参数值并使用前面提到的任何工具验证它是否遵循模式。我尝试为 Checkstyle 编写自定义检查。但是,由于 Checkstyle 只能逐行查看,它无法验证使用最终字符串设置的参数。我环顾四周,但找不到任何东西。非常感谢。

【问题讨论】:

    标签: java maven checkstyle findbugs pmd


    【解决方案1】:

    是的,有。这看起来像是 PMD 的 XPath rules 的主要案例。

    您可以在 AST 上编写 XPath 表达式来匹配不符合您定义的注释。此外,the designer 对帮助您开发和测试规则非常有用。

    所以你可能会写这样的东西:

    //Annotation[pmd-java:typeIs('java.lang.SuppressWarnings') and .//MemberValue//Literal[not(matches(@Image, '[0-9]+'))]]
    

    将匹配所有@SuppressWarnings 注释,其值与[0-9]+ 不匹配。如果需要,您可以进一步细化它以查找特定键的值。

    一旦您对 XPath 感到满意,您只需编写 into your ruleset 即可开始在您的代码库上运行它。

    请注意,示例中给出的 XPath 是 XPath 2.0,因为它使用了旧版本中不可用的 matches 函数。 PMD 支持 XPath 1.0、1.0 兼容模式和 2.0,默认为 1.0,但在规则定义中可覆盖

    【讨论】:

    • Name 的类型被汇总到注解中,因此无需获取 Name 节点 ;)
    • @LFarquaad 很高兴为您提供帮助!请记住将答案标记为正确以供将来参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    相关资源
    最近更新 更多