e16129ec4e4651a783e83a182e964981bdc469c2
[yangtools.git] / common / checkstyle-logging / src / main / java / org / opendaylight / yangtools / checkstyle / LoggerFactoryClassParameterCheck.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.yangtools.checkstyle;
10
11 import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
12 import com.puppycrawl.tools.checkstyle.api.DetailAST;
13 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
14 import java.util.Optional;
15
16 public class LoggerFactoryClassParameterCheck extends AbstractCheck {
17
18     private static final String LOG_MESSAGE = "LoggerFactory.getLogger Class argument is incorrect.";
19     private static final String METHOD_NAME = "LoggerFactory.getLogger";
20
21     @Override
22     public int[] getDefaultTokens() {
23         return new int[] { TokenTypes.METHOD_CALL };
24     }
25
26     @Override
27     public void visitToken(final DetailAST ast) {
28         final String methodName = CheckLoggingUtil.getMethodName(ast);
29         if (methodName.equals(METHOD_NAME)) {
30             final String className = CheckLoggingUtil.getClassName(ast);
31             final Optional<String> optLoggerArgument = getFirstArgument(ast);
32             if (optLoggerArgument.isPresent()) {
33                 if (!optLoggerArgument.get().equals(className)) {
34                     log(ast.getLineNo(), LOG_MESSAGE);
35                 }
36             } else {
37                 log(ast.getLineNo(),
38                         String.format("Invalid parameter in \"getLogger\" method call in class: %s", className));
39             }
40         }
41     }
42
43     protected Optional<String> getFirstArgument(final DetailAST ast) {
44         final DetailAST findFirstToken = ast.findFirstToken(TokenTypes.ELIST);
45         if (findFirstToken != null) {
46             DetailAST childToken = findFirstToken.getFirstChild();
47             if (childToken != null) {
48                 childToken = childToken.getFirstChild();
49                 if (childToken != null) {
50                     childToken = childToken.getFirstChild();
51                     if (childToken != null) {
52                         return Optional.of(childToken.getText());
53                     }
54                 }
55             }
56         }
57         return Optional.empty();
58     }
59
60 }