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 92a0a837383d..d99d9b0a9327 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 @@ -206,37 +206,37 @@ public class ModifierFix extends PsiBasedModCommandAction modifierList = owner.getModifierList(); } if (modifierList == null) return; - if (myShouldHave && owner instanceof PsiMethod method) { - if (PsiModifier.ABSTRACT.equals(myModifier)) { - final PsiClass aClass = method.getContainingClass(); - if (aClass != null && !aClass.hasModifierProperty(PsiModifier.ABSTRACT)) { - PsiModifierList classModifierList = aClass.getModifierList(); - if (classModifierList != null) { - changeModifierList(classModifierList); + if (myShouldHave) { + if (owner instanceof PsiMethod method) { + if (PsiModifier.ABSTRACT.equals(myModifier)) { + final PsiClass aClass = method.getContainingClass(); + if (aClass != null && !aClass.hasModifierProperty(PsiModifier.ABSTRACT)) { + PsiModifierList classModifierList = aClass.getModifierList(); + if (classModifierList != null) { + changeModifierList(classModifierList); + } + } + } + else if (PsiModifier.PUBLIC.equals(myModifier) && method.getBody() != null && !method.hasModifierProperty(PsiModifier.STATIC)) { + PsiClass containingClass = method.getContainingClass(); + if (containingClass != null && containingClass.isInterface()) { + modifierList.setModifierProperty(PsiModifier.DEFAULT, true); + } + } + else if (PsiModifier.STATIC.equals(myModifier)) { + if (method.hasModifierProperty(PsiModifier.DEFAULT)) { + modifierList.setModifierProperty(PsiModifier.DEFAULT, false); + } + else if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { + PsiUtil.setModifierProperty(method, PsiModifier.ABSTRACT, false); + if (method.getBody() == null) CreateFromUsageUtils.setupMethodBody(method); } } } - else if (PsiModifier.PUBLIC.equals(myModifier) && - method.getBody() != null && - !method.hasModifierProperty(PsiModifier.STATIC)) { - PsiClass containingClass = method.getContainingClass(); - if (containingClass != null && containingClass.isInterface()) { - modifierList.setModifierProperty(PsiModifier.DEFAULT, true); - } + else if (PsiModifier.FINAL.equals(myModifier) && owner instanceof PsiClass aClass) { + adjustVisibilityOfProtectedMembers(aClass); + removeFinalModifierFromMethods(aClass); } - else if (PsiModifier.STATIC.equals(myModifier)) { - if (method.hasModifierProperty(PsiModifier.DEFAULT)) { - modifierList.setModifierProperty(PsiModifier.DEFAULT, false); - } - else if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { - PsiUtil.setModifierProperty(method, PsiModifier.ABSTRACT, false); - if (method.getBody() == null) CreateFromUsageUtils.setupMethodBody(method); - } - } - } - else if (PsiModifier.FINAL.equals(myModifier) && owner instanceof PsiClass aClass) { - adjustVisibilityOfProtectedMembers(aClass); - removeFinalModifierFromMethods(aClass); } changeModifierList(modifierList); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterMakeFinalClassNotFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterMakeFinalClassNotFinal.java new file mode 100644 index 000000000000..4eb85cea4885 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/afterMakeFinalClassNotFinal.java @@ -0,0 +1,9 @@ +// "Make 'Magnanimous' not final" "true-preview" +class Magnanimous { + + protected Magnanimous() { + } + + final void f() {} +} +class Steadfast extends Magnanimous {} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeMakeFinalClassNotFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeMakeFinalClassNotFinal.java new file mode 100644 index 000000000000..bcf6d0795248 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/modifier/beforeMakeFinalClassNotFinal.java @@ -0,0 +1,9 @@ +// "Make 'Magnanimous' not final" "true-preview" +final class Magnanimous { + + protected Magnanimous() { + } + + final void f() {} +} +class Steadfast extends Magnanimous {} \ No newline at end of file