【问题标题】:Creating a Custom Checkstyle创建自定义检查样式
【发布时间】:2011-07-06 19:42:56
【问题描述】:

我有另一个 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);
    }
}

【问题讨论】:

    标签: java checkstyle


    【解决方案1】:

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

    @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

    【讨论】:

    • 感谢您的快速回复。你能解释一下这段代码在做什么吗?为什么我们先获取LastChild 然后获取PreviousSibling?
    • 附带说明,此代码不会编译,因为您在代码中使用了 package 关键字。
    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2015-03-22
    • 2023-03-18
    相关资源
    最近更新 更多