Создание пользовательского контрольного стиля - PullRequest
0 голосов
/ 06 июля 2011

У меня есть еще один StackOverflow вопрос о том, как установить и запустить пользовательский контрольный стиль.Я узнал, как это сделать, и вскоре обновлю этот ответ подробными инструкциями.Теперь у меня проблемы с настройкой чека.Ниже мой код.Проблема в том, что я хотел бы видеть полный пакет как строку (например, 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 Ответ

2 голосов
/ 06 июля 2011

То, что вы ищете, используется для проверки имен пакетов, вы должны использовать код, подобный следующему:

@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

...