From c4eb244441d35eba1738e218ac9b90acd2c1bc71 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 3 May 2019 08:20:04 +0200 Subject: [PATCH] assignment expr: left op must be a variable/array access possibly wrapped in parenthesis GitOrigin-RevId: 188dea30e5fb680b608cfa4afd1d3a0e6d8759c7 --- .../source/tree/java/PsiAssignmentExpressionImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiAssignmentExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiAssignmentExpressionImpl.java index f301c068fb6b..47042f763e9b 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiAssignmentExpressionImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiAssignmentExpressionImpl.java @@ -24,6 +24,7 @@ import com.intellij.psi.impl.source.tree.JavaElementType; import com.intellij.psi.tree.ChildRoleBase; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; +import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.NotNull; public class PsiAssignmentExpressionImpl extends ExpressionPsiElement implements PsiAssignmentExpression { @@ -58,7 +59,14 @@ public class PsiAssignmentExpressionImpl extends ExpressionPsiElement implements @Override public PsiType getType() { - return getLExpression().getType(); + //15.26.1 left side must be variable/array access probably wrapped in parenthesis, otherwise it's an invalid expression + //because assignment expression itself is not a poly expression, its type may be calculated at any time + //thus it's important to ensure that type of left side is not calculated for invalid expression, e.g. bar() = "" + PsiExpression lExpression = PsiUtil.deparenthesizeExpression(getLExpression()); + if (lExpression instanceof PsiReferenceExpression || lExpression instanceof PsiArrayAccessExpression) { + return lExpression.getType(); + } + return null; } @Override