diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFix.java index 3b9f9633b698..df081d7e7cb0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ModifierFix.java @@ -54,6 +54,7 @@ public class ModifierFix extends IntentionAndQuickFixAction { myShouldHave = shouldHave; myShowContainingClass = showContainingClass; } + public ModifierFix(@NotNull PsiModifierListOwner owner, @Modifier @NotNull String modifier, boolean shouldHave, boolean showContainingClass) { this(owner.getModifierList(), modifier, shouldHave, showContainingClass); if (owner instanceof PsiVariable) { @@ -79,8 +80,9 @@ public class ModifierFix extends IntentionAndQuickFixAction { else if (parent instanceof PsiClassInitializer) { PsiClass containingClass = ((PsiClassInitializer)parent).getContainingClass(); String className = containingClass instanceof PsiAnonymousClass - ? QuickFixBundle.message("anonymous.class.presentation", ((PsiAnonymousClass)containingClass).getBaseClassType().getPresentableText()) - : containingClass.getName(); + ? QuickFixBundle.message("anonymous.class.presentation", + ((PsiAnonymousClass)containingClass).getBaseClassType().getPresentableText()) + : containingClass != null ? containingClass.getName() : "unknown"; name = QuickFixBundle.message("class.initializer.presentation", className); } } @@ -99,7 +101,7 @@ public class ModifierFix extends IntentionAndQuickFixAction { return myModifierList != null && myModifierList.isValid() && myModifierList.getManager().isInProject(myModifierList) && - myModifierList.hasModifierProperty(myModifier) != myShouldHave && + myModifierList.hasExplicitModifier(myModifier) != myShouldHave && (myVariable == null || myVariable.isValid()); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before33.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before33.java new file mode 100644 index 000000000000..a032ae65d80c --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before33.java @@ -0,0 +1,12 @@ +// "Make 'e' not final" "false" + +class C { + static { + try { + throw new Exception(); + } + catch (RuntimeException | IOException e) { + e = null; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before34.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before34.java new file mode 100644 index 000000000000..4aca069684c6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before34.java @@ -0,0 +1,9 @@ +// "Make 'r' not final" "false" + +class C { + void m() throws Exception { + try (AutoCloseable r = null) { + r = null; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before35.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before35.java new file mode 100644 index 000000000000..1bee6da0d391 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before35.java @@ -0,0 +1,16 @@ +// "Make 'e' final" "false" + +class C { + static { + try { + throw new Exception(); + } + catch (RuntimeException | IOException e) { + new Runnable() { + public void run() { + System.out.println(e); + } + }.run(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before36.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before36.java new file mode 100644 index 000000000000..04c4cdd30653 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/before36.java @@ -0,0 +1,13 @@ +// "Make 'r' final" "false" + +class C { + void m() throws Exception { + try (AutoCloseable r = null) { + new Runnable() { + public void run() { + System.out.println(r); + } + }.run(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/ModifierTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/ModifierTest.java index 0100ec65de47..c0eaeb8c1352 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/ModifierTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/ModifierTest.java @@ -8,4 +8,3 @@ public class ModifierTest extends LightQuickFixTestCase { return "/codeInsight/daemonCodeAnalyzer/quickFix/modifier"; } } -