@API(status=INTERNAL, since="5.0") public class ExtensionRegistry extends Object
ExtensionRegistry
holds all registered extensions (i.e.
instances of Extension
) for a given
Node
.
A registry has a reference to its parent registry, and all lookups are performed first in the current registry itself and then recursively in its ancestors.
Modifier and Type | Method and Description |
---|---|
static ExtensionRegistry |
createRegistryFrom(ExtensionRegistry parentRegistry,
List<Class<? extends Extension>> extensionTypes)
Factory for creating and populating a new registry from a list of
extension types and a parent registry.
|
static ExtensionRegistry |
createRegistryWithDefaultExtensions(ConfigurationParameters configParams)
Factory for creating and populating a new root registry with the default
extensions.
|
<E extends Extension> |
getExtensions(Class<E> extensionType)
Get all
Extensions of the specified type that are present
in this registry or one of its ancestors. |
<E extends Extension> |
getReversedExtensions(Class<E> extensionType)
Get all
Extensions of the specified type that are present
in this registry or one of its ancestors, in reverse order. |
void |
registerExtension(Extension extension,
Object source)
Register the supplied
Extension in this registry, without checking
if an extension of that type already exists in this registry. |
<E extends Extension> |
stream(Class<E> extensionType)
Stream all
Extensions of the specified type that are present
in this registry or one of its ancestors. |
public static ExtensionRegistry createRegistryWithDefaultExtensions(ConfigurationParameters configParams)
If the Constants.EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME
configuration parameter has been set to true
, extensions will be
auto-detected using Java's ServiceLoader
mechanism and automatically
registered after the default extensions.
configParams
- configuration parameters used to retrieve the extension
auto-detection flag; never null
ExtensionRegistry
; never null
public static ExtensionRegistry createRegistryFrom(ExtensionRegistry parentRegistry, List<Class<? extends Extension>> extensionTypes)
parentRegistry
- the parent registryextensionTypes
- the types of extensions to be registered in
the new registryExtensionRegistry
; never null
public <E extends Extension> Stream<E> stream(Class<E> extensionType)
Extensions
of the specified type that are present
in this registry or one of its ancestors.extensionType
- the type of Extension
to streamgetReversedExtensions(Class)
,
getExtensions(Class)
public <E extends Extension> List<E> getExtensions(Class<E> extensionType)
Extensions
of the specified type that are present
in this registry or one of its ancestors.extensionType
- the type of Extension
to getgetReversedExtensions(Class)
,
stream(Class)
public <E extends Extension> List<E> getReversedExtensions(Class<E> extensionType)
Extensions
of the specified type that are present
in this registry or one of its ancestors, in reverse order.extensionType
- the type of Extension
to getgetExtensions(Class)
,
stream(Class)
public void registerExtension(Extension extension, Object source)
Extension
in this registry, without checking
if an extension of that type already exists in this registry.
If an extension is registered declaratively via @ExtendWith
,
the source
and the extension
should be the same object. However,
if an extension is registered programmatically — for example, as a lambda
expression or method reference — the source
object should be the
underlying Method
that implements the extension
API, or similar.
extension
- the extension to registersource
- the source of the extension