@Override
  public <T> Iterable<T> getExtensions(Class<T> extensionClass) {
    // confine costly service initialization to single thread for defined startup profile
    synchronized (myExtensions) {
      List<?> cached = cleanupExtensionCache()? null : myExtensions.get(extensionClass);
      if (cached == null) {
        myExtensions.put(extensionClass, cached = new ArrayList<>(loadExtensions(extensionClass)));
      }
      //noinspection unchecked
      return (List<T>)cached;
    }
  }
@Override
  public <T> Iterable<T> getExtensions(Class<T> extensionClass)