Sonarqube 用于查找方法用法的自定义PMD规则

Sonarqube 用于查找方法用法的自定义PMD规则,sonarqube,pmd,Sonarqube,Pmd,最近,我们试图编写一个PMD规则来发现SpringJDBC模板的query*方法的所有情况。查看一些示例ASTXML代码,我编写了以下无害的XPATH表达式 //PrimaryPrefix[Name[以(@Image,'jdbcTemplate.query')开头]] 但很快,我们意识到这是不够的。如果有人写“this.jdbcTemplate.queryForObject”,那么“this”将成为“主前缀”,而“jdbcTemplate”将成为“后缀”。JDBCTemplate对象实例的变量名

最近,我们试图编写一个PMD规则来发现SpringJDBC模板的query*方法的所有情况。查看一些示例ASTXML代码,我编写了以下无害的XPATH表达式

//PrimaryPrefix[Name[以(@Image,'jdbcTemplate.query')开头]]

但很快,我们意识到这是不够的。如果有人写“this.jdbcTemplate.queryForObject”,那么“this”将成为“主前缀”,而“jdbcTemplate”将成为“后缀”。JDBCTemplate对象实例的变量名也可以是任何名称


我认为构造一个XPATH表达式来找出特定类方法调用的发生情况是相当容易的——在代码中的任何地方,但是查看AST树,我就是无法理解它。XPATH真的是可能的,还是我们必须编写Java代码

我建议使用声纳查找此类违规行为。

我建议使用声纳查找此类违规行为。

声纳可能是一个选项,但我感到困惑的是,我们无法在PMD规则集中将如此简单的内容表示为XPath。毕竟,我只是在寻找一种方法来发现objects方法调用的发生。@NarendraNaidu你把这个问题标记为“Sonar”,不是吗?PMD规则扩展必须安装在Sonar服务器上(以便构建插件可以在运行时下载它们)。对于这种类型的约束,使用体系结构规则引擎要简单得多。毕竟,这是该功能的设计目的!此外,您还可以使用GUI编辑规则。谢谢。我同意你的观点,通过图形用户界面编写规则要简单得多。但目前Sonar体系结构规则只支持提供包或类名。我找不到指定特定方法的选项。例如,我只想标记所有JdbcTempalte query*方法。Sonar可能是一个选项,但我感到困惑的是,我们不能在PMD规则集中将如此简单的东西表示为XPath。毕竟,我只是在寻找一种方法来发现objects方法调用的发生。@NarendraNaidu你把这个问题标记为“Sonar”,不是吗?PMD规则扩展必须安装在Sonar服务器上(以便构建插件可以在运行时下载它们)。对于这种类型的约束,使用体系结构规则引擎要简单得多。毕竟,这是该功能的设计目的!此外,您还可以使用GUI编辑规则。谢谢。我同意你的观点,通过图形用户界面编写规则要简单得多。但目前Sonar体系结构规则只支持提供包或类名。我找不到指定特定方法的选项。例如,我只想标记所有JdbcTempalte query*方法。