diff --git a/java/java-psi-impl/src/com/intellij/psi/controlFlow/LocalsOrMyInstanceFieldsControlFlowPolicy.java b/java/java-psi-impl/src/com/intellij/psi/controlFlow/LocalsOrMyInstanceFieldsControlFlowPolicy.java index 86b82a0bc4ec..85a7fd8a6d99 100644 --- a/java/java-psi-impl/src/com/intellij/psi/controlFlow/LocalsOrMyInstanceFieldsControlFlowPolicy.java +++ b/java/java-psi-impl/src/com/intellij/psi/controlFlow/LocalsOrMyInstanceFieldsControlFlowPolicy.java @@ -17,6 +17,7 @@ package com.intellij.psi.controlFlow; import com.intellij.psi.*; +import com.intellij.psi.util.PsiUtil; import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.NotNull; @@ -55,7 +56,7 @@ public class LocalsOrMyInstanceFieldsControlFlowPolicy implements ControlFlowPol * the reference actually resolves to variable. */ public static boolean isLocalOrMyInstanceReference(PsiReferenceExpression variableReference) { - PsiExpression qualifierExpression = variableReference.getQualifierExpression(); + PsiExpression qualifierExpression = PsiUtil.skipParenthesizedExprDown(variableReference.getQualifierExpression()); // JLS 16: "Such an assignment is defined to occur if and only if either the simple name of the variable // (or, for a field, its simple name qualified by this) occurs on the left hand side of an assignment operator" // Qualified this is not allowed by spec diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java index c648224d9818..90d435feeb14 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/AssignToFinal.java @@ -255,10 +255,10 @@ class QualifiedThis { class ParenthesizedThis { final int x; - final int y = (this).x + 1; // allowed as qualifier is not naked 'this'! + final int y = (this).x + 1; // javac allows this? ParenthesizedThis() { - (this).x = 5; - this.x = 6; + (this).x = 5; + this.x = 6; } } \ No newline at end of file