public static CompletableFuture<Stream<? extends ReferenceType>> supertypes(ReferenceType type) {
    if (!isAsyncEnabled()) {
      return toCompletableFuture(() -> DebuggerUtilsImpl.supertypes(type));
    }
    if (type instanceof InterfaceType) {
      return superinterfaces(((InterfaceType)type)).thenApply(Collection::stream);
    }
    else if (type instanceof ClassType) {
      return superclass((ClassType)type).thenCombine(interfaces((ClassType)type), (superclass, interfaces) ->
        StreamEx.<ReferenceType>ofNullable(superclass).prepend(interfaces));
    }
    return completedFuture(StreamEx.empty());
  }
public static CompletableFuture<Stream<? extends ReferenceType>> supertypes(ReferenceType type)