mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java: fix error message when assignment before chained constructor call (IDEA-375281)
GitOrigin-RevId: 49c4a8ce04845726d1c35aa114612bf5410e1a37
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6f36a457d7
commit
03fe273fb4
+1
-1
@@ -441,7 +441,7 @@ variable.must.be.effectively.final.lambda=Variable used in lambda expression sho
|
||||
variable.must.be.effectively.final.guard=Variable used in guard expression should be final or effectively final
|
||||
variable.not.initialized=Variable ''{0}'' might not have been initialized
|
||||
variable.already.assigned=Variable ''{0}'' might already have been assigned to
|
||||
variable.already.assigned.constructor=Cannot assign final field ''{0}'' after chained constructor call
|
||||
variable.already.assigned.constructor=Cannot assign final field ''{0}'' {1, choice, 1#before|2#after} chained constructor call
|
||||
variable.already.assigned.field=Final field ''{0}'' is already initialized in another field initializer
|
||||
variable.already.assigned.initializer=Final field ''{0}'' is already initialized in a class initializer
|
||||
variable.assigned.in.loop=Variable ''{0}'' might be assigned in a loop
|
||||
|
||||
+9
-1
@@ -26,6 +26,7 @@ import com.intellij.psi.infos.MethodCandidateInfo;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.refactoring.util.RefactoringChangeUtil;
|
||||
import com.intellij.util.JavaPsiConstructorUtil;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
import org.jetbrains.annotations.*;
|
||||
|
||||
@@ -1492,7 +1493,14 @@ public final class JavaErrorKinds {
|
||||
.withDescription((ref, var) -> message("variable.already.assigned", var.getName()));
|
||||
public static final Parameterized<PsiReferenceExpression, PsiVariable> VARIABLE_ALREADY_ASSIGNED_CONSTRUCTOR =
|
||||
parameterized(PsiReferenceExpression.class, PsiVariable.class, "variable.already.assigned.constructor")
|
||||
.withDescription((ref, var) -> message("variable.already.assigned.constructor", var.getName()));
|
||||
.withDescription((ref, var) -> {
|
||||
PsiMethod constructor = PsiTreeUtil.getParentOfType(ref, PsiMethod.class);
|
||||
assert constructor != null;
|
||||
PsiMethodCallExpression thisCall = JavaPsiConstructorUtil.findThisOrSuperCallInConstructor(constructor);
|
||||
assert thisCall != null;
|
||||
return message("variable.already.assigned.constructor", var.getName(),
|
||||
thisCall.getTextOffset() + thisCall.getTextLength() > ref.getTextOffset() ? 1 : 2);
|
||||
});
|
||||
public static final Parameterized<PsiReferenceExpression, PsiVariable> VARIABLE_ALREADY_ASSIGNED_FIELD =
|
||||
parameterized(PsiReferenceExpression.class, PsiVariable.class, "variable.already.assigned.field")
|
||||
.withDescription((ref, var) -> message("variable.already.assigned.field", var.getName()));
|
||||
|
||||
+15
@@ -211,4 +211,19 @@ class Person {
|
||||
}
|
||||
class Other {
|
||||
Other(int x) {}
|
||||
}
|
||||
class Machine {
|
||||
private final boolean big;
|
||||
Machine(boolean big) {
|
||||
this.big = big;
|
||||
}
|
||||
|
||||
Machine() {
|
||||
<error descr="Cannot assign final field 'big' before chained constructor call">big</error> = false;
|
||||
this(false);
|
||||
}
|
||||
|
||||
Machine(int size) {
|
||||
this(<error descr="Cannot assign final field 'big' before chained constructor call">big</error> = size > 10);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user