Я написал вышеупомянутое правило и при попытке запустить его из командной строки я получаю одно и то же сообщение, а именно:
Невозможно создать Checker: невозможно инициализировать модуль TreeWalker - Невозможно создать экземпляр LoggerAttrCheck
Я разложил свои чеки до одного в «Шашке» и одного в «Treewalker», неукоснительно скопировал записи, предложенные в руководстве, и без радости. У всех были похожие проблемы с пользовательскими правилами. Я WinXP, Java 1.6 (Eclipse), папка checkstyle-5.1 находится в пути.
Я могу предоставить код, но это пахнет экологической проблемой.
Код выглядит следующим образом:
package com.mystuff.checkstyle.hecks;
import com.puppycrawl.tools.checkstyle.api.Check;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.FullIdent;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;
import com.puppycrawl.tools.checkstyle.checks.CheckUtils;
/**
*
*
* This package provides the custom checks that were required outside
* of the standard checks provided
*
*/
public class LoggerAttrCheck extends Check
{
/**
*
*
* The Logger must be declared as a static final class attribute
*
*/
@Override
public int[] getDefaultTokens()
{
return new int[] { TokenTypes.VARIABLE_DEF};
}
@Override
public void visitToken(DetailAST aAST)
{
if(aAST.getType()==TokenTypes.VARIABLE_DEF)
visitVariableDef(aAST);
}
/**
* Checks type of given variable.
* @param aAST variable to check.
*/
private void visitVariableDef(DetailAST aAST)
{
checkVariableDefn(aAST);
}
/**
*
* Checks variable to see if its a Logger and static final
* * @param aAST node to check.
*/
private void checkVariableDefn(DetailAST aAST)
{
final DetailAST type = aAST.findFirstToken(TokenTypes.TYPE);
final FullIdent ident = CheckUtils.createFullType(type);
if ((ident.getText().equals("Logger")))
{
if((!aAST.branchContains(TokenTypes.FINAL))||(!aAST.branchContainsTokenTypes.LITERAL_STATIC)))
{
log(type.getLineNo(), type.getColumnNo(),
"Logger not defined as static final class attribute", type.getText());
}
}
}
}
Это создает com.stuff.checkstyle.checks.jar, поэтому checkstyle_packages.xml выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE checkstyle-packages PUBLIC
"-//Puppy Crawl//DTD Package Names 1.3//EN"
"http://www.puppycrawl.com/dtds/packages_1_3.dtd">
<checkstyle-packages>
<package name="com.mystuff.checkstyle.checks"/>
</checkstyle-packages>
Все идеи с благодарностью приняты!