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.
Since:
5.5
  • Field Details

    • logger

      private static final org.junit.platform.commons.logging.Logger logger
    • DEFAULT_STATELESS_EXTENSIONS

      private static final List<org.junit.jupiter.api.extension.Extension> DEFAULT_STATELESS_EXTENSIONS
    • registeredExtensionTypes

      private final Set<Class<? extends org.junit.jupiter.api.extension.Extension>> registeredExtensionTypes
    • registeredExtensions

      private final List<MutableExtensionRegistry.Entry> registeredExtensions
    • lateInitExtensions

      private final Map<Class<?>, MutableExtensionRegistry.LateInitExtensions> lateInitExtensions
  • Constructor Details

    • MutableExtensionRegistry

      private MutableExtensionRegistry()
    • MutableExtensionRegistry

      private MutableExtensionRegistry(MutableExtensionRegistry parent)
    • MutableExtensionRegistry

      private MutableExtensionRegistry(Set<Class<? extends org.junit.jupiter.api.extension.Extension>> registeredExtensionTypes, List<MutableExtensionRegistry.Entry> registeredExtensions)
  • 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.

      If the "junit.jupiter.execution.timeout.threaddump.enabled" configuration parameter has been set to true, the PreInterruptThreadDumpPrinter will be registered.

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

      private static void registerAutoDetectedExtensions(MutableExtensionRegistry extensionRegistry, JupiterConfiguration configuration)
    • logExcludedExtensions

      private static void logExcludedExtensions(List<Class<? extends org.junit.jupiter.api.extension.Extension>> excludedExtensions)
    • createRegistryFrom

      public static MutableExtensionRegistry createRegistryFrom(MutableExtensionRegistry parentRegistry, Stream<Class<? extends org.junit.jupiter.api.extension.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 org.junit.jupiter.api.extension.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:
    • registerExtension

      public void registerExtension(Class<? extends org.junit.jupiter.api.extension.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
    • isAlreadyRegistered

      private boolean isAlreadyRegistered(Class<? extends org.junit.jupiter.api.extension.Extension> extensionType)
      Determine if the supplied type is already registered in this registry or in a parent registry.
    • registerExtension

      public void registerExtension(org.junit.jupiter.api.extension.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(org.junit.jupiter.api.extension.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:
    • registerUninitializedExtension

      public void registerUninitializedExtension(Class<?> testClass, Field source, Function<Object, ? extends org.junit.jupiter.api.extension.Extension> initializer)
      Description copied from interface: ExtensionRegistrar
      Register an uninitialized extension for the supplied testClass to be initialized using the supplied initializer when an instance of the test class is created.

      Uninitialized extensions are typically registered for fields annotated with @RegisterExtension that cannot be initialized until an instance of the test class is created. Until they are initialized, such extensions are not available for use.

      Specified by:
      registerUninitializedExtension in interface ExtensionRegistrar
      Parameters:
      testClass - the test class for which the extension is registered; never null
      source - the source of the extension; never null
      initializer - the initializer function to be used to create the extension; never null
    • initializeExtensions

      public void initializeExtensions(Class<?> testClass, Object testInstance)
      Description copied from interface: ExtensionRegistrar
      Initialize all registered extensions for the supplied testClass using the supplied testInstance.
      Specified by:
      initializeExtensions in interface ExtensionRegistrar
      Parameters:
      testClass - the test class for which the extensions are initialized; never null
      testInstance - the test instance to be used to initialize the extensions; never null
    • getLateInitExtensions

      private MutableExtensionRegistry.LateInitExtensions getLateInitExtensions(Class<?> testClass)
    • registerDefaultExtension

      private void registerDefaultExtension(org.junit.jupiter.api.extension.Extension extension)
    • registerAutoDetectedExtension

      private void registerAutoDetectedExtension(org.junit.jupiter.api.extension.Extension extension)
    • registerLocalExtension

      private void registerLocalExtension(org.junit.jupiter.api.extension.Extension extension)
    • registerExtension

      private void registerExtension(String category, org.junit.jupiter.api.extension.Extension extension)
    • registerExtension

      private void registerExtension(String category, org.junit.jupiter.api.extension.Extension extension, Object source)
    • buildSourceInfo

      private String buildSourceInfo(Object source)