mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
Java: match javac from jdk 24 in error highlighting for Flexible Constructor Bodies - JEP 492 (IDEA-364189)
(cherry picked from commit 686bd65963483f93acd22ae8956681f889105409) GitOrigin-RevId: b8c02f835e7173b68aa39aee57e4a8c590608482
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8e0d1b142f
commit
3746633993
@@ -2801,7 +2801,13 @@ public final class HighlightUtil {
|
||||
if (JavaFeature.STATEMENTS_BEFORE_SUPER.isSufficient(languageLevel) &&
|
||||
languageLevel != LanguageLevel.JDK_22_PREVIEW &&
|
||||
isOnSimpleAssignmentLeftHand(expression) &&
|
||||
field.getContainingClass() == PsiTreeUtil.getParentOfType(expression, PsiClass.class, true)) {
|
||||
field.getContainingClass() == PsiTreeUtil.getParentOfType(expression, PsiClass.class, PsiLambdaExpression.class)) {
|
||||
if (field.hasInitializer()) {
|
||||
String fieldName = PsiFormatUtil.formatVariable(
|
||||
field, PsiFormatUtilBase.SHOW_CONTAINING_CLASS | PsiFormatUtilBase.SHOW_NAME, PsiSubstitutor.EMPTY);
|
||||
String description = JavaErrorBundle.message("assign.initialized.field.before.constructor.call", fieldName);
|
||||
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(expression).descriptionAndTooltip(description);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
resolvedName =
|
||||
@@ -2934,7 +2940,7 @@ public final class HighlightUtil {
|
||||
if (isOnSimpleAssignmentLeftHand(parent) &&
|
||||
parent instanceof PsiReferenceExpression ref &&
|
||||
ref.resolve() instanceof PsiField field &&
|
||||
field.getContainingClass() == PsiTreeUtil.getParentOfType(expression, PsiClass.class, true)) {
|
||||
field.getContainingClass() == PsiTreeUtil.getParentOfType(expression, PsiClass.class, PsiLambdaExpression.class)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -309,6 +309,7 @@ unknown.class=Unknown class: ''{0}''
|
||||
illegal.type.void=Illegal type: 'void'
|
||||
member.referenced.before.constructor.called=Cannot reference ''{0}'' before superclass constructor is called
|
||||
method.called.before.constructor.called=Cannot call ''{0}'' before superclass constructor is called
|
||||
assign.initialized.field.before.constructor.call=Cannot assign initialized field ''{0}'' before superclass constructor is called
|
||||
label.without.statement=Label without statement
|
||||
duplicate.label=Label ''{0}'' already in use
|
||||
unclosed.comment=Unclosed comment
|
||||
|
||||
@@ -10,6 +10,11 @@ class A {
|
||||
<error descr="Cannot reference 'this' before superclass constructor is called">this</error>.i++; // Error
|
||||
<error descr="Cannot reference 'this' before superclass constructor is called">this</error>.hashCode(); // Error
|
||||
System.out.print(<error descr="Cannot reference 'this' before superclass constructor is called">this</error>); // Error
|
||||
Runnable r = () -> {
|
||||
<error descr="Cannot reference 'A.i' before superclass constructor is called">i</error> = 1;
|
||||
<error descr="Cannot reference 'this' before superclass constructor is called">this</error>.i = 1;
|
||||
<error descr="Cannot reference 'A.this' before superclass constructor is called">A.this</error>.i = 1;
|
||||
};
|
||||
super();
|
||||
}
|
||||
A(int i) {}
|
||||
@@ -180,4 +185,13 @@ enum EE {
|
||||
this(1);
|
||||
}
|
||||
EE(int i) {}
|
||||
}
|
||||
class InitializeField {
|
||||
private int i = 0;
|
||||
InitializeField() {
|
||||
<error descr="Cannot assign initialized field 'InitializeField.i' before superclass constructor is called">i</error> = 1;
|
||||
<error descr="Cannot assign initialized field 'InitializeField.i' before superclass constructor is called">this.i</error> = 1;
|
||||
<error descr="Cannot assign initialized field 'InitializeField.i' before superclass constructor is called">InitializeField.this.i</error> = 1;
|
||||
super();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user