如何在Java的PMD XPath规则中判断两个ClassType节点是否代表同一类
在PMD XPath规则中判断两个ClassType节点是否代表同一类
针对你需要通用判断两个ClassType是否指向同一类的场景,PMD 7.x(含你使用的7.24.0版本)提供了两种直接的解决方式:
1. 直接使用类型比较函数(推荐)
PMD内置了pmd-java:areTypesEqual()函数,专门用于判断两个类型节点是否代表同一类,无需提前知晓全限定类名。该函数会自动处理短名、全限定名、导入类等各种引用场景的解析匹配。
示例XPath规则(以匹配类体中类型相同的两个字段为例):
//ClassBody[FieldDeclaration[1]/ClassType[pmd-java:areTypesEqual(., ../FieldDeclaration[2]/ClassType)]]
这个表达式会筛选出包含两个字段的类体,且这两个字段的ClassType指向同一个类。
2. 获取全限定类名后比较
如果你需要获取ClassType对应的全限定类名字符串,可以使用pmd-java:getResolvedTypeFQCN()函数,它会返回该节点解析后的类的FQCN,之后直接比较字符串即可。
示例XPath规则:
//FieldDeclaration[1]/ClassType[pmd-java:getResolvedTypeFQCN(.) = pmd-java:getResolvedTypeFQCN(../../FieldDeclaration[2]/ClassType)]
在你提供的示例代码中,两个ClassType节点调用该函数都会返回java.lang.String,因此比较结果为true。
内容的提问来源于stack exchange,提问作者toKrause
相关产品推荐
相关产品推荐

