@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("");
                String className = ((StringReference)res).value();
                ApplicationManager.getApplication().runReadAction(() -> {
                  PsiClass psiClass = DebuggerUtils.findClass(className, valueDescriptor.getProject(), process.getSearchScope());
                  if (psiClass != null) {
                    PsiElement element = psiClass.getNavigationElement(); // do not do this in EDT
                    DebuggerUIUtil.invokeLater(() -> PsiNavigateUtil.navigate(element));
                  }
                });
              }
            }
            catch (EvaluateException e) {
              LOG.info("Exception while getting type name", e);
            }
          }
        }
@Override
        public void evaluate(@NotNull XFullValueEvaluationCallback callback)