From fcdade475d47b05e4f5bef61ee34816cd6fe4e96 Mon Sep 17 00:00:00 2001 From: Arnaud Jeansen Date: Wed, 26 May 2021 16:48:16 +0200 Subject: [PATCH] Remove and replace java rule by XPath rule --- .../errorprone/MoreThanOneLoggerRule.java | 88 ------------------- .../resources/category/java/errorprone.xml | 19 +++- 2 files changed, 18 insertions(+), 89 deletions(-) delete mode 100644 pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/MoreThanOneLoggerRule.java diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/MoreThanOneLoggerRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/MoreThanOneLoggerRule.java deleted file mode 100644 index 68f00a99dc..0000000000 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/MoreThanOneLoggerRule.java +++ /dev/null @@ -1,88 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.java.rule.errorprone; - -import java.util.Stack; - -import net.sourceforge.pmd.lang.ast.Node; -import net.sourceforge.pmd.lang.java.ast.ASTAnnotationTypeDeclaration; -import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; -import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType; -import net.sourceforge.pmd.lang.java.ast.ASTEnumDeclaration; -import net.sourceforge.pmd.lang.java.ast.ASTReferenceType; -import net.sourceforge.pmd.lang.java.ast.ASTType; -import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclarator; -import net.sourceforge.pmd.lang.java.ast.JavaNode; -import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; -import net.sourceforge.pmd.lang.java.types.TypeTestUtil; -import net.sourceforge.pmd.util.NumericConstants; - -public class MoreThanOneLoggerRule extends AbstractJavaRule { - - private static final String LOG4J_LOGGER_NAME = "org.apache.log4j.Logger"; - private static final String LOG4J2_LOGGER_NAME = "org.apache.logging.log4j.Logger"; - private static final String JAVA_LOGGER_NAME = "java.util.logging.Logger"; - private static final String SLF4J_LOGGER_NAME = "org.slf4j.Logger"; - - private Stack stack = new Stack<>(); - - private Integer count; - - @Override - public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { - return init(node, data); - } - - @Override - public Object visit(ASTEnumDeclaration node, Object data) { - return init(node, data); - } - - @Override - public Object visit(ASTAnnotationTypeDeclaration node, Object data) { - return init(node, data); - } - - private Object init(JavaNode node, Object data) { - stack.push(count); - count = NumericConstants.ZERO; - - node.childrenAccept(this, data); - - if (count > 1) { - addViolation(data, node); - } - count = stack.pop(); - - return data; - } - - @Override - public Object visit(ASTVariableDeclarator node, Object data) { - if (count > 1) { - return super.visit(node, data); - } - ASTType type = node.getParent().getFirstChildOfType(ASTType.class); - if (type != null) { - Node reftypeNode = type.getChild(0); - if (reftypeNode instanceof ASTReferenceType) { - Node classOrIntType = reftypeNode.getChild(0); - if (classOrIntType instanceof ASTClassOrInterfaceType) { - ASTClassOrInterfaceType classType = (ASTClassOrInterfaceType) classOrIntType; - if (TypeTestUtil.isA(LOG4J_LOGGER_NAME, classType) - || TypeTestUtil.isA(LOG4J2_LOGGER_NAME, classType) - || TypeTestUtil.isA(JAVA_LOGGER_NAME, classType) - || TypeTestUtil.isA(SLF4J_LOGGER_NAME, classType) - || "Logger".equals(classOrIntType.getImage())) { - ++count; - } - } - } - } - - return super.visit(node, data); - } - -} diff --git a/pmd-java/src/main/resources/category/java/errorprone.xml b/pmd-java/src/main/resources/category/java/errorprone.xml index 5797ddb216..fbca2bfc37 100644 --- a/pmd-java/src/main/resources/category/java/errorprone.xml +++ b/pmd-java/src/main/resources/category/java/errorprone.xml @@ -2591,13 +2591,30 @@ public class Foo { language="java" since="2.0" message="Class contains more than one logger." - class="net.sourceforge.pmd.lang.java.rule.errorprone.MoreThanOneLoggerRule" + class="net.sourceforge.pmd.lang.rule.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#morethanonelogger"> Normally only one logger is used in each class. This rule supports slf4j, log4j, Java Util Logging and log4j2 (since 6.19.0). 2 + + + + 1 +] + ]]> + +