void (@NotNull PsiAssignmentExpression expression) { final PsiExpression rExpression = expression.getRExpression(); if (rExpression == null) { throw expressionInvalid(expression); } rExpression.accept(this); Evaluator rEvaluator = myResult; final PsiExpression lExpression = expression.getLExpression(); final PsiType lType = lExpression.getType(); if (lType == null) { throw evaluateException(JavaDebuggerBundle.message("evaluation.error.unknown.expression.type", lExpression.getText())); } IElementType assignmentType = expression.getOperationTokenType(); PsiType rType = rExpression.getType(); if (!TypeConversionUtil.areTypesAssignmentCompatible(lType, rExpression) && rType != null) { throw evaluateException(JavaDebuggerBundle.message("evaluation.error.incompatible.types", expression.getOperationSign().getText())); } lExpression.accept(this); Evaluator lEvaluator = myResult; rEvaluator = handleAssignmentBoxingAndPrimitiveTypeConversions(lType, rType, rEvaluator, expression.getProject()); if (assignmentType != JavaTokenType.EQ) { IElementType opType = TypeConversionUtil.convertEQtoOperation(assignmentType); final PsiType typeForBinOp = TypeConversionUtil.calcTypeForBinaryExpression(lType, rType, opType, true); if (typeForBinOp == null || rType == null) { throw evaluateException(JavaDebuggerBundle.message("evaluation.error.unknown.expression.type", expression.getText())); } rEvaluator = createBinaryEvaluator(lEvaluator, lType, rEvaluator, rType, opType, typeForBinOp); } myResult = new AssignmentEvaluator(lEvaluator, rEvaluator); }