code: public static <T> Collection<T> getFromExtensions(ExtensionsConfig config, Class<T> serviceClass)
    {
      // It's not clear whether we should recompute modules even if they have been computed already for the serviceClass,
      // but that's how it used to be an preserving the old behaviour here.
      Collection<?> modules = extensionsMap.compute(
          serviceClass,
          (serviceC, ignored) -> new ServiceLoadingFromExtensions<>(config, serviceC).implsToLoad
      );
      //noinspection unchecked
      return (Collection<T>) modules;
    }
docs: Look for implementations for the given class from both classpath and extensions directory, using {@link
  ServiceLoader}. A user should never put the same two extensions in classpath and extensions directory, if he/she
  does that, the one that is in the classpath will be loaded, the other will be ignored.
  
  @param config       Extensions configuration
  @param serviceClass The class to look the implementations of (e.g., DruidModule)
  
  @return A collection that contains implementations (of distinct concrete classes) of the given class. The order of
  elements in the returned collection is not specified and not guaranteed to be the same for different calls to
  getFromExtensions().