java - 创建自定义检查样式

标签 java checkstyle

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

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);
    }
}

最佳答案

您要查找的内容用于检查包名称,您应该使用类似于以下的代码:

@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

关于java - 创建自定义检查样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601993/

相关文章:

java - `checkstyle-suppressions.xml` 的位置?

java - Checkstyle 冗长的解决方案?

java - Checkstyle AbstractClassName 检查 : Reasons for flagging classes ending with "Factory"

java - 如何在字符串中保存即将到来的日期

java - 如何判断JTextPane中所选文本的大小是否不同?

java - 将给定的 String 转换为 Date 对象

java - 如何强制 Checkstyle 中的枚举常量必须为大写?

java - Opengl 变换反馈在 Android 上正确制作

java - 在 Java Swing 应用程序中保留对象值

java - 检查字段是否被覆盖