Class MutableExtensionRegistry

java.lang.Object
org.junit.jupiter.engine.extension.MutableExtensionRegistry
All Implemented Interfaces:
ExtensionRegistrar, ExtensionRegistry

@API(status=INTERNAL, since="5.5") public class MutableExtensionRegistry extends Object implements ExtensionRegistry, ExtensionRegistrar
Default, mutable implementation of 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.

Since:
5.5
  • Method Details

    • createRegistryWithDefaultExtensions

      public static MutableExtensionRegistry createRegistryWithDefaultExtensions(JupiterConfiguration configuration)
      Factory for creating and populating a new root registry with the default extensions.

      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.

      Parameters:
      configuration - configuration parameters used to retrieve the extension auto-detection flag; never null
      Returns:
      a new ExtensionRegistry; never null
    • createRegistryFrom

      public static MutableExtensionRegistry createRegistryFrom(MutableExtensionRegistry parentRegistry, Stream<Class<? extends Extension>> extensionTypes)
      Factory for creating and populating a new registry from a list of extension types and a parent registry.
      Parameters:
      parentRegistry - the parent registry
      extensionTypes - the types of extensions to be registered in the new registry
      Returns:
      a new ExtensionRegistry; never null
    • stream

      public <E extends Extension> Stream<E> stream(Class<E> extensionType)
      Description copied from interface: ExtensionRegistry
      Stream all Extensions of the specified type that are present in this registry or one of its ancestors.
      Specified by:
      stream in interface ExtensionRegistry
      Parameters:
      extensionType - the type of Extension to stream
      See Also:
      ExtensionRegistry.getReversedExtensions(Class), ExtensionRegistry.getExtensions(Class)
    • registerExtension

      public void registerExtension(Class<? extends Extension> extensionType)
      Description copied from interface: ExtensionRegistrar
      Instantiate an extension of the given type using its default constructor and register it in the registry.

      A new Extension should not be registered if an extension of the given type already exists in the registry or a parent registry.

      Specified by:
      registerExtension in interface ExtensionRegistrar
      Parameters:
      extensionType - the type of extension to register
    • registerExtension

      public void registerExtension(Extension extension, Object source)
      Description copied from interface: ExtensionRegistrar
      Register the supplied Extension, without checking if an extension of that type has already been registered.

      Semantics for Source

      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.

      Specified by:
      registerExtension in interface ExtensionRegistrar
      Parameters:
      extension - the extension to register; never null
      source - the source of the extension; never null
    • registerSyntheticExtension

      public void registerSyntheticExtension(Extension extension, Object source)
      Description copied from interface: ExtensionRegistrar
      Register the supplied Extension as a synthetic extension, without checking if an extension of that type has already been registered.
      Specified by:
      registerSyntheticExtension in interface ExtensionRegistrar
      Parameters:
      extension - the extension to register; never null
      source - the source of the extension; never null
      See Also:
      ExtensionRegistrar.registerExtension(Extension, Object)