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 nameMethod = DebuggerUtils.findMethod(type, "getName", "()Ljava/lang/String;"); if (nameMethod != null) { try { final DebugProcessImpl process = evaluationContext.getDebugProcess(); Value res = process.invokeMethod(evaluationContext, (ObjectReference)value, nameMethod, Collections.emptyList()); if (res instanceof StringReference) { callback.evaluated(""); final String line = ((StringReference)res).value(); ApplicationManager.getApplication().runReadAction(() -> { final PsiClass psiClass = DebuggerUtils.findClass(line, valueDescriptor.getProject(), process.getSearchScope()); if (psiClass != null) { DebuggerUIUtil.invokeLater(() -> psiClass.navigate(true)); } }); } } catch (EvaluateException e) { LOG.info("Exception while getting type name", e); } } } @Override public boolean isShowValuePopup() { return false; } }; }