创建自定义Checkstyle

时间:2011-07-06 19:42:56

标签: java checkstyle

我有另一个关于如何安装和运行自定义checkstyle的StackOverflow question。我已经学会了如何做到这一点,我将很快通过详细说明更新答案。现在我无法自定义支票。以下是我的代码。问题是我希望将完全限定的包视为一个字符串(例如com.amir.foo) - 但是当我运行getText()或仅toString()时,我会得到一些模糊的结果([checkstyle] ]包装设置为:ANNOTATIONS)。有谁知道如何使用它来达到预期的效果?

import com.puppycrawl.tools.checkstyle.api.*;

public class MyCheck extends Check
{

    FullIdent packageDeclaration;

    public int[] getDefaultTokens() {
        return new int[]{TokenTypes.PACKAGE_DEF};
    }

    public void visitToken(DetailAST ast)
    {

        switch(ast.getType()) {
            case TokenTypes.PACKAGE_DEF:
                System.out.println("got package!");
                visitPackage(ast);
                break;
            default:
                System.out.println("naughty!");
        }

    }

    private void visitPackage(DetailAST pack) {
        packageDeclaration = FullIdent.createFullIdentBelow(pack);
        System.out.println("package set to : " +packageDeclaration);
    }
}

1 个答案:

答案 0 :(得分:2)

检查包名称时使用的是什么,您应该使用类似于以下的代码:

@Override
public void visitToken(DetailAST aAST)
{
    final DetailAST nameAST = aAST.getLastChild().getPreviousSibling();
    final FullIdent full = FullIdent.createFullIdent(nameAST);
    final String package = full.getText();


    // do some fancy stuff with package name
}

有关详细信息,请参阅PackageNameCheck的源代码: http://checkstyle.hg.sourceforge.net/hgweb/checkstyle/checkstyle/file/cd352660c53a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/PackageNameCheck.java