diff --git a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties
index de1f11defd23..e683df43c14e 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties
+++ b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties
@@ -1689,7 +1689,8 @@ assertequals.may.be.assertsame.problem.descriptor=#ref() may be 'as
logger.initialized.with.foreign.class.quickfix=Replace with ''{0}.class''
logger.initialized.with.foreign.class.problem.descriptor=Logger initializer with foreign class #ref #loc
logger.initialized.with.foreign.class.display.name=Logger initialized with foreign class
-logger.factory.method.name=Logger factory &method:
+logger.factory.methods.name=Logger factory methods
+logger.factory.class.names=Logger factory class names
make.static.final.quickfix=Make ''{0}'' static final
logging.condition.disagrees.with.log.statement.display.name=Logging condition does not match log statement
logging.condition.disagrees.with.log.statement.problem.descriptor=Logging condition #ref() does not match ''{0}()'' log statement #loc
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/logging/LoggerInitializedWithForeignClassInspection.Form.form b/plugins/InspectionGadgets/src/com/siyeh/ig/logging/LoggerInitializedWithForeignClassInspection.Form.form
deleted file mode 100644
index 82fc8ab40e87..000000000000
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/logging/LoggerInitializedWithForeignClassInspection.Form.form
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/logging/LoggerInitializedWithForeignClassInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/logging/LoggerInitializedWithForeignClassInspection.java
index 994ab1530a4c..1e5f57ce0650 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/logging/LoggerInitializedWithForeignClassInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/logging/LoggerInitializedWithForeignClassInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 Bas Leijdekkers
+ * Copyright 2008-2012 Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,57 +15,72 @@
*/
package com.siyeh.ig.logging;
+import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.codeInspection.ui.ListTable;
+import com.intellij.codeInspection.ui.ListWrappingTableModel;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.InvalidDataException;
+import com.intellij.openapi.util.WriteExternalException;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.util.IncorrectOperationException;
+import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
-import com.siyeh.InspectionGadgetsBundle;
+import com.siyeh.ig.ui.UiUtils;
+import org.jdom.Element;
+import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-import javax.swing.text.Document;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.DocumentEvent;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
-public class LoggerInitializedWithForeignClassInspection
- extends BaseInspection {
+public class LoggerInitializedWithForeignClassInspection extends BaseInspection {
+
+ @NonNls private static final String DEFAULT_LOGGER_CLASS_NAMES = "org.apache.log4j.Logger,org.slf4j.LoggerFactory";
+ @NonNls private static final String DEFAULT_FACTORY_METHOD_NAMES = "getLogger,getLogger";
@SuppressWarnings({"PublicField"})
- public String loggerClassName = "org.apache.log4j.Logger";
+ public String loggerClassName = DEFAULT_LOGGER_CLASS_NAMES;
+ private final List loggerFactoryClassNames = new ArrayList();
@SuppressWarnings({"PublicField"})
- public String loggerFactoryMethodName = "getLogger";
+ public String loggerFactoryMethodName = DEFAULT_FACTORY_METHOD_NAMES;
+ private final List loggerFactoryMethodNames = new ArrayList();
+ @Override
@NotNull
public String getDisplayName() {
- return InspectionGadgetsBundle.message(
- "logger.initialized.with.foreign.class.display.name");
+ return InspectionGadgetsBundle.message("logger.initialized.with.foreign.class.display.name");
}
+ @Override
@NotNull
protected String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message(
- "logger.initialized.with.foreign.class.problem.descriptor");
+ return InspectionGadgetsBundle.message("logger.initialized.with.foreign.class.problem.descriptor");
}
@Override
public JComponent createOptionsPanel() {
- return new Form().getContentPanel();
+ final ListTable table = new ListTable(
+ new ListWrappingTableModel(Arrays.asList(loggerFactoryClassNames, loggerFactoryMethodNames),
+ InspectionGadgetsBundle.message("logger.factory.class.names"),
+ InspectionGadgetsBundle.message("logger.factory.methods.name")));
+ return UiUtils.createAddRemovePanel(table);
}
+ @Override
@Nullable
protected InspectionGadgetsFix buildFix(Object... infos) {
return new LoggerInitializedWithForeignClassFix((String)infos[0]);
}
- private static class LoggerInitializedWithForeignClassFix
- extends InspectionGadgetsFix {
+ private static class LoggerInitializedWithForeignClassFix extends InspectionGadgetsFix {
private final String newClassName;
@@ -73,6 +88,7 @@ public class LoggerInitializedWithForeignClassInspection
this.newClassName = newClassName;
}
+ @Override
@NotNull
public String getName() {
return InspectionGadgetsBundle.message(
@@ -80,28 +96,26 @@ public class LoggerInitializedWithForeignClassInspection
newClassName);
}
- protected void doFix(Project project, ProblemDescriptor descriptor)
- throws IncorrectOperationException {
+ @Override
+ protected void doFix(Project project, ProblemDescriptor descriptor) throws IncorrectOperationException {
final PsiElement element = descriptor.getPsiElement();
if (!(element instanceof PsiClassObjectAccessExpression)) {
return;
}
- final PsiClassObjectAccessExpression classObjectAccessExpression =
- (PsiClassObjectAccessExpression)element;
- replaceExpression(classObjectAccessExpression,
- newClassName + ".class");
+ final PsiClassObjectAccessExpression classObjectAccessExpression = (PsiClassObjectAccessExpression)element;
+ replaceExpression(classObjectAccessExpression, newClassName + ".class");
}
}
+ @Override
public BaseInspectionVisitor buildVisitor() {
return new LoggerInitializedWithForeignClassVisitor();
}
- private class LoggerInitializedWithForeignClassVisitor
- extends BaseInspectionVisitor {
+ private class LoggerInitializedWithForeignClassVisitor extends BaseInspectionVisitor {
- public void visitClassObjectAccessExpression(
- PsiClassObjectAccessExpression expression) {
+ @Override
+ public void visitClassObjectAccessExpression(PsiClassObjectAccessExpression expression) {
super.visitClassObjectAccessExpression(expression);
final PsiElement parent = expression.getParent();
if (!(parent instanceof PsiExpressionList)) {
@@ -111,10 +125,13 @@ public class LoggerInitializedWithForeignClassInspection
if (!(grandParent instanceof PsiMethodCallExpression)) {
return;
}
- final PsiMethodCallExpression methodCallExpression =
- (PsiMethodCallExpression)grandParent;
- final PsiClass containingClass = PsiTreeUtil.getParentOfType(
- expression, PsiClass.class);
+ final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)grandParent;
+ final PsiExpressionList argumentList = methodCallExpression.getArgumentList();
+ final PsiExpression[] expressions = argumentList.getExpressions();
+ if (expressions.length != 1) {
+ return;
+ }
+ final PsiClass containingClass = PsiTreeUtil.getParentOfType(expression, PsiClass.class);
if (containingClass == null) {
return;
}
@@ -122,19 +139,23 @@ public class LoggerInitializedWithForeignClassInspection
if (containingClassName == null) {
return;
}
- final PsiReferenceExpression methodExpression =
- methodCallExpression.getMethodExpression();
- final String referenceName = methodExpression.getReferenceName();
- if (!loggerFactoryMethodName.equals(referenceName)) {
- return;
- }
final PsiMethod method = methodCallExpression.resolveMethod();
if (method == null) {
return;
}
final PsiClass aClass = method.getContainingClass();
+ if (aClass == null) {
+ return;
+ }
final String className = aClass.getQualifiedName();
- if (!loggerClassName.equals(className)) {
+ final int index = loggerFactoryClassNames.indexOf(className);
+ if (index < 0) {
+ return;
+ }
+ final PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression();
+ final String referenceName = methodExpression.getReferenceName();
+ final String loggerFactoryMethodName = loggerFactoryMethodNames.get(index);
+ if (!loggerFactoryMethodName.equals(referenceName)) {
return;
}
final PsiTypeElement operand = expression.getOperand();
@@ -154,60 +175,20 @@ public class LoggerInitializedWithForeignClassInspection
}
}
- class Form {
-
- private JPanel contentPanel;
- private JTextField loggerClassNameTextField;
- private JTextField loggerFactoryMethodNameTextField;
-
- Form() {
- loggerClassNameTextField.setText(loggerClassName);
- final DocumentListener listener = new DocumentListener() {
-
- public void changedUpdate(DocumentEvent e) {
- textChanged();
- }
-
- public void insertUpdate(DocumentEvent e) {
- textChanged();
- }
-
- public void removeUpdate(DocumentEvent e) {
- textChanged();
- }
-
- private void textChanged() {
- loggerClassName = loggerClassNameTextField.getText();
- }
- };
- final Document document = loggerClassNameTextField.getDocument();
- document.addDocumentListener(listener);
- loggerFactoryMethodNameTextField.setText(loggerFactoryMethodName);
- final DocumentListener factoryListener = new DocumentListener() {
-
- public void changedUpdate(DocumentEvent e) {
- textChanged();
- }
-
- public void insertUpdate(DocumentEvent e) {
- textChanged();
- }
-
- public void removeUpdate(DocumentEvent e) {
- textChanged();
- }
-
- private void textChanged() {
- loggerClassName = loggerClassNameTextField.getText();
- }
- };
- final Document factoryDocument =
- loggerFactoryMethodNameTextField.getDocument();
- factoryDocument.addDocumentListener(factoryListener);
- }
-
- public JComponent getContentPanel() {
- return contentPanel;
+ @Override
+ public void readSettings(Element element) throws InvalidDataException {
+ super.readSettings(element);
+ parseString(loggerClassName, loggerFactoryClassNames);
+ parseString(loggerFactoryMethodName, loggerFactoryMethodNames);
+ if (loggerFactoryClassNames.size() != loggerFactoryMethodNames.size()) {
+ parseString(DEFAULT_LOGGER_CLASS_NAMES, loggerFactoryClassNames);
+ parseString(DEFAULT_FACTORY_METHOD_NAMES, loggerFactoryMethodNames);
}
}
-}
+
+ @Override
+ public void writeSettings(Element element) throws WriteExternalException {
+ loggerClassName = formatString(loggerFactoryClassNames);
+ loggerFactoryMethodName = formatString(loggerFactoryMethodNames);
+ super.writeSettings(element);
+ }}
diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/LoggerInitializedWithForeignClass.html b/plugins/InspectionGadgets/src/inspectionDescriptions/LoggerInitializedWithForeignClass.html
index c3571ad76388..86cacf6d8abc 100644
--- a/plugins/InspectionGadgets/src/inspectionDescriptions/LoggerInitializedWithForeignClass.html
+++ b/plugins/InspectionGadgets/src/inspectionDescriptions/LoggerInitializedWithForeignClass.html
@@ -1,8 +1,10 @@
-This inspection reports any Loggers which are
-initialized with a class literal from a different class than the Logger
+This inspection reports any Loggers which are initialized with a class literal from a different class than the Logger
is contained in.
+
+
+Use the table below to specify the logger factory classes and logger factory methods recognized by this inspection.
New in 8, Powered by InspectionGadgets