2012-08-06 93 views
2

最近,我们试图编写PMD规则来查找Spring JDBC模板的查询*方法的所有发生情况。看一些示例AST xml代码,我写了以下无害的XPATH表达式。用于查找方法用法的自定义PMD规则

//PrimaryPrefix[Name[starts-with(@Image,'jdbcTemplate.query')]]

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

我认为构造一个XPATH表达式来查找特定的Class方法调用的发生是相当容易的 - 在代码中的任何地方,但看着AST树,我只是无法弄清楚。 XPATH是否真的有可能,或者我们必须编写Java代码?

回答

0

我建议使用Sonar architectural rules engine来找到这种违规行为。

+0

Sonar可能是一个选项,但我很困惑,我们无法像PMD规则集中的XPath那样表达如此简单的东西。毕竟,我只是在寻找一种方法来发现对象方法调用的发生。 – 2012-08-08 09:55:19

+0

@NarendraNaidu你把问题标记为“声纳”不是吗? PMD规则扩展必须安装在Sonar服务器上(以便构建插件可以在运行时下载它们)。对这种类型的约束使用体系结构规则引擎要简单得多。这是该功能旨在支持毕竟!另外你可以得到一个GUI来编辑规则。 – 2012-08-08 17:20:42

+0

谢谢。我同意你的观点,通过图形用户界面编写规则要简单得多。但是目前声纳体系结构规则仅支持提供包或类名称。我找不到指定特定方法的选项。对于例如我只想标记所有JdbcTempalte查询*方法。 – 2012-08-10 12:19:39