void (final @NotNull PsiPrefixExpression expression) { final PsiType expressionType = expression.getType(); if (expressionType == null) { throw evaluateException(JavaDebuggerBundle.message("evaluation.error.unknown.expression.type", expression.getText())); } final PsiExpression operandExpression = expression.getOperand(); if (operandExpression == null) { throw evaluateException(JavaDebuggerBundle.message("evaluation.error.unknown.expression.operand", expression.getText())); } operandExpression.accept(this); Evaluator operandEvaluator = myResult; // handle unboxing issues final PsiType operandType = operandExpression.getType(); @Nullable final PsiType unboxedOperandType = PsiPrimitiveType.getUnboxedType(operandType); final IElementType operation = expression.getOperationTokenType(); if (operation == JavaTokenType.PLUSPLUS || operation == JavaTokenType.MINUSMINUS) { try { final Evaluator rightEval = createBinaryEvaluator( operandEvaluator, operandType, new LiteralEvaluator(Integer.valueOf(1), "int"), PsiTypes.intType(), operation == JavaTokenType.PLUSPLUS ? JavaTokenType.PLUS : JavaTokenType.MINUS, unboxedOperandType != null ? unboxedOperandType : operandType ); myResult = new AssignmentEvaluator(operandEvaluator, unboxedOperandType != null ? new BoxingEvaluator(rightEval) : rightEval); } catch (IncorrectOperationException e) { LOG.error(e); } } else { if (JavaTokenType.PLUS.equals(operation) || JavaTokenType.MINUS.equals(operation) || JavaTokenType.TILDE.equals(operation)) { operandEvaluator = handleUnaryNumericPromotion(operandType, operandEvaluator); } else { if (unboxedOperandType != null) { operandEvaluator = new UnBoxingEvaluator(operandEvaluator); } } myResult = new UnaryExpressionEvaluator(operation, expressionType.getCanonicalText(), operandEvaluator, expression.getOperationSign().getText()); } }