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;
-public class LogMessageConcatenationCheck extends Check {
+public class LogMessageConcatenationCheck extends AbstractCheck {
private static final String LOG_MESSAGE = "Log message contains string concatenation.";
+ 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(CheckLoggingUtil.isLogMethod(methodName)) {
- final String logMessage = aAST.findFirstToken(TokenTypes.ELIST).getFirstChild().getFirstChild().getText();
- if(logMessage.contains("+")) {
- 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 (CheckLoggingUtil.isLogMethod(methodName)) {
+ DetailAST plus = ast.findFirstToken(TokenTypes.ELIST).getFirstChild().findFirstToken(TokenTypes.PLUS);
+ if (plus != null) {
+ while (plus.getChildCount(TokenTypes.PLUS) != 0) {
+ plus = plus.findFirstToken(TokenTypes.PLUS);
+ }
+ if (plus.getChildCount(TokenTypes.STRING_LITERAL) != 2) {
+ log(ast.getLineNo(), LOG_MESSAGE);
+ }
}
}
}