我有另一个关于如何安装和运行自定义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);
}
}
答案 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