Checkstyle logging rules
[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.Check;
12 import com.puppycrawl.tools.checkstyle.api.DetailAST;
13 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
14
15 public class LoggerFactoryClassParameterCheck extends Check {
16
17     private static final String LOG_MESSAGE = "LoggerFactory.getLogger Class argument is incorrect.";
18     private static final String METHOD_NAME = "getLogger";
19
20     @Override
21     public int[] getDefaultTokens() {
22         return new int[]{TokenTypes.METHOD_CALL};
23     }
24
25     @Override
26     public void visitToken(DetailAST aAST) {
27         final String methodName = CheckLoggingUtil.getMethodName(aAST);
28         if(methodName.equals(METHOD_NAME)) {
29             final String className = getClassName(aAST);
30             final String parameter = aAST.findFirstToken(TokenTypes.ELIST).getFirstChild().getFirstChild().getFirstChild().getText();
31             if(!parameter.equals(className)) {
32                 log(aAST.getLineNo(), LOG_MESSAGE);
33             }
34         }
35     }
36
37     private String getClassName(final DetailAST aAST) {
38         DetailAST parent = aAST.getParent();
39         while(parent.getType() != TokenTypes.CLASS_DEF && parent.getType() != TokenTypes.ENUM_DEF) {
40             parent = parent.getParent();
41         }
42         return parent.findFirstToken(TokenTypes.IDENT).getText();
43     }
44
45 }