我正在尝试创建一个自定义规则,用于标记void方法中return语句的使用,例如:
public class MyClass
{
public void myMethod(Object someObj)
{
if (someObj == null)
{
return;
}
...
}
}
我已使用以下XPath创建了自定义XPath规则:
//MethodDeclaration[not(ResultType/Type) and (count(//ReturnStatement) > 0)]
返回RuleDesigner中的ASTMethodDeclaration元素,但是当我将此规则导入Eclipse并针对代码运行PMD时,它不会标记我期望的方法,即符合上述描述的方法(void方法)包含回报)。
任何人都有任何想法,问题可能在这里?我的XPath有什么问题,还是其他什么东西?
我正在使用插件的v3.2.6,其中包含pmd14-4.2.5.jar。
谢谢, 克里斯
答案 0 :(得分:0)
这是您使用的确切XPath吗?它没有很好地形成。 (它缺少一个紧密的paren。)我建议编写测试工具来测试独立于PMD的xpath。您可以在Eclipse中为类生成AST(或者我认为是独立的),因此您可以使用XML来运行它。
答案 1 :(得分:0)
好的,解决了这个问题。 XPath逻辑是错误的,我在运行Ant任务后意识到它返回> 2000违反此规则!主要是在void方法上,根本没有return语句。
这个XPath工作,比原来的更简单,并突出显示return语句本身,而不是方法,这可能比我突出显示方法的初衷更好:
//MethodDeclaration[not(ResultType/Type)]//ReturnStatement