package org.opendaylight.yangtools.checkstyle;
-import com.puppycrawl.tools.checkstyle.api.Check;
+import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;
+import java.util.Optional;
-public class LoggerFactoryClassParameterCheck extends Check {
+public class LoggerFactoryClassParameterCheck extends AbstractCheck {
private static final String LOG_MESSAGE = "LoggerFactory.getLogger Class argument is incorrect.";
- private static final String METHOD_NAME = "getLogger";
+ private static final String METHOD_NAME = "LoggerFactory.getLogger";
+ private static final int[] TOKENS = { TokenTypes.METHOD_CALL };
@Override
public int[] getDefaultTokens() {
- return new int[]{TokenTypes.METHOD_CALL};
+ return TOKENS;
}
@Override
- public void visitToken(DetailAST aAST) {
- final String methodName = CheckLoggingUtil.getMethodName(aAST);
- if(methodName.equals(METHOD_NAME)) {
- final String className = getClassName(aAST);
- final String parameter = aAST.findFirstToken(TokenTypes.ELIST).getFirstChild().getFirstChild().getFirstChild().getText();
- if(!parameter.equals(className)) {
- log(aAST.getLineNo(), LOG_MESSAGE);
+ public int[] getAcceptableTokens() {
+ return TOKENS;
+ }
+
+ @Override
+ public int[] getRequiredTokens() {
+ return TOKENS;
+ }
+
+ @Override
+ public void visitToken(final DetailAST ast) {
+ final String methodName = CheckLoggingUtil.getMethodName(ast);
+ if (methodName.equals(METHOD_NAME)) {
+ final String className = CheckLoggingUtil.getClassName(ast);
+ final Optional<String> optLoggerArgument = getFirstArgument(ast);
+ if (optLoggerArgument.isPresent()) {
+ if (!optLoggerArgument.get().equals(className)) {
+ log(ast.getLineNo(), LOG_MESSAGE);
+ }
+ } else {
+ log(ast.getLineNo(),
+ String.format("Invalid parameter in \"getLogger\" method call in class: %s", className));
}
}
}
- private String getClassName(final DetailAST aAST) {
- DetailAST parent = aAST.getParent();
- while(parent.getType() != TokenTypes.CLASS_DEF && parent.getType() != TokenTypes.ENUM_DEF) {
- parent = parent.getParent();
+ protected Optional<String> getFirstArgument(final DetailAST ast) {
+ final DetailAST findFirstToken = ast.findFirstToken(TokenTypes.ELIST);
+ if (findFirstToken != null) {
+ DetailAST childToken = findFirstToken.getFirstChild();
+ if (childToken != null) {
+ childToken = childToken.getFirstChild();
+ if (childToken != null) {
+ childToken = childToken.getFirstChild();
+ if (childToken != null) {
+ return Optional.of(childToken.getText());
+ }
+ }
+ }
}
- return parent.findFirstToken(TokenTypes.IDENT).getText();
+ return Optional.empty();
}
}