【问题标题】:Custom PMD rule not being highlighted by PMD Eclipse pluginPMD Eclipse 插件未突出显示自定义 PMD 规则
【发布时间】:2012-05-17 17:35:53
【问题描述】:

我正在尝试创建一个自定义规则,用于标记在 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。

谢谢, 克里斯

【问题讨论】:

    标签: java eclipse xpath pmd


    【解决方案1】:

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

    【讨论】:

    • 不,这不是确切的 XPath。我使用的是格式良好的,并且已经在 PMD Eclipse 插件 RuleDesigner 中进行了测试。它返回正确的元素(ASTMethodDeclaration)。
    • 这很烦人 - 当我尝试使用“您只能每 5 秒编辑一次评论”消息对其进行编辑时,它卡住了,尽管我确实等待了超过 5 秒!无论如何,试图编辑评论,所以它说:@jeanne-boyarsky 不,这不是确切的 XPath。我使用的是格式良好的,并且已经在 PMD Eclipse 插件 RuleDesigner 中进行了测试。它返回正确的元素(ASTMethodDeclaration)。该行应该是: //MethodDeclaration[not(ResultType/Type) and (count(//ReturnStatement) > 0)]
    【解决方案2】:

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

    这个 XPath 有效,比原来的更简单,并且高亮返回语句本身,而不是方法,这可能比我原来高亮方法的意图更好:

    //MethodDeclaration[not(ResultType/Type)]//ReturnStatement
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2013-04-08
      相关资源
      最近更新 更多