4

カスタム チェックを eclipse-cs プラグインとして追加しようとしていますが、問題が発生しました。

カスタムチェックでJavaファイルを作成しました。チェックは機能していますが、ボックスがないため、カスタム チェック メッセージを変更できません。

Java ファイルは次のようになります。

package myCheck.checks;

import com.puppycrawl.tools.checkstyle.api.Check;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;

public class MethodLimitCheck extends Check {

    private int max = 30;

    public int[] getDefaultTokens() {
        return new int[] { TokenTypes.CLASS_DEF, TokenTypes.INTERFACE_DEF };
    }

    public void setMax(int limit) {
        max = limit;
    }

    public void visitToken(DetailAST ast) {
        // find the OBJBLOCK node below the CLASS_DEF/INTERFACE_DEF
        DetailAST objBlock = ast.findFirstToken(TokenTypes.OBJBLOCK);
        // count the number of direct children of the OBJBLOCK
        // that are METHOD_DEFS
        int methodDefs = objBlock.getChildCount(TokenTypes.METHOD_DEF);
        // report error if limit is reached
        if (methodDefs > max) {
            log(ast.getLineNo(), "methodlimit", max);
        }
    }
}

構成ボックスは次のようになります。

ここに画像の説明を入力

ここからカスタム メッセージを変更することはできません。ボックスを次のようにしたいので、構成ボックスからカスタム メッセージを設定できます。

ここに画像の説明を入力

これを機能させるには、コードまたはファイルにどのような変更を加える必要がありますか?

4

1 に答える 1

1

カスタム メッセージをcheckstyle.xmlに追加するだけです。

<module name="MethodLimitCheck">
    <property name="max" value="42"/>
    <message key="methodlimit" value="my test message default"/>
</module>

次に、eclipse-cs ダイアログに表示されます。getCustomMessages()チェックでは、メソッド ( javadoc )を使用してカスタム メッセージにアクセスできます。

更新: checkstyle.xml<message>に要素を 追加せずに、デフォルトで eclipse-cs ダイアログにカスタム メッセージを表示するには、「ログ エラー」で説明されているように、カスタム チェックのmessages.propertiesを作成する必要があります。次に、カスタム チェックを含む Eclipse プラグインで、要素をcheckstyle-metadata.xmlに追加します。

<rule-metadata name="MethodLimit" internal-name="MethodLimitCheck" parent="TreeWalker">
    <alternative-name internal-name="com.foo.bar.MethodLimitCheck"/>
    <description>...</description>
    <!-- property-metadata -->
    <message-key key="methodlimit" />
</rule-metadata>
于 2013-08-15T12:17:48.663 に答える