void (@NotNull GrAssignmentExpression assignment) { super.visitAssignmentExpression(assignment); if (assignment.isOperatorAssignment()) return; GrExpression lValue = assignment.getLValue(); if (!PsiUtil.mightBeLValue(lValue)) return; GrExpression rValue = assignment.getRValue(); if (rValue == null) return; PsiType lType = lValue.getNominalType(); PsiType rType = rValue.getType(); // For assignments with spread dot if (PsiImplUtil.isSpreadAssignment(lValue) && lType instanceof PsiClassType pct) { final PsiClass clazz = pct.resolve(); if (clazz != null && CommonClassNames.JAVA_UTIL_LIST.equals(clazz.getQualifiedName())) { final PsiType[] types = pct.getParameters(); if (types.length == 1 && types[0] != null && rType != null) { checkAssignability(types[0], rValue, assignment); } } return; } if (lValue instanceof GrReferenceExpression && ((GrReferenceExpression)lValue).resolve() instanceof GrReferenceExpression) { //lvalue is nondeclared variable return; } if (lType != null && rType != null) { checkAssignability(lType, rValue, rValue); } }