mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-93530 (bad code green: cannot assign a value to final variable)
This commit is contained in:
+5
-5
@@ -547,20 +547,20 @@ public class HighlightControlFlowUtil {
|
||||
public static HighlightInfo checkCannotWriteToFinal(PsiExpression expression, @NotNull PsiFile containingFile) {
|
||||
PsiReferenceExpression reference = null;
|
||||
if (expression instanceof PsiAssignmentExpression) {
|
||||
final PsiExpression left = ((PsiAssignmentExpression)expression).getLExpression();
|
||||
final PsiExpression left = PsiUtil.skipParenthesizedExprDown(((PsiAssignmentExpression)expression).getLExpression());
|
||||
if (left instanceof PsiReferenceExpression) {
|
||||
reference = (PsiReferenceExpression)left;
|
||||
}
|
||||
}
|
||||
else if (expression instanceof PsiPostfixExpression) {
|
||||
final PsiExpression operand = ((PsiPostfixExpression)expression).getOperand();
|
||||
final PsiExpression operand = PsiUtil.skipParenthesizedExprDown(((PsiPostfixExpression)expression).getOperand());
|
||||
final IElementType sign = ((PsiPostfixExpression)expression).getOperationTokenType();
|
||||
if (operand instanceof PsiReferenceExpression && (sign == JavaTokenType.PLUSPLUS || sign == JavaTokenType.MINUSMINUS)) {
|
||||
reference = (PsiReferenceExpression)operand;
|
||||
}
|
||||
}
|
||||
else if (expression instanceof PsiPrefixExpression) {
|
||||
final PsiExpression operand = ((PsiPrefixExpression)expression).getOperand();
|
||||
final PsiExpression operand = PsiUtil.skipParenthesizedExprDown(((PsiPrefixExpression)expression).getOperand());
|
||||
final IElementType sign = ((PsiPrefixExpression)expression).getOperationTokenType();
|
||||
if (operand instanceof PsiReferenceExpression && (sign == JavaTokenType.PLUSPLUS || sign == JavaTokenType.MINUSMINUS)) {
|
||||
reference = (PsiReferenceExpression)operand;
|
||||
@@ -569,7 +569,7 @@ public class HighlightControlFlowUtil {
|
||||
final PsiElement resolved = reference == null ? null : reference.resolve();
|
||||
PsiVariable variable = resolved instanceof PsiVariable ? (PsiVariable)resolved : null;
|
||||
if (variable == null || !variable.hasModifierProperty(PsiModifier.FINAL)) return null;
|
||||
if (!canWriteToFinal(variable, expression, reference,containingFile)) {
|
||||
if (!canWriteToFinal(variable, expression, reference, containingFile)) {
|
||||
final String name = variable.getName();
|
||||
String description = JavaErrorMessages.message("assignment.to.final.variable", name);
|
||||
final HighlightInfo highlightInfo =
|
||||
@@ -599,7 +599,7 @@ public class HighlightControlFlowUtil {
|
||||
PsiField field = (PsiField)variable;
|
||||
if (innerClass != null && !containingFile.getManager().areElementsEquivalent(innerClass, field.getContainingClass())) return false;
|
||||
final PsiMember enclosingCtrOrInitializer = PsiUtil.findEnclosingConstructorOrInitializer(expression);
|
||||
return enclosingCtrOrInitializer != null && isSameField(variable, enclosingCtrOrInitializer, field, reference,containingFile);
|
||||
return enclosingCtrOrInitializer != null && isSameField(variable, enclosingCtrOrInitializer, field, reference, containingFile);
|
||||
}
|
||||
if (variable instanceof PsiLocalVariable) {
|
||||
boolean isAccessedFromOtherClass = innerClass != null;
|
||||
|
||||
+10
@@ -32,6 +32,16 @@ public class a21 {
|
||||
void f4() {
|
||||
if (DEBUG && (fi < 3 || fi >4)) return;
|
||||
}
|
||||
|
||||
void f5(final int i) {
|
||||
(<error descr="Cannot assign a value to final variable 'i'">i</error>) = 1;
|
||||
}
|
||||
void f6(final int i) {
|
||||
(<error descr="Cannot assign a value to final variable 'i'">i</error>)++;
|
||||
}
|
||||
void f7(final int i) {
|
||||
++(<error descr="Cannot assign a value to final variable 'i'">i</error>);
|
||||
}
|
||||
}
|
||||
class B extends a21 {
|
||||
public B() {
|
||||
|
||||
Reference in New Issue
Block a user