@API(status=INTERNAL, since="5.5") public class MutableExtensionRegistry extends java.lang.Object implements ExtensionRegistry, ExtensionRegistrar
ExtensionRegistry
.
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 | Field and Description |
---|---|
private static java.util.List<Extension> |
DEFAULT_EXTENSIONS |
private static Logger |
logger |
private MutableExtensionRegistry |
parent |
private java.util.List<Extension> |
registeredExtensions |
private java.util.Set<java.lang.Class<? extends Extension>> |
registeredExtensionTypes |
Modifier | Constructor and Description |
---|---|
private |
MutableExtensionRegistry(MutableExtensionRegistry parent) |
Modifier and Type | Method and Description |
---|---|
static MutableExtensionRegistry |
createRegistryFrom(MutableExtensionRegistry 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 MutableExtensionRegistry |
createRegistryWithDefaultExtensions(JupiterConfiguration configuration)
Factory for creating and populating a new root registry with the default
extensions.
|
private boolean |
isAlreadyRegistered(java.lang.Class<? extends Extension> extensionType)
Determine if the supplied type is already registered in this registry or in a
parent registry.
|
private static Extension |
newScriptExecutionCondition() |
private static void |
registerAutoDetectedExtensions(MutableExtensionRegistry extensionRegistry) |
private void |
registerDefaultExtension(Extension extension) |
(package private) void |
registerExtension(java.lang.Class<? extends Extension> extensionType)
Instantiate an extension of the given type using its default constructor
and register it in this registry.
|
private void |
registerExtension(Extension extension) |
void |
registerExtension(Extension extension,
java.lang.Object source)
Register the supplied
Extension , without checking if an extension
of that type already exists. |
<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. |
private <E extends Extension> |
streamLocal(java.lang.Class<E> extensionType)
Stream all
Extensions of the specified type that are present
in this registry. |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getExtensions, getReversedExtensions
private static final Logger logger
private static final java.util.List<Extension> DEFAULT_EXTENSIONS
private final MutableExtensionRegistry parent
private final java.util.Set<java.lang.Class<? extends Extension>> registeredExtensionTypes
private final java.util.List<Extension> registeredExtensions
private MutableExtensionRegistry(MutableExtensionRegistry parent)
private static Extension newScriptExecutionCondition()
public static MutableExtensionRegistry createRegistryWithDefaultExtensions(JupiterConfiguration configuration)
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.
configuration
- configuration parameters used to retrieve the extension
auto-detection flag; never null
ExtensionRegistry
; never null
private static void registerAutoDetectedExtensions(MutableExtensionRegistry extensionRegistry)
public static MutableExtensionRegistry createRegistryFrom(MutableExtensionRegistry 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)
ExtensionRegistry
Extensions
of the specified type that are present
in this registry or one of its ancestors.stream
in interface ExtensionRegistry
extensionType
- the type of Extension
to streamExtensionRegistry.getReversedExtensions(Class)
,
ExtensionRegistry.getExtensions(Class)
private <E extends Extension> java.util.stream.Stream<E> streamLocal(java.lang.Class<E> extensionType)
Extensions
of the specified type that are present
in this registry.
Extensions in ancestors are ignored.
extensionType
- the type of Extension
to streamExtensionRegistry.getReversedExtensions(Class)
private boolean isAlreadyRegistered(java.lang.Class<? extends Extension> extensionType)
void registerExtension(java.lang.Class<? extends Extension> extensionType)
A new Extension
will not be registered if an extension of the
given type already exists in this registry or a parent registry.
extensionType
- the type of extension to registerprivate void registerDefaultExtension(Extension extension)
private void registerExtension(Extension extension)
public void registerExtension(Extension extension, java.lang.Object source)
ExtensionRegistrar
Extension
, without checking if an extension
of that type already exists.
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 via
@RegisterExtension
,
the source
object should be the Field
that is annotated with @RegisterExtension
. Similarly, if an
extension is registered programmatically as a lambda expression
or method reference, the source
object should be the underlying
Method
that implements the extension API.
registerExtension
in interface ExtensionRegistrar
extension
- the extension to register; never null
source
- the source of the extension; never null