docs: protected <T> T create(Class<T> type, Map<String, String> config) {
          // Use #doInstantiate so inheriting classes can override it, as #instantiate is static final.
          T instance = doInstantiate(type, config);
  
          if (instance instanceof AsyncInitialize) {
              asyncInitializeAwaiting.incrementAndGet();
              ((AsyncInitialize) instance).initialize(initResult -> {
                  asyncInitializeAwaiting.decrementAndGet();
                  if (initResult.isError()) {
                      if (!failed) { // Not already failed before
                          failed = true;
                          if (handler != null)
                              handler.handle(initResult);
                      } else {
                          System.err.println("Failure occurred, but error handler was already invoked: " + initResult.getError().getCause()); //$NON-NLS-1$
                      }
                  } else {
                      checkLoadingStatus();
                  }
              });
          }
  
          checkLoadingStatus();
          return instance;
      }