Java: fix error message for extending final local class (IDEA-339271)

GitOrigin-RevId: 1f2089774edbe1a166658eee846362988ef53217
This commit is contained in:
Bas Leijdekkers
2023-12-28 17:39:16 +00:00
committed by intellij-monorepo-bot
parent 6b0ded8130
commit 7b6abd34f3
3 changed files with 13 additions and 5 deletions
@@ -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;
}
@@ -0,0 +1,6 @@
class Main {
public static void main(String[] args) {
final class First{}
class Second extends <error descr="Cannot inherit from final 'First'">First</error>{}
}
}
@@ -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();