Avoid catch (NullPointerException e), do explicit if == null
[yangtools.git] / common / checkstyle-logging / src / main / java / org / opendaylight / yangtools / checkstyle / LoggerFactoryClassParameterCheck.java
index 95915250e46c90222dbc2f9c81497143ba53325b..b3812f8ae01709818c6b2a848928045ff19ea220 100644 (file)
@@ -8,30 +8,53 @@
 
 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 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";
 
     @Override
     public int[] getDefaultTokens() {
-        return new int[]{TokenTypes.METHOD_CALL};
+        return new int[] { TokenTypes.METHOD_CALL };
     }
 
     @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 void visitToken(DetailAST ast) {
+        final String methodName = CheckLoggingUtil.getMethodName(ast);
+        if (methodName.equals(METHOD_NAME)) {
+            final String className = CheckLoggingUtil.getClassName(ast);
+            DetailAST findFirstToken = ast.findFirstToken(TokenTypes.ELIST);
+            if (findFirstToken == null) {
+                logError(ast, className);
+                return;
+            }
+            DetailAST childToken = findFirstToken.getFirstChild();
+            if (childToken == null) {
+                logError(ast, className);
+                return;
+            }
+            childToken = childToken.getFirstChild();
+            if (childToken == null) {
+                logError(ast, className);
+                return;
+            }
+            childToken = childToken.getFirstChild();
+            if (childToken == null) {
+                logError(ast, className);
+                return;
+            }
+            final String token = childToken.getText();
+            if (!token.equals(className)) {
+                log(ast.getLineNo(), LOG_MESSAGE);
             }
         }
     }
 
+    protected void logError(DetailAST ast, String className) {
+        log(ast.getLineNo(), String.format("Invalid parameter in \"getLogger\" method call in class: %s", className));
+    }
 }