02ba5b8d78a714d9bbf618135381c7416fa9f5df
[yangtools.git] / common / checkstyle-logging / src / main / java / org / opendaylight / yangtools / checkstyle / AbstractLogMessageCheck.java
1 /*
2  * Copyright (c) 2016 Red Hat, 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 package org.opendaylight.yangtools.checkstyle;
9
10 import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
11 import com.puppycrawl.tools.checkstyle.api.DetailAST;
12 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
13 import java.util.Optional;
14
15 public abstract class AbstractLogMessageCheck extends AbstractCheck {
16
17     @Override
18     public int[] getDefaultTokens() {
19         return new int[]{TokenTypes.METHOD_CALL};
20     }
21
22     @Override
23     public void visitToken(DetailAST ast) {
24         String methodName = CheckLoggingUtil.getMethodName(ast);
25         if (CheckLoggingUtil.isLogMethod(methodName)) {
26             Optional<String> optLogMessage = getLogMessage(ast);
27             optLogMessage.ifPresent(logMessage -> visitLogMessage(ast, logMessage));
28         }
29     }
30
31     private Optional<String> getLogMessage(DetailAST ast) {
32         ast = ast.findFirstToken(TokenTypes.ELIST);
33         if (ast != null) {
34             ast = ast.getFirstChild();
35             if (ast != null) {
36                 ast = ast.getFirstChild();
37                 if (ast != null) {
38                     if (ast.getType() == TokenTypes.STRING_LITERAL) {
39                         return Optional.ofNullable(ast.getText());
40                     }
41                 }
42             }
43         }
44         return Optional.empty();
45     }
46
47     protected abstract void visitLogMessage(DetailAST ast, String logMessage);
48 }