void (@NotNull PsiAssignmentExpression assignment) { final PsiExpression rExpression = assignment.getRExpression(); final IElementType tokenType = assignment.getOperationTokenType(); final PsiExpression lExpression = assignment.getLExpression(); final PsiType lType = lExpression.getType(); if (wrappedExpression.equals(rExpression)) { if (lType == null) { expectedType = null; } else if (TypeUtils.isJavaLangString(lType)) { if (JavaTokenType.PLUSEQ.equals(tokenType)) { // e.g. String += any type expectedType = rExpression.getType(); } else { expectedType = lType; } } else if (isOperatorAssignmentOperation(tokenType)) { if (lType instanceof PsiPrimitiveType) { expectedType = lType; } else { expectedType = PsiPrimitiveType.getUnboxedType(lType); } } else { expectedType = lType; } } else { if (isOperatorAssignmentOperation(tokenType) && !(lType instanceof PsiPrimitiveType)) { expectedType = PsiPrimitiveType.getUnboxedType(lType); } else { expectedType = lType; } } }