FullValueEvaluatorProvider () { return (evaluationContext, valueDescriptor) -> new JavaValue.JavaFullValueEvaluator(JavaDebuggerBundle.message("message.node.navigate"), evaluationContext) { @Override public void evaluate(@NotNull XFullValueEvaluationCallback callback) { Value value = valueDescriptor.getValue(); ClassType type = ((ClassType)value.type()); Method toString = DebuggerUtils.findMethod(type, "toString", "()Ljava/lang/String;"); if (toString != null) { try { Value res = evaluationContext.getDebugProcess() .invokeMethod(evaluationContext, (ObjectReference)value, toString, Collections.emptyList()); if (res instanceof StringReference) { callback.evaluated(""); final String line = ((StringReference)res).value(); ApplicationManager.getApplication().runReadAction(() -> { Project project = valueDescriptor.getProject(); ExceptionFilter filter = new ExceptionFilter(project, evaluationContext.getDebugProcess().getSession().getSearchScope()); Filter.Result result = filter.applyFilter(line, line.length()); if (result != null) { final HyperlinkInfo info = result.getFirstHyperlinkInfo(); if (info != null) { DebuggerUIUtil.invokeLater(() -> info.navigate(project)); } } }); } } catch (EvaluateException e) { LOG.info("Exception while getting stack info", e); } } } @Override public boolean isShowValuePopup() { return false; } }; }