我想为Checkstyle 8.1编写自定义支票。我成功安装并配置了Gradle Checkstyle并写了我的支票草图。但是当我试图运行我的支票时 - 我收到了错误
Execution failed for task ':app:checkstyle'.
> Unable to process files: FILE1, FILE2 ...
这是我的支票代码
package com.lsurvila.checkstyle;
import com.puppycrawl.tools.checkstyle.api.*;
import javax.xml.ws.LogicalMessage;
public class LinesAfterClassJavadocCheck extends AbstractCheck
{
private static final int DEFAULT_MAX = 30;
private int max = DEFAULT_MAX;
/**
* Returns the default token a check is interested in. Only used if the
* configuration for a check does not define the tokens.
*
* @return the default tokens
* @see TokenTypes
*/
@Override
public int[] getDefaultTokens() {
return new int[]{TokenTypes.CLASS_DEF, TokenTypes.INTERFACE_DEF};
}
/**
* The configurable token set.
* Used to protect Checks against malicious users who specify an
* unacceptable token set in the configuration file.
* The default implementation returns the check's default tokens.
*
* @return the token set this check is designed for.
* @see TokenTypes
*/
@Override
public int[] getAcceptableTokens() {
return new int[0];
}
/**
* The tokens that this check must be registered for.
*
* @return the token set this must be registered for.
* @see TokenTypes
*/
@Override
public int[] getRequiredTokens() {
return new int[0];
}
@Override
public void visitToken(DetailAST ast)
{
//throw new IllegalArgumentException("SUKA BLEAT");
DetailAST objBlock1 = ast.findFirstToken(TokenTypes.LITERAL_CLASS);
if (objBlock1 == null) {
log(ast.getLineNo(), "PIDOR");
//System.out.print("PIDOR");
}
String a = getLine(objBlock1.getLineNo()-1);
log(1,a);
//System.out.print(a);
if (a.isEmpty()) {
log(ast.getLineNo(), "PIDOR1");
}
/*DetailAST objBlock2 = ast.findFirstToken(TokenTypes.MODIFIERS).findFirstToken(TokenTypes.BLOCK_COMMENT_BEGIN);
if (objBlock2 == null) {
log(ast.getLineNo(), "PIDOR1");
//System.out.print("PIDOR");
}*/
/*DetailAST objBlock2 = ast.findFirstToken(TokenTypes.LITERAL_CLASS);
DetailAST objBlock3 = objBlock1.findFirstToken(TokenTypes.MODIFIERS).findFirstToken(TokenTypes.BLOCK_COMMENT_BEGIN).findFirstToken(TokenTypes.BLOCK_COMMENT_END);
if (objBlock3.getLine()+2 != objBlock2.getLine()) {
log(ast.getLineNo(), "PIDOR");
}*/
}
}
我发现log()方法产生了这个异常。我没有找到另一种方法来查看我的代码中发生了什么 - 甚至System.out.print()都没有显示任何内容。如何运行附加到我的自定义检查的调试器?在编译应用程序之前我的检查已启动,这种情况很复杂。
以下是我在应用项目中检查的方式: enter image description here
抱歉我的英文不好
答案 0 :(得分:0)
我建议使用Command line interface查看Checkstyle的原始输出和错误。我不是特别知道gradle如何处理这些情况,但System.out
应该从CLI开始工作。如果仍然没有输出,则可能是visitToken
甚至没有被调用。
我还建议使用-t
选项查看文件的AST树,以确认您正在为您的支票抓取正确的代币。
return new int[0];
这是错误的,你必须为Acceptable
返回一个令牌,否则你说你的支票什么都不接受。将其更改为返回getDefaultTokens
。
我建议您在their google group form获得小组的帮助。