diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/afterSuppressIsAvailableForUnavailableFix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/afterSuppressIsAvailableForUnavailableFix.java new file mode 100644 index 000000000000..fe01e3c7b2bd --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/afterSuppressIsAvailableForUnavailableFix.java @@ -0,0 +1,7 @@ +// "Suppress for statement" "true" +class X { + { + //noinspection MyLocalInspectionTool + String s = String.format("foo"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/beforeSuppressIsAvailableForUnavailableFix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/beforeSuppressIsAvailableForUnavailableFix.java new file mode 100644 index 000000000000..cbd5b0414029 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/beforeSuppressIsAvailableForUnavailableFix.java @@ -0,0 +1,6 @@ +// "Suppress for statement" "true" +class X { + { + String s = String.format("foo"); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/SuppressLocalInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/SuppressLocalInspectionTest.java index 87eb970416c3..3cdbd57c042e 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/SuppressLocalInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/SuppressLocalInspectionTest.java @@ -16,11 +16,21 @@ package com.intellij.java.codeInsight.daemon.quickFix; import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; +import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool; +import com.intellij.codeInspection.IntentionAndQuickFixAction; import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.localCanBeFinal.LocalCanBeFinal; +import com.intellij.codeInspection.util.IntentionFamilyName; +import com.intellij.codeInspection.util.IntentionName; import com.intellij.codeInspection.varScopeCanBeNarrowed.FieldCanBeLocalInspection; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; import com.intellij.pom.java.LanguageLevel; +import com.intellij.psi.*; +import com.siyeh.ig.psiutils.MethodCallUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class SuppressLocalInspectionTest extends LightQuickFixParameterizedTestCase { @Override @@ -30,7 +40,7 @@ public class SuppressLocalInspectionTest extends LightQuickFixParameterizedTestC @Override protected LocalInspectionTool @NotNull [] configureLocalInspectionTools() { - return new LocalInspectionTool[]{new LocalCanBeFinal(), new FieldCanBeLocalInspection()}; + return new LocalInspectionTool[]{new LocalCanBeFinal(), new FieldCanBeLocalInspection(), new MyLocalInspectionTool()}; } @Override @@ -38,5 +48,41 @@ public class SuppressLocalInspectionTest extends LightQuickFixParameterizedTestC return "/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection"; } + + static class DummyUnavailableQuickFix extends IntentionAndQuickFixAction { + @Override + public boolean isAvailable(@NotNull Project project, @Nullable Editor editor, PsiFile file) { + return false; + } + + @Override + public @IntentionName @NotNull String getName() { + return getFamilyName(); + } + + @Override + public @IntentionFamilyName @NotNull String getFamilyName() { + return "Dummy fix"; + } + + @Override + public void applyFix(@NotNull Project project, PsiFile file, @Nullable Editor editor) { + } + } + + private static class MyLocalInspectionTool extends AbstractBaseJavaLocalInspectionTool { + @NotNull + @Override + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { + return new JavaElementVisitor() { + @Override + public void visitMethodCallExpression(PsiMethodCallExpression expression) { + if (MethodCallUtils.isCallToMethod(expression, CommonClassNames.JAVA_LANG_STRING, null, "format", (PsiType[]) null)) { + holder.registerProblem(expression, "I am a dummy problem with unavailable fix", new DummyUnavailableQuickFix()); + } + } + }; + } + } }