@API(status=INTERNAL, since="5.0") public class ExtensionRegistry extends java.lang.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 | Description |
---|---|---|
static ExtensionRegistry |
createRegistryFrom(ExtensionRegistry parentRegistry,
java.util.List<java.lang.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(java.lang.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(java.lang.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,
java.lang.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(java.lang.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, java.util.List<java.lang.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> java.util.stream.Stream<E> stream(java.lang.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> java.util.List<E> getExtensions(java.lang.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> java.util.List<E> getReversedExtensions(java.lang.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, java.lang.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