0

我正在尝试创建一个自定义规则来标记在 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 时,它不会标记我期望的方法,即与上述描述匹配的方法(包含返回的无效方法) .

有人知道这里可能出现什么问题吗?我的 XPath 有问题还是有其他问题?

我正在使用插件的 v3.2.6,其中包含 pmd14-4.2.5.jar。

谢谢,克里斯

4

2 回答 2

0

那是您使用的确切 XPath 吗?它没有很好地形成。(它缺少一个紧密的括号。)我建议编写一个测试工具来测试独立于 PMD 的 xpath。您可以在 Eclipse(或者我认为是独立的)中为一个类生成 AST,这样您就可以使用 XML 来运行它。

于 2012-05-18T02:39:38.483 回答
0

好的,解决了问题。XPath 逻辑是错误的,我在运行 Ant 任务后意识到它返回了超过 2000 条违反此规则的行为!主要是在根本没有 return 语句的 void 方法上。

这个 XPath 有效,比原来的更简单,并突出了 return 语句本身,而不是方法,这可能比我最初突出方法的意图更好:

//MethodDeclaration[not(ResultType/Type)]//ReturnStatement
于 2012-05-18T14:03:47.910 回答