private static CompletableFuture<Boolean> overridesToStringAsync(Type type) {
    if (!DebuggerUtilsAsync.isAsyncEnabled()) {
      return CompletableFuture.completedFuture(overridesToString(type));
    }
    if (type instanceof ClassType) {
      return DebuggerUtilsAsync.findAnyBaseType(type, t -> {
        if (t instanceof ReferenceType) {
          return DebuggerUtilsAsync.methods((ReferenceType)t)
            .thenApply(methods -> {
              return ContainerUtil.exists(methods,
                                          m -> !m.isAbstract() &&
                                               DebuggerUtilsEx.methodMatches(m, "toString", "()Ljava/lang/String;") &&
                                               !CommonClassNames.JAVA_LANG_OBJECT.equals(m.declaringType().name()));
            });
        }
        return CompletableFuture.completedFuture(false);
      }).thenApply(t -> t != null);
    }
    return CompletableFuture.completedFuture(false);
  }
private static CompletableFuture<Boolean> overridesToStringAsync(Type type)