Bump odlparent to 3.0.0-SNAPSHOT and fix breakages
[yangtools.git] / common / checkstyle-logging / src / main / java / org / opendaylight / yangtools / checkstyle / LoggerFactoryClassParameterCheck.java
index 95915250e46c90222dbc2f9c81497143ba53325b..21d4abacbafbeecc6e760a48169c41dd7932eb46 100644 (file)
@@ -8,30 +8,64 @@
 
 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 = CheckLoggingUtil.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));
+            }
+        }
+    }
+
+    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 Optional.empty();
     }
 
 }