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 を実行すると、期待したメソッド、つまり上記の説明に一致するメソッド (戻り値を含む void メソッド) にフラグが立てられません。 .

ここで何が問題なのか、誰にもわかりませんか?XPath に問題があるのでしょうか、それとも別の可能性がありますか?

pmd14-4.2.5.jar を含む v3.2.6 のプラグインを使用しています。

ありがとう、クリス

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 に答える