diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java index 2dac324f929b..d5ef9ddf63a1 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java @@ -14,6 +14,7 @@ import com.intellij.codeInsight.intention.QuickFixFactory; import com.intellij.ide.highlighter.JavaFileType; import com.intellij.java.analysis.JavaAnalysisBundle; import com.intellij.lang.jvm.JvmModifier; +import com.intellij.lang.jvm.actions.ChangeModifierRequest; import com.intellij.lang.jvm.actions.JvmElementActionFactories; import com.intellij.lang.jvm.actions.MemberRequestsKt; import com.intellij.openapi.module.Module; @@ -591,11 +592,11 @@ public final class HighlightClassUtil { static HighlightInfo.Builder checkCannotInheritFromFinal(@NotNull PsiClass superClass, @NotNull PsiElement elementToHighlight) { HighlightInfo.Builder errorResult = null; if (superClass.hasModifierProperty(PsiModifier.FINAL) || superClass.isEnum()) { - String message = JavaErrorBundle - .message("inheritance.from.final.class", superClass.getQualifiedName(), superClass.isEnum() ? PsiKeyword.ENUM : PsiKeyword.FINAL); - errorResult = - HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(elementToHighlight).descriptionAndTooltip(message); - QuickFixAction.registerQuickFixActions(errorResult, null, JvmElementActionFactories.createModifierActions(superClass, MemberRequestsKt.modifierRequest(JvmModifier.FINAL, false))); + String message = JavaErrorBundle.message("inheritance.from.final.class", HighlightUtil.formatClass(superClass), + superClass.isEnum() ? PsiKeyword.ENUM : PsiKeyword.FINAL); + errorResult = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(elementToHighlight).descriptionAndTooltip(message); + ChangeModifierRequest removeFinal = MemberRequestsKt.modifierRequest(JvmModifier.FINAL, false); + QuickFixAction.registerQuickFixActions(errorResult, null, JvmElementActionFactories.createModifierActions(superClass, removeFinal)); } return errorResult; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InheritFromFinalLocalClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InheritFromFinalLocalClass.java new file mode 100644 index 000000000000..28ddd7d89d78 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/InheritFromFinalLocalClass.java @@ -0,0 +1,6 @@ +class Main { + public static void main(String[] args) { + final class First{} + class Second extends First{} + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingTest.java index 447306ade44c..b4c1a60cad7e 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvHighlightingTest.java @@ -396,6 +396,7 @@ public class LightAdvHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIDEA168768() { doTest(false); } public void testStatementWithExpression() { doTest(false); } public void testReturnFromConstructor() { doTest(false); } + public void testInheritFromFinalLocalClass() { doTest(false); } public void testStaticMethodCalls() { doTestFile(BASE_PATH + "/" + getTestName(false) + ".java").checkSymbolNames().test();