最近,我们试图编写一个 PMD 规则来发现 Spring JDBC 模板的 query* 方法的所有出现。查看一些示例 AST xml 代码,我编写了以下无害的 XPATH 表达式。
//PrimaryPrefix[Name[starts-with(@Image,'jdbcTemplate.query')]]
但很快,我们意识到这还不够。如果有人写“this.jdbcTemplate.queryForObject”,那么“this”变成“Primary Prefix”,“jdbcTemplate”变成“Suffix”。JDBCTemplate 对象实例的变量名也可以是任何东西。
我认为构造一个 XPATH 表达式来找出特定 Class 方法调用的发生是相当容易的——在代码中的任何地方,但是看着 AST 树,我只是无法弄清楚。XPATH 真的可能吗,还是我们必须编写 Java 代码?