diff --git a/src/Plugin/ConfigCollector.php b/src/Plugin/ConfigCollector.php index 8fca9849d2f07e6fd5ec8f7855ca6bba5e4f8518..4c8276815a64889a889596471cb2f371947490e5 100644 --- a/src/Plugin/ConfigCollector.php +++ b/src/Plugin/ConfigCollector.php @@ -57,7 +57,7 @@ class ConfigCollector implements ConfigCollectorInterface { /** * The extension path resolver. * - * @var \Drupal\Core\Extension\ExtensionPathResolver + * @var \Drupal\Core\Extension\ExtensionPathResolver|null */ protected $extensionPathResolver; @@ -83,7 +83,7 @@ class ConfigCollector implements ConfigCollectorInterface { * The configuration provider manager. * @param string $install_profile * The current installation profile. - * @param \Drupal\Core\Extension\ExtensionPathResolver $extension_path_resolver + * @param \Drupal\Core\Extension\ExtensionPathResolver|null $extension_path_resolver * The extension path resolver. */ public function __construct( @@ -93,7 +93,7 @@ class ConfigCollector implements ConfigCollectorInterface { StorageInterface $provider_storage, ConfigProviderManager $config_provider_manager, $install_profile, - ExtensionPathResolver $extension_path_resolver, + ?ExtensionPathResolver $extension_path_resolver = NULL, ) { $this->configFactory = $config_factory; $this->activeStorage = $active_storage; @@ -101,10 +101,27 @@ class ConfigCollector implements ConfigCollectorInterface { $this->providerStorage = $provider_storage; $this->configProviderManager = $config_provider_manager; $this->installProfile = $install_profile; + if (!$extension_path_resolver instanceof ExtensionPathResolver) { + @trigger_error('Calling ConfigCollector::__construct() without the $extension_path_resolver argument is deprecated in config_provider:3.0.0-alpha2 and it will be required in config_provider:3.1.0. See https://www.drupal.org/project/config_provider/issues/3511302', E_USER_DEPRECATED); + } $this->extensionPathResolver = $extension_path_resolver; $this->configProviders = []; } + /** + * Returns the extension path resolver. + * + * @return \Drupal\Core\Extension\ExtensionPathResolver + * The extension path resolver. + */ + protected function extensionPathResolver(): ExtensionPathResolver { + if ($this->extensionPathResolver instanceof ExtensionPathResolver) { + return $this->extensionPathResolver; + } + // @phpstan-ignore-next-line + return \Drupal::service('extension.path.resolver'); + } + /** * {@inheritdoc} */ @@ -151,7 +168,7 @@ class ConfigCollector implements ConfigCollectorInterface { $instance->setConfigManager($this->configManager); $instance->setProviderStorage($this->providerStorage); $instance->setInstallProfile($this->installProfile); - $instance->setExtensionPathResolver($this->extensionPathResolver); + $instance->setExtensionPathResolver($this->extensionPathResolver()); $this->configProviders[$id] = $instance; } } diff --git a/tests/src/Kernel/ConfigCollectorTest.php b/tests/src/Kernel/ConfigCollectorTest.php index beb9963e0f034272c2399d34f542fb4fcb475399..bfc36a0b909302ffd6a3a36947918e95afbfb432 100644 --- a/tests/src/Kernel/ConfigCollectorTest.php +++ b/tests/src/Kernel/ConfigCollectorTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\config_provider\Kernel; use Drupal\KernelTests\KernelTestBase; +use Drupal\config_provider\Plugin\ConfigCollector; /** * Test description. @@ -37,4 +38,25 @@ class ConfigCollectorTest extends KernelTestBase { $this->assertFalse($foo['bar']); } + /** + * Tests ConfigCollector constructor deprecation error. + * + * Verifies that instantiating a ConfigCollector object without the + * extension_path_resolver argument triggers the expected deprecation error. + * + * @group legacy + */ + public function testConstructorDeprecation() { + $this->expectDeprecation('Calling ConfigCollector::__construct() without the $extension_path_resolver argument is deprecated in config_provider:3.0.0-alpha2 and it will be required in config_provider:3.1.0. See https://www.drupal.org/project/config_provider/issues/3511302'); + $collector = new ConfigCollector( + $this->container->get('config.factory'), + $this->container->get('config.storage'), + $this->container->get('config.manager'), + $this->container->get('config_provider.storage'), + $this->container->get('plugin.manager.config_provider.processor'), + $this->container->getParameter('install_profile'), + ); + $this->assertIsObject($collector); + } + }