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; + } } }