diff --git a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties
index e7601c3445e7..df1b738df96e 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties
+++ b/plugins/InspectionGadgets/src/com/siyeh/InspectionGadgetsBundle.properties
@@ -1727,7 +1727,7 @@ int.literal.may.be.long.literal.display.name=int literal cast to long could be l
int.literal.may.be.long.literal.problem.descriptor=#ref could be replaced with ''{0}''
int.literal.may.be.long.literal.quickfix=Replace with ''{0}''
constant.assert.condition.display.name='assert' statement condition is constant
-constant.assert.condition.problem.descriptor=assert condition #ref is constant
+constant.assert.condition.problem.descriptor=Assert condition #ref is constant
assert.with.side.effects.display.name='assert' statement with side effects
assert.with.side.effects.problem.descriptor=#ref has side effects #loc
method.count.ignore.getters.setters.option=&Ignore simple getter and setter methods
@@ -1761,3 +1761,5 @@ remove.try.finally.block.quickfix=Remove try-finally block
remove.finally.block.quickfix=Remove finally block
remove.leading.zero.to.make.decimal.quickfix=Remove leading zero to make decimal
convert.octal.literal.to.decimal.literal.quickfix=Convert octal literal to decimal literal
+ignore.single.field.static.imports=Ignore single &field static imports
+ignore.single.method.static.imports=Ignore single &method static imports
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/imports/StaticImportInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/imports/StaticImportInspection.java
index a23a93e90a00..2cd3216a05bf 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/imports/StaticImportInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/imports/StaticImportInspection.java
@@ -26,8 +26,10 @@ import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.psiutils.StringUtils;
+import com.siyeh.ig.ui.MultipleCheckboxOptionsPanel;
import org.jetbrains.annotations.NotNull;
+import javax.swing.JComponent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -35,33 +37,51 @@ import java.util.Map;
public class StaticImportInspection extends BaseInspection {
+ @SuppressWarnings({"PublicField"})
+ public boolean ignoreSingleFieldImports = false;
+ @SuppressWarnings({"PublicField"})
+ public boolean ignoreSingeMethodImports = false;
+
@Override
@NotNull
- public String getDisplayName(){
+ public String getDisplayName() {
return InspectionGadgetsBundle.message("static.import.display.name");
}
@Override
@NotNull
- public String buildErrorString(Object... infos){
+ public String buildErrorString(Object... infos) {
return InspectionGadgetsBundle.message(
"static.import.problem.descriptor");
}
@Override
- public BaseInspectionVisitor buildVisitor(){
+ public JComponent createOptionsPanel() {
+ final MultipleCheckboxOptionsPanel panel =
+ new MultipleCheckboxOptionsPanel(this);
+ panel.addCheckbox(InspectionGadgetsBundle.message(
+ "ignore.single.field.static.imports"),
+ "ignoreSingleFieldImports");
+ panel.addCheckbox(InspectionGadgetsBundle.message(
+ "ignore.single.method.static.imports"),
+ "ignoreSingeMethodImports");
+ return panel;
+ }
+
+ @Override
+ public BaseInspectionVisitor buildVisitor() {
return new StaticImportVisitor();
}
@Override
- protected InspectionGadgetsFix buildFix(Object... infos){
+ protected InspectionGadgetsFix buildFix(Object... infos) {
return new StaticImportFix();
}
private static class StaticImportFix extends InspectionGadgetsFix{
@NotNull
- public String getName(){
+ public String getName() {
return InspectionGadgetsBundle.message(
"static.import.replace.quickfix");
}
@@ -234,7 +254,7 @@ public class StaticImportInspection extends BaseInspection {
return false;
}
final PsiElement target = reference.resolve();
- if(!(target instanceof PsiClass)) {
+ if (!(target instanceof PsiClass)) {
return false;
}
final PsiClass aClass = (PsiClass) target;
@@ -249,33 +269,59 @@ public class StaticImportInspection extends BaseInspection {
}
}
- private static class StaticImportVisitor extends BaseInspectionVisitor{
+ private class StaticImportVisitor extends BaseInspectionVisitor{
- @Override public void visitClass(@NotNull PsiClass aClass){
+ @Override public void visitClass(@NotNull PsiClass aClass) {
// no call to super, so it doesn't drill down
- if(!(aClass.getParent() instanceof PsiJavaFile)){
+ if (!(aClass.getParent() instanceof PsiJavaFile)) {
+ return;
+ }
+ if (JspPsiUtil.isInJspFile(aClass.getContainingFile())) {
return;
}
- if (JspPsiUtil.isInJspFile(aClass.getContainingFile())) {
- return;
- }
final PsiJavaFile file = (PsiJavaFile) aClass.getParent();
- if(file == null){
+ if (file == null) {
return;
}
- if(!file.getClasses()[0].equals(aClass)){
+ if (!file.getClasses()[0].equals(aClass)) {
return;
}
final PsiImportList importList = file.getImportList();
- if(importList == null){
+ if (importList == null) {
return;
}
final PsiImportStaticStatement[] importStatements =
importList.getImportStaticStatements();
- for(final PsiImportStaticStatement importStatement :
- importStatements){
- registerError(importStatement);
+ for (PsiImportStaticStatement importStatement : importStatements) {
+ if (shouldReportImportStatement(importStatement)) {
+ registerError(importStatement);
+ }
}
}
+
+ private boolean shouldReportImportStatement(
+ PsiImportStatementBase importStatement) {
+ if (importStatement.isOnDemand()) {
+ return true;
+ }
+ final PsiReference importReference =
+ importStatement.getImportReference();
+ if (importReference == null) {
+ return false;
+ }
+ if (ignoreSingleFieldImports || ignoreSingeMethodImports) {
+ final PsiElement target = importReference.resolve();
+ if (target != null && target instanceof PsiField) {
+ if (ignoreSingleFieldImports) {
+ return false;
+ }
+ } else {
+ if (ignoreSingeMethodImports) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
}
}