IG: introduce LoggingUtils

This commit is contained in:
Bas Leijdekkers
2019-02-11 16:52:05 +01:00
parent f2b0f3e0c5
commit aa14ad9b19
6 changed files with 44 additions and 33 deletions
@@ -0,0 +1,21 @@
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.siyeh.ig.psiutils;
import java.util.Arrays;
import java.util.List;
/**
* @author Bas Leijdekkers
*/
public class LoggingUtils {
public static final String JAVA_LOGGING = "java.util.logging.Logger";
public static final String SLF4J = "org.slf4j.Logger";
public static final String COMMONS_LOGGING = "org.apache.commons.logging.Log";
public static final String LOG4J = "org.apache.log4j.Logger";
public static final String LOG4J2 = "org.apache.logging.log4j.Logger";
public static final List<String> DEFAULT_LOGGERS = Arrays.asList(JAVA_LOGGING, SLF4J, COMMONS_LOGGING, LOG4J, LOG4J2);
private LoggingUtils() {}
}
@@ -17,10 +17,12 @@ package com.siyeh.ig.logging;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.psiutils.LoggingUtils;
import com.siyeh.ig.ui.UiUtils;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
@@ -37,11 +39,7 @@ public class ClassWithMultipleLoggersInspection extends BaseInspection {
* @noinspection PublicField
*/
@NonNls
public String loggerNamesString = "java.util.logging.Logger" + ',' +
"org.slf4j.Logger" + ',' +
"org.apache.commons.logging.Log" + ',' +
"org.apache.log4j.Logger" + ',' +
"org.apache.logging.log4j.Logger";
public String loggerNamesString = StringUtil.join(LoggingUtils.DEFAULT_LOGGERS, ",");
public ClassWithMultipleLoggersInspection() {
parseString(loggerNamesString, loggerNames);
@@ -88,9 +86,7 @@ public class ClassWithMultipleLoggersInspection extends BaseInspection {
@Override
public void visitClass(@NotNull PsiClass aClass) {
//no recursion to avoid drilldown
if (aClass.isInterface() || aClass.isEnum() ||
aClass.isAnnotationType()) {
if (aClass.isInterface() || aClass.isEnum() || aClass.isAnnotationType()) {
return;
}
if (aClass instanceof PsiTypeParameter) {
@@ -100,8 +96,7 @@ public class ClassWithMultipleLoggersInspection extends BaseInspection {
return;
}
int numLoggers = 0;
final PsiField[] fields = aClass.getFields();
for (PsiField field : fields) {
for (PsiField field : aClass.getFields()) {
if (isLogger(field)) {
numLoggers++;
}
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInspection.util.SpecialAnnotationsUtil;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiUtil;
@@ -28,6 +29,7 @@ import com.intellij.util.ui.CheckBox;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.psiutils.LoggingUtils;
import com.siyeh.ig.ui.ExternalizableStringSet;
import com.siyeh.ig.ui.UiUtils;
import org.jdom.Element;
@@ -47,11 +49,7 @@ public class ClassWithoutLoggerInspection extends BaseInspection {
* @noinspection PublicField
*/
@NonNls
public String loggerNamesString = "java.util.logging.Logger" + ',' +
"org.slf4j.Logger" + ',' +
"org.apache.commons.logging.Log" + ',' +
"org.apache.log4j.Logger" + ',' +
"org.apache.logging.log4j.Logger";
public String loggerNamesString = StringUtil.join(LoggingUtils.DEFAULT_LOGGERS, ",");
/**
* @noinspection PublicField
*/
@@ -1,5 +1,5 @@
/*
* Copyright 2008-2017 Bas Leijdekkers
* Copyright 2008-2019 Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@ import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.psiutils.LoggingUtils;
import com.siyeh.ig.psiutils.ParenthesesUtils;
import com.siyeh.ig.psiutils.TypeUtils;
import com.siyeh.ig.ui.TextField;
@@ -50,7 +51,7 @@ public class LogStatementGuardedByLogConditionInspection extends BaseInspection
final List<String> logMethodNameList = new ArrayList<>();
final List<String> logConditionMethodNameList = new ArrayList<>();
@SuppressWarnings({"PublicField"})
public String loggerClassName = "java.util.logging.Logger";
public String loggerClassName = LoggingUtils.JAVA_LOGGING;
@NonNls
@SuppressWarnings({"PublicField"})
public String loggerMethodAndconditionMethodNames =
@@ -61,7 +62,7 @@ public class LogStatementGuardedByLogConditionInspection extends BaseInspection
public boolean flagAllUnguarded = false;
public LogStatementGuardedByLogConditionInspection() {
parseString(this.loggerMethodAndconditionMethodNames, this.logMethodNameList, this.logConditionMethodNameList);
parseString(loggerMethodAndconditionMethodNames, logMethodNameList, logConditionMethodNameList);
}
@Override
@@ -137,12 +138,12 @@ public class LogStatementGuardedByLogConditionInspection extends BaseInspection
return;
}
PsiStatement previousStatement = PsiTreeUtil.getPrevSiblingOfType(statement, PsiStatement.class);
while (previousStatement != null && isSameLogMethodCall(previousStatement, referenceName)) {
while (isSameLogMethodCall(previousStatement, referenceName)) {
logStatements.add(0, previousStatement);
previousStatement = PsiTreeUtil.getPrevSiblingOfType(previousStatement, PsiStatement.class);
}
PsiStatement nextStatement = PsiTreeUtil.getNextSiblingOfType(statement, PsiStatement.class);
while (nextStatement != null && isSameLogMethodCall(nextStatement, referenceName)) {
while (isSameLogMethodCall(nextStatement, referenceName)) {
logStatements.add(nextStatement);
nextStatement = PsiTreeUtil.getNextSiblingOfType(nextStatement, PsiStatement.class);
}
@@ -199,7 +200,7 @@ public class LogStatementGuardedByLogConditionInspection extends BaseInspection
return false;
}
final PsiExpression qualifier = methodExpression.getQualifierExpression();
return qualifier != null && TypeUtils.expressionHasTypeOrSubtype(qualifier, loggerClassName);
return TypeUtils.expressionHasTypeOrSubtype(qualifier, loggerClassName);
}
}
@@ -17,12 +17,14 @@ package com.siyeh.ig.logging;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.fixes.MakeFieldStaticFinalFix;
import com.siyeh.ig.psiutils.LoggingUtils;
import com.siyeh.ig.ui.UiUtils;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
@@ -35,11 +37,7 @@ public class NonStaticFinalLoggerInspection extends BaseInspection {
protected final List<String> loggerClassNames = new ArrayList<>();
@SuppressWarnings("PublicField")
public String loggerClassName = "java.util.logging.Logger" + ',' +
"org.slf4j.Logger" + ',' +
"org.apache.commons.logging.Log" + ',' +
"org.apache.log4j.Logger" + ',' +
"org.apache.logging.log4j.Logger";
public String loggerClassName = StringUtil.join(LoggingUtils.DEFAULT_LOGGERS, ",");
public NonStaticFinalLoggerInspection() {
parseString(loggerClassName, loggerClassNames);
@@ -17,11 +17,13 @@ package com.siyeh.ig.logging;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.util.PropertyUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.psiutils.LoggingUtils;
import com.siyeh.ig.ui.UiUtils;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
@@ -34,11 +36,7 @@ public class PublicMethodWithoutLoggingInspection extends BaseInspection {
final List<String> loggerClassNames = new ArrayList<>();
@SuppressWarnings("PublicField")
public String loggerClassName = "java.util.logging.Logger" + ',' +
"org.slf4j.Logger" + ',' +
"org.apache.commons.logging.Log" + ',' +
"org.apache.log4j.Logger" + ',' +
"org.apache.logging.log4j.Logger";
public String loggerClassName = StringUtil.join(LoggingUtils.DEFAULT_LOGGERS, ",");
public PublicMethodWithoutLoggingInspection() {
parseString(loggerClassName, loggerClassNames);
@@ -108,7 +106,7 @@ public class PublicMethodWithoutLoggingInspection extends BaseInspection {
}
private boolean containsLoggingCall(PsiCodeBlock block) {
ContainsLoggingCallVisitor visitor = new ContainsLoggingCallVisitor();
final ContainsLoggingCallVisitor visitor = new ContainsLoggingCallVisitor();
block.accept(visitor);
return visitor.containsLoggingCall();
}
@@ -148,7 +146,7 @@ public class PublicMethodWithoutLoggingInspection extends BaseInspection {
}
}
private boolean containsLoggingCall() {
boolean containsLoggingCall() {
return containsLoggingCall;
}
}