void (@NotNull XValue result) { if (result instanceof JavaValue) { final Value reference = ((JavaValue)result).getDescriptor().getValue(); if (reference instanceof ArrayReference) { final TracingResult interpretedResult; try { interpretedResult = myResultInterpreter.interpret(chain, (ArrayReference)reference); } catch (Throwable t) { callback.evaluationFailed(streamTraceExpression, StreamDebuggerBundle.message("evaluation.failed.cannot.interpret.result", t.getMessage())); throw t; } final EvaluationContextImpl context = ((JavaValue)result).getEvaluationContext(); callback.evaluated(interpretedResult, context); return; } if (reference instanceof ObjectReference) { final ReferenceType type = ((ObjectReference)reference).referenceType(); if (type instanceof ClassType classType) { while (classType != null && !CommonClassNames.JAVA_LANG_THROWABLE.equals(classType.name())) { classType = classType.superclass(); } if (classType != null) { final String exceptionMessage = tryExtractExceptionMessage((ObjectReference)reference); final String description = "Evaluation failed: " + type.name() + " exception thrown"; final String descriptionWithReason = exceptionMessage == null ? description : description + ": " + exceptionMessage; callback.evaluationFailed(streamTraceExpression, descriptionWithReason); return; } } } } callback.evaluationFailed(streamTraceExpression, StreamDebuggerBundle.message("evaluation.failed.unknown.result.type")); }