我有一个多模块Maven项目,当前正在运行Checkstyle,PMD和Findbugs。在某些类中,我有带有注释的方法。这些注释具有一个参数,该参数的值需要遵循某个正则表达式。有没有一种简单的方法可以使用前面提到的任何工具查找此参数值并验证其是否遵循该模式。我尝试为Checkstyle编写自定义检查。但是,由于Checkstyle仅逐行显示,因此无法验证使用最终字符串设置的参数。我环顾四周,但找不到任何东西。非常感谢你。
答案 0 :(得分:2)
是的。对于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,但在规则定义中可以覆盖