PsiType () { //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) { PsiType type = lExpression.getType(); if (type == null || type == PsiTypes.nullType()) { PsiExpression rExpression = getRExpression(); if (rExpression != null && !PsiPolyExpressionUtil.isPolyExpression(rExpression)) { return rExpression.getType(); } } return type; } return null; }