test_class.file: dubbo-common/src/test/java/org/apache/dubbo/common/extension/ExtensionLoaderTest.java
test_class.identifier: ExtensionLoaderTest
test_case.body: @Test
      public void test_getExtensionLoader_NotSpiAnnotation() throws Exception {
          try {
              getExtensionLoader(NoSpiExt.class);
              fail();
          } catch (IllegalArgumentException expected) {
              assertThat(expected.getMessage(),
                      allOf(containsString("org.apache.dubbo.common.extension.NoSpiExt"),
                              containsString("is not an extension"),
                              containsString("NOT annotated with @SPI")));
          }
      }
test_case.class_method_signature: ExtensionLoaderTest.test_getExtensionLoader_NotSpiAnnotation()
test_case.full_signature: @Test public void test_getExtensionLoader_NotSpiAnnotation()
test_case.identifier: test_getExtensionLoader_NotSpiAnnotation
test_case.invocations: getExtensionLoader fail assertThat getMessage allOf containsString containsString containsString
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void test_getExtensionLoader_NotSpiAnnotation()
focal_class.declarator: logger = LoggerFactory.getLogger(ExtensionLoader.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger logger = LoggerFactory.getLogger(ExtensionLoader.class);
focal_class.type: Logger
focal_class.var_name: logger
focal_class.declarator: NAME_SEPARATOR = Pattern.compile("\\s*[,]+\\s*")
focal_class.modifier: private static final
focal_class.original_string: private static final Pattern NAME_SEPARATOR = Pattern.compile("\\s*[,]+\\s*");
focal_class.type: Pattern
focal_class.var_name: NAME_SEPARATOR
focal_class.declarator: EXTENSION_LOADERS = new ConcurrentHashMap<>(64)
focal_class.modifier: private static final
focal_class.original_string: private static final ConcurrentMap<Class<?>, ExtensionLoader<?>> EXTENSION_LOADERS = new ConcurrentHashMap<>(64);
focal_class.type: ConcurrentMap<Class<?>, ExtensionLoader<?>>
focal_class.var_name: EXTENSION_LOADERS
focal_class.declarator: EXTENSION_INSTANCES = new ConcurrentHashMap<>(64)
focal_class.modifier: private static final
focal_class.original_string: private static final ConcurrentMap<Class<?>, Object> EXTENSION_INSTANCES = new ConcurrentHashMap<>(64);
focal_class.type: ConcurrentMap<Class<?>, Object>
focal_class.var_name: EXTENSION_INSTANCES
focal_class.declarator: type
focal_class.modifier: private final
focal_class.original_string: private final Class<?> type;
focal_class.type: Class<?>
focal_class.var_name: type
focal_class.declarator: objectFactory
focal_class.modifier: private final
focal_class.original_string: private final ExtensionFactory objectFactory;
focal_class.type: ExtensionFactory
focal_class.var_name: objectFactory
focal_class.declarator: cachedNames = new ConcurrentHashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final ConcurrentMap<Class<?>, String> cachedNames = new ConcurrentHashMap<>();
focal_class.type: ConcurrentMap<Class<?>, String>
focal_class.var_name: cachedNames
focal_class.declarator: cachedClasses = new Holder<>()
focal_class.modifier: private final
focal_class.original_string: private final Holder<Map<String, Class<?>>> cachedClasses = new Holder<>();
focal_class.type: Holder<Map<String, Class<?>>>
focal_class.var_name: cachedClasses
focal_class.declarator: cachedActivates = new ConcurrentHashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<String, Object> cachedActivates = new ConcurrentHashMap<>();
focal_class.type: Map<String, Object>
focal_class.var_name: cachedActivates
focal_class.declarator: cachedInstances = new ConcurrentHashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final ConcurrentMap<String, Holder<Object>> cachedInstances = new ConcurrentHashMap<>();
focal_class.type: ConcurrentMap<String, Holder<Object>>
focal_class.var_name: cachedInstances
focal_class.declarator: cachedAdaptiveInstance = new Holder<>()
focal_class.modifier: private final
focal_class.original_string: private final Holder<Object> cachedAdaptiveInstance = new Holder<>();
focal_class.type: Holder<Object>
focal_class.var_name: cachedAdaptiveInstance
focal_class.declarator: cachedAdaptiveClass = null
focal_class.modifier: private volatile
focal_class.original_string: private volatile Class<?> cachedAdaptiveClass = null;
focal_class.type: Class<?>
focal_class.var_name: cachedAdaptiveClass
focal_class.declarator: cachedDefaultName
focal_class.modifier: private
focal_class.original_string: private String cachedDefaultName;
focal_class.type: String
focal_class.var_name: cachedDefaultName
focal_class.declarator: createAdaptiveInstanceError
focal_class.modifier: private volatile
focal_class.original_string: private volatile Throwable createAdaptiveInstanceError;
focal_class.type: Throwable
focal_class.var_name: createAdaptiveInstanceError
focal_class.declarator: cachedWrapperClasses
focal_class.modifier: private
focal_class.original_string: private Set<Class<?>> cachedWrapperClasses;
focal_class.type: Set<Class<?>>
focal_class.var_name: cachedWrapperClasses
focal_class.declarator: exceptions = new ConcurrentHashMap<>()
focal_class.modifier: private
focal_class.original_string: private Map<String, IllegalStateException> exceptions = new ConcurrentHashMap<>();
focal_class.type: Map<String, IllegalStateException>
focal_class.var_name: exceptions
focal_class.declarator: strategies = loadLoadingStrategies()
focal_class.modifier: private static volatile
focal_class.original_string: private static volatile LoadingStrategy[] strategies = loadLoadingStrategies();
focal_class.type: LoadingStrategy[]
focal_class.var_name: strategies
focal_class.file: dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
focal_class.identifier: ExtensionLoader
focal_class.class_method_signature: ExtensionLoader.setLoadingStrategies(LoadingStrategy... strategies)
focal_class.full_signature: public static void setLoadingStrategies(LoadingStrategy... strategies)
focal_class.identifier: setLoadingStrategies
focal_class.modifiers: public static
focal_class.parameters: (LoadingStrategy... strategies)
focal_class.return: void
focal_class.signature: void setLoadingStrategies(LoadingStrategy... strategies)
focal_class.class_method_signature: ExtensionLoader.loadLoadingStrategies()
focal_class.full_signature: private static LoadingStrategy[] loadLoadingStrategies()
focal_class.identifier: loadLoadingStrategies
focal_class.modifiers: private static
focal_class.parameters: ()
focal_class.return: LoadingStrategy[]
focal_class.signature: LoadingStrategy[] loadLoadingStrategies()
focal_class.class_method_signature: ExtensionLoader.getLoadingStrategies()
focal_class.full_signature: public static List<LoadingStrategy> getLoadingStrategies()
focal_class.identifier: getLoadingStrategies
focal_class.modifiers: public static
focal_class.parameters: ()
focal_class.return: List<LoadingStrategy>
focal_class.signature: List<LoadingStrategy> getLoadingStrategies()
focal_class.class_method_signature: ExtensionLoader.ExtensionLoader(Class<?> type)
focal_class.full_signature: private  ExtensionLoader(Class<?> type)
focal_class.identifier: ExtensionLoader
focal_class.modifiers: private
focal_class.parameters: (Class<?> type)
focal_class.signature:  ExtensionLoader(Class<?> type)
focal_class.class_method_signature: ExtensionLoader.withExtensionAnnotation(Class<T> type)
focal_class.full_signature: private static boolean withExtensionAnnotation(Class<T> type)
focal_class.identifier: withExtensionAnnotation
focal_class.modifiers: private static
focal_class.parameters: (Class<T> type)
focal_class.return: boolean
focal_class.signature: boolean withExtensionAnnotation(Class<T> type)
focal_class.class_method_signature: ExtensionLoader.getExtensionLoader(Class<T> type)
focal_class.full_signature: @SuppressWarnings("unchecked") public static ExtensionLoader<T> getExtensionLoader(Class<T> type)
focal_class.identifier: getExtensionLoader
focal_class.modifiers: @SuppressWarnings("unchecked") public static
focal_class.parameters: (Class<T> type)
focal_class.return: ExtensionLoader<T>
focal_class.signature: ExtensionLoader<T> getExtensionLoader(Class<T> type)
focal_class.class_method_signature: ExtensionLoader.resetExtensionLoader(Class type)
focal_class.full_signature: public static void resetExtensionLoader(Class type)
focal_class.identifier: resetExtensionLoader
focal_class.modifiers: public static
focal_class.parameters: (Class type)
focal_class.return: void
focal_class.signature: void resetExtensionLoader(Class type)
focal_class.class_method_signature: ExtensionLoader.destroyAll()
focal_class.full_signature: public static void destroyAll()
focal_class.identifier: destroyAll
focal_class.modifiers: public static
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void destroyAll()
focal_class.class_method_signature: ExtensionLoader.findClassLoader()
focal_class.full_signature: private static ClassLoader findClassLoader()
focal_class.identifier: findClassLoader
focal_class.modifiers: private static
focal_class.parameters: ()
focal_class.return: ClassLoader
focal_class.signature: ClassLoader findClassLoader()
focal_class.class_method_signature: ExtensionLoader.getExtensionName(T extensionInstance)
focal_class.full_signature: public String getExtensionName(T extensionInstance)
focal_class.identifier: getExtensionName
focal_class.modifiers: public
focal_class.parameters: (T extensionInstance)
focal_class.return: String
focal_class.signature: String getExtensionName(T extensionInstance)
focal_class.class_method_signature: ExtensionLoader.getExtensionName(Class<?> extensionClass)
focal_class.full_signature: public String getExtensionName(Class<?> extensionClass)
focal_class.identifier: getExtensionName
focal_class.modifiers: public
focal_class.parameters: (Class<?> extensionClass)
focal_class.return: String
focal_class.signature: String getExtensionName(Class<?> extensionClass)
focal_class.class_method_signature: ExtensionLoader.getActivateExtension(URL url, String key)
focal_class.full_signature: public List<T> getActivateExtension(URL url, String key)
focal_class.identifier: getActivateExtension
focal_class.modifiers: public
focal_class.parameters: (URL url, String key)
focal_class.return: List<T>
focal_class.signature: List<T> getActivateExtension(URL url, String key)
focal_class.class_method_signature: ExtensionLoader.getActivateExtension(URL url, String[] values)
focal_class.full_signature: public List<T> getActivateExtension(URL url, String[] values)
focal_class.identifier: getActivateExtension
focal_class.modifiers: public
focal_class.parameters: (URL url, String[] values)
focal_class.return: List<T>
focal_class.signature: List<T> getActivateExtension(URL url, String[] values)
focal_class.class_method_signature: ExtensionLoader.getActivateExtension(URL url, String key, String group)
focal_class.full_signature: public List<T> getActivateExtension(URL url, String key, String group)
focal_class.identifier: getActivateExtension
focal_class.modifiers: public
focal_class.parameters: (URL url, String key, String group)
focal_class.return: List<T>
focal_class.signature: List<T> getActivateExtension(URL url, String key, String group)
focal_class.class_method_signature: ExtensionLoader.getActivateExtension(URL url, String[] values, String group)
focal_class.full_signature: public List<T> getActivateExtension(URL url, String[] values, String group)
focal_class.identifier: getActivateExtension
focal_class.modifiers: public
focal_class.parameters: (URL url, String[] values, String group)
focal_class.return: List<T>
focal_class.signature: List<T> getActivateExtension(URL url, String[] values, String group)
focal_class.class_method_signature: ExtensionLoader.isMatchGroup(String group, String[] groups)
focal_class.full_signature: private boolean isMatchGroup(String group, String[] groups)
focal_class.identifier: isMatchGroup
focal_class.modifiers: private
focal_class.parameters: (String group, String[] groups)
focal_class.return: boolean
focal_class.signature: boolean isMatchGroup(String group, String[] groups)
focal_class.class_method_signature: ExtensionLoader.isActive(String[] keys, URL url)
focal_class.full_signature: private boolean isActive(String[] keys, URL url)
focal_class.identifier: isActive
focal_class.modifiers: private
focal_class.parameters: (String[] keys, URL url)
focal_class.return: boolean
focal_class.signature: boolean isActive(String[] keys, URL url)
focal_class.class_method_signature: ExtensionLoader.getLoadedExtension(String name)
focal_class.full_signature: @SuppressWarnings("unchecked") public T getLoadedExtension(String name)
focal_class.identifier: getLoadedExtension
focal_class.modifiers: @SuppressWarnings("unchecked") public
focal_class.parameters: (String name)
focal_class.return: T
focal_class.signature: T getLoadedExtension(String name)
focal_class.class_method_signature: ExtensionLoader.getOrCreateHolder(String name)
focal_class.full_signature: private Holder<Object> getOrCreateHolder(String name)
focal_class.identifier: getOrCreateHolder
focal_class.modifiers: private
focal_class.parameters: (String name)
focal_class.return: Holder<Object>
focal_class.signature: Holder<Object> getOrCreateHolder(String name)
focal_class.class_method_signature: ExtensionLoader.getLoadedExtensions()
focal_class.full_signature: public Set<String> getLoadedExtensions()
focal_class.identifier: getLoadedExtensions
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: Set<String>
focal_class.signature: Set<String> getLoadedExtensions()
focal_class.class_method_signature: ExtensionLoader.getLoadedExtensionInstances()
focal_class.full_signature: public List<T> getLoadedExtensionInstances()
focal_class.identifier: getLoadedExtensionInstances
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: List<T>
focal_class.signature: List<T> getLoadedExtensionInstances()
focal_class.class_method_signature: ExtensionLoader.getLoadedAdaptiveExtensionInstances()
focal_class.full_signature: public Object getLoadedAdaptiveExtensionInstances()
focal_class.identifier: getLoadedAdaptiveExtensionInstances
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: Object
focal_class.signature: Object getLoadedAdaptiveExtensionInstances()
focal_class.class_method_signature: ExtensionLoader.getExtension(String name)
focal_class.full_signature: @SuppressWarnings("unchecked") public T getExtension(String name)
focal_class.identifier: getExtension
focal_class.modifiers: @SuppressWarnings("unchecked") public
focal_class.parameters: (String name)
focal_class.return: T
focal_class.signature: T getExtension(String name)
focal_class.class_method_signature: ExtensionLoader.getExtension(String name, boolean wrap)
focal_class.full_signature: public T getExtension(String name, boolean wrap)
focal_class.identifier: getExtension
focal_class.modifiers: public
focal_class.parameters: (String name, boolean wrap)
focal_class.return: T
focal_class.signature: T getExtension(String name, boolean wrap)
focal_class.class_method_signature: ExtensionLoader.getOrDefaultExtension(String name)
focal_class.full_signature: public T getOrDefaultExtension(String name)
focal_class.identifier: getOrDefaultExtension
focal_class.modifiers: public
focal_class.parameters: (String name)
focal_class.return: T
focal_class.signature: T getOrDefaultExtension(String name)
focal_class.class_method_signature: ExtensionLoader.getDefaultExtension()
focal_class.full_signature: public T getDefaultExtension()
focal_class.identifier: getDefaultExtension
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: T
focal_class.signature: T getDefaultExtension()
focal_class.class_method_signature: ExtensionLoader.hasExtension(String name)
focal_class.full_signature: public boolean hasExtension(String name)
focal_class.identifier: hasExtension
focal_class.modifiers: public
focal_class.parameters: (String name)
focal_class.return: boolean
focal_class.signature: boolean hasExtension(String name)
focal_class.class_method_signature: ExtensionLoader.getSupportedExtensions()
focal_class.full_signature: public Set<String> getSupportedExtensions()
focal_class.identifier: getSupportedExtensions
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: Set<String>
focal_class.signature: Set<String> getSupportedExtensions()
focal_class.class_method_signature: ExtensionLoader.getSupportedExtensionInstances()
focal_class.full_signature: public Set<T> getSupportedExtensionInstances()
focal_class.identifier: getSupportedExtensionInstances
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: Set<T>
focal_class.signature: Set<T> getSupportedExtensionInstances()
focal_class.class_method_signature: ExtensionLoader.getDefaultExtensionName()
focal_class.full_signature: public String getDefaultExtensionName()
focal_class.identifier: getDefaultExtensionName
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getDefaultExtensionName()
focal_class.class_method_signature: ExtensionLoader.addExtension(String name, Class<?> clazz)
focal_class.full_signature: public void addExtension(String name, Class<?> clazz)
focal_class.identifier: addExtension
focal_class.modifiers: public
focal_class.parameters: (String name, Class<?> clazz)
focal_class.return: void
focal_class.signature: void addExtension(String name, Class<?> clazz)
focal_class.class_method_signature: ExtensionLoader.replaceExtension(String name, Class<?> clazz)
focal_class.full_signature: @Deprecated public void replaceExtension(String name, Class<?> clazz)
focal_class.identifier: replaceExtension
focal_class.modifiers: @Deprecated public
focal_class.parameters: (String name, Class<?> clazz)
focal_class.return: void
focal_class.signature: void replaceExtension(String name, Class<?> clazz)
focal_class.class_method_signature: ExtensionLoader.getAdaptiveExtension()
focal_class.full_signature: @SuppressWarnings("unchecked") public T getAdaptiveExtension()
focal_class.identifier: getAdaptiveExtension
focal_class.modifiers: @SuppressWarnings("unchecked") public
focal_class.parameters: ()
focal_class.return: T
focal_class.signature: T getAdaptiveExtension()
focal_class.class_method_signature: ExtensionLoader.findException(String name)
focal_class.full_signature: private IllegalStateException findException(String name)
focal_class.identifier: findException
focal_class.modifiers: private
focal_class.parameters: (String name)
focal_class.return: IllegalStateException
focal_class.signature: IllegalStateException findException(String name)
focal_class.class_method_signature: ExtensionLoader.createExtension(String name, boolean wrap)
focal_class.full_signature: @SuppressWarnings("unchecked") private T createExtension(String name, boolean wrap)
focal_class.identifier: createExtension
focal_class.modifiers: @SuppressWarnings("unchecked") private
focal_class.parameters: (String name, boolean wrap)
focal_class.return: T
focal_class.signature: T createExtension(String name, boolean wrap)
focal_class.class_method_signature: ExtensionLoader.containsExtension(String name)
focal_class.full_signature: private boolean containsExtension(String name)
focal_class.identifier: containsExtension
focal_class.modifiers: private
focal_class.parameters: (String name)
focal_class.return: boolean
focal_class.signature: boolean containsExtension(String name)
focal_class.class_method_signature: ExtensionLoader.injectExtension(T instance)
focal_class.full_signature: private T injectExtension(T instance)
focal_class.identifier: injectExtension
focal_class.modifiers: private
focal_class.parameters: (T instance)
focal_class.return: T
focal_class.signature: T injectExtension(T instance)
focal_class.class_method_signature: ExtensionLoader.initExtension(T instance)
focal_class.full_signature: private void initExtension(T instance)
focal_class.identifier: initExtension
focal_class.modifiers: private
focal_class.parameters: (T instance)
focal_class.return: void
focal_class.signature: void initExtension(T instance)
focal_class.class_method_signature: ExtensionLoader.getSetterProperty(Method method)
focal_class.full_signature: private String getSetterProperty(Method method)
focal_class.identifier: getSetterProperty
focal_class.modifiers: private
focal_class.parameters: (Method method)
focal_class.return: String
focal_class.signature: String getSetterProperty(Method method)
focal_class.class_method_signature: ExtensionLoader.isSetter(Method method)
focal_class.full_signature: private boolean isSetter(Method method)
focal_class.identifier: isSetter
focal_class.modifiers: private
focal_class.parameters: (Method method)
focal_class.return: boolean
focal_class.signature: boolean isSetter(Method method)
focal_class.class_method_signature: ExtensionLoader.getExtensionClass(String name)
focal_class.full_signature: private Class<?> getExtensionClass(String name)
focal_class.identifier: getExtensionClass
focal_class.modifiers: private
focal_class.parameters: (String name)
focal_class.return: Class<?>
focal_class.signature: Class<?> getExtensionClass(String name)
focal_class.class_method_signature: ExtensionLoader.getExtensionClasses()
focal_class.full_signature: private Map<String, Class<?>> getExtensionClasses()
focal_class.identifier: getExtensionClasses
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: Map<String, Class<?>>
focal_class.signature: Map<String, Class<?>> getExtensionClasses()
focal_class.class_method_signature: ExtensionLoader.loadExtensionClasses()
focal_class.full_signature: private Map<String, Class<?>> loadExtensionClasses()
focal_class.identifier: loadExtensionClasses
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: Map<String, Class<?>>
focal_class.signature: Map<String, Class<?>> loadExtensionClasses()
focal_class.class_method_signature: ExtensionLoader.cacheDefaultExtensionName()
focal_class.full_signature: private void cacheDefaultExtensionName()
focal_class.identifier: cacheDefaultExtensionName
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void cacheDefaultExtensionName()
focal_class.class_method_signature: ExtensionLoader.loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type)
focal_class.full_signature: private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type)
focal_class.identifier: loadDirectory
focal_class.modifiers: private
focal_class.parameters: (Map<String, Class<?>> extensionClasses, String dir, String type)
focal_class.return: void
focal_class.signature: void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type)
focal_class.class_method_signature: ExtensionLoader.loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type,
                                 boolean extensionLoaderClassLoaderFirst, boolean overridden, String... excludedPackages)
focal_class.full_signature: private void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type,
                                 boolean extensionLoaderClassLoaderFirst, boolean overridden, String... excludedPackages)
focal_class.identifier: loadDirectory
focal_class.modifiers: private
focal_class.parameters: (Map<String, Class<?>> extensionClasses, String dir, String type,
                                 boolean extensionLoaderClassLoaderFirst, boolean overridden, String... excludedPackages)
focal_class.return: void
focal_class.signature: void loadDirectory(Map<String, Class<?>> extensionClasses, String dir, String type,
                                 boolean extensionLoaderClassLoaderFirst, boolean overridden, String... excludedPackages)
focal_class.class_method_signature: ExtensionLoader.loadResource(Map<String, Class<?>> extensionClasses, ClassLoader classLoader,
                                java.net.URL resourceURL, boolean overridden, String... excludedPackages)
focal_class.full_signature: private void loadResource(Map<String, Class<?>> extensionClasses, ClassLoader classLoader,
                                java.net.URL resourceURL, boolean overridden, String... excludedPackages)
focal_class.identifier: loadResource
focal_class.modifiers: private
focal_class.parameters: (Map<String, Class<?>> extensionClasses, ClassLoader classLoader,
                                java.net.URL resourceURL, boolean overridden, String... excludedPackages)
focal_class.return: void
focal_class.signature: void loadResource(Map<String, Class<?>> extensionClasses, ClassLoader classLoader,
                                java.net.URL resourceURL, boolean overridden, String... excludedPackages)
focal_class.class_method_signature: ExtensionLoader.isExcluded(String className, String... excludedPackages)
focal_class.full_signature: private boolean isExcluded(String className, String... excludedPackages)
focal_class.identifier: isExcluded
focal_class.modifiers: private
focal_class.parameters: (String className, String... excludedPackages)
focal_class.return: boolean
focal_class.signature: boolean isExcluded(String className, String... excludedPackages)
focal_class.class_method_signature: ExtensionLoader.loadClass(Map<String, Class<?>> extensionClasses, java.net.URL resourceURL, Class<?> clazz, String name,
                             boolean overridden)
focal_class.full_signature: private void loadClass(Map<String, Class<?>> extensionClasses, java.net.URL resourceURL, Class<?> clazz, String name,
                             boolean overridden)
focal_class.identifier: loadClass
focal_class.modifiers: private
focal_class.parameters: (Map<String, Class<?>> extensionClasses, java.net.URL resourceURL, Class<?> clazz, String name,
                             boolean overridden)
focal_class.return: void
focal_class.signature: void loadClass(Map<String, Class<?>> extensionClasses, java.net.URL resourceURL, Class<?> clazz, String name,
                             boolean overridden)
focal_class.class_method_signature: ExtensionLoader.cacheName(Class<?> clazz, String name)
focal_class.full_signature: private void cacheName(Class<?> clazz, String name)
focal_class.identifier: cacheName
focal_class.modifiers: private
focal_class.parameters: (Class<?> clazz, String name)
focal_class.return: void
focal_class.signature: void cacheName(Class<?> clazz, String name)
focal_class.class_method_signature: ExtensionLoader.saveInExtensionClass(Map<String, Class<?>> extensionClasses, Class<?> clazz, String name, boolean overridden)
focal_class.full_signature: private void saveInExtensionClass(Map<String, Class<?>> extensionClasses, Class<?> clazz, String name, boolean overridden)
focal_class.identifier: saveInExtensionClass
focal_class.modifiers: private
focal_class.parameters: (Map<String, Class<?>> extensionClasses, Class<?> clazz, String name, boolean overridden)
focal_class.return: void
focal_class.signature: void saveInExtensionClass(Map<String, Class<?>> extensionClasses, Class<?> clazz, String name, boolean overridden)
focal_class.class_method_signature: ExtensionLoader.cacheActivateClass(Class<?> clazz, String name)
focal_class.full_signature: private void cacheActivateClass(Class<?> clazz, String name)
focal_class.identifier: cacheActivateClass
focal_class.modifiers: private
focal_class.parameters: (Class<?> clazz, String name)
focal_class.return: void
focal_class.signature: void cacheActivateClass(Class<?> clazz, String name)
focal_class.class_method_signature: ExtensionLoader.cacheAdaptiveClass(Class<?> clazz, boolean overridden)
focal_class.full_signature: private void cacheAdaptiveClass(Class<?> clazz, boolean overridden)
focal_class.identifier: cacheAdaptiveClass
focal_class.modifiers: private
focal_class.parameters: (Class<?> clazz, boolean overridden)
focal_class.return: void
focal_class.signature: void cacheAdaptiveClass(Class<?> clazz, boolean overridden)
focal_class.class_method_signature: ExtensionLoader.cacheWrapperClass(Class<?> clazz)
focal_class.full_signature: private void cacheWrapperClass(Class<?> clazz)
focal_class.identifier: cacheWrapperClass
focal_class.modifiers: private
focal_class.parameters: (Class<?> clazz)
focal_class.return: void
focal_class.signature: void cacheWrapperClass(Class<?> clazz)
focal_class.class_method_signature: ExtensionLoader.isWrapperClass(Class<?> clazz)
focal_class.full_signature: private boolean isWrapperClass(Class<?> clazz)
focal_class.identifier: isWrapperClass
focal_class.modifiers: private
focal_class.parameters: (Class<?> clazz)
focal_class.return: boolean
focal_class.signature: boolean isWrapperClass(Class<?> clazz)
focal_class.class_method_signature: ExtensionLoader.findAnnotationName(Class<?> clazz)
focal_class.full_signature: @SuppressWarnings("deprecation") private String findAnnotationName(Class<?> clazz)
focal_class.identifier: findAnnotationName
focal_class.modifiers: @SuppressWarnings("deprecation") private
focal_class.parameters: (Class<?> clazz)
focal_class.return: String
focal_class.signature: String findAnnotationName(Class<?> clazz)
focal_class.class_method_signature: ExtensionLoader.createAdaptiveExtension()
focal_class.full_signature: @SuppressWarnings("unchecked") private T createAdaptiveExtension()
focal_class.identifier: createAdaptiveExtension
focal_class.modifiers: @SuppressWarnings("unchecked") private
focal_class.parameters: ()
focal_class.return: T
focal_class.signature: T createAdaptiveExtension()
focal_class.class_method_signature: ExtensionLoader.getAdaptiveExtensionClass()
focal_class.full_signature: private Class<?> getAdaptiveExtensionClass()
focal_class.identifier: getAdaptiveExtensionClass
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: Class<?>
focal_class.signature: Class<?> getAdaptiveExtensionClass()
focal_class.class_method_signature: ExtensionLoader.createAdaptiveExtensionClass()
focal_class.full_signature: private Class<?> createAdaptiveExtensionClass()
focal_class.identifier: createAdaptiveExtensionClass
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: Class<?>
focal_class.signature: Class<?> createAdaptiveExtensionClass()
focal_class.class_method_signature: ExtensionLoader.toString()
focal_class.full_signature: @Override public String toString()
focal_class.identifier: toString
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String toString()
focal_method.body: @SuppressWarnings("unchecked")
      public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) {
          if (type == null) {
              throw new IllegalArgumentException("Extension type == null");
          }
          if (!type.isInterface()) {
              throw new IllegalArgumentException("Extension type (" + type + ") is not an interface!");
          }
          if (!withExtensionAnnotation(type)) {
              throw new IllegalArgumentException("Extension type (" + type +
                      ") is not an extension, because it is NOT annotated with @" + SPI.class.getSimpleName() + "!");
          }
  
          ExtensionLoader<T> loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type);
          if (loader == null) {
              EXTENSION_LOADERS.putIfAbsent(type, new ExtensionLoader<T>(type));
              loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type);
          }
          return loader;
      }
focal_method.class_method_signature: ExtensionLoader.getExtensionLoader(Class<T> type)
focal_method.full_signature: @SuppressWarnings("unchecked") public static ExtensionLoader<T> getExtensionLoader(Class<T> type)
focal_method.identifier: getExtensionLoader
focal_method.invocations: isInterface withExtensionAnnotation getSimpleName get putIfAbsent get
focal_method.modifiers: @SuppressWarnings("unchecked") public static
focal_method.parameters: (Class<T> type)
focal_method.return: ExtensionLoader<T>
focal_method.signature: ExtensionLoader<T> getExtensionLoader(Class<T> type)