diff --git a/core/.phpstan-baseline.php b/core/.phpstan-baseline.php index c1ab326df4ee2acd8cfdb7520c3b26e259600c4f..8114207bce70538ac89d1bc5b134e1644c14b81c 100644 --- a/core/.phpstan-baseline.php +++ b/core/.phpstan-baseline.php @@ -326,13 +326,6 @@ 'count' => 1, 'path' => __DIR__ . '/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php', ]; -$ignoreErrors[] = [ - 'message' => '#^Call to deprecated method getFromDriverName\\(\\) of class Drupal\\\\Core\\\\Extension\\\\DatabaseDriverList\\: -in drupal\\:10\\.2\\.0 and is removed from drupal\\:11\\.0\\.0\\. Use - DatabaseDriverList\\:\\:get\\(\\) instead, passing a database driver namespace\\.$#', - 'count' => 1, - 'path' => __DIR__ . '/lib/Drupal/Core/Extension/DatabaseDriverList.php', -]; $ignoreErrors[] = [ 'message' => '#^Variable \\$minor_version might not be defined\\.$#', 'count' => 1, diff --git a/core/lib/Drupal/Core/Extension/DatabaseDriverList.php b/core/lib/Drupal/Core/Extension/DatabaseDriverList.php index 809403b31f8dd9279d8a71f81102b06d67274337..a9af803786e74318d73f83019a55346470b003ad 100644 --- a/core/lib/Drupal/Core/Extension/DatabaseDriverList.php +++ b/core/lib/Drupal/Core/Extension/DatabaseDriverList.php @@ -3,7 +3,6 @@ namespace Drupal\Core\Extension; use Drupal\Core\Cache\CacheBackendInterface; -use Drupal\Core\Extension\Exception\UnknownExtensionException; /** * Provides a list of available database drivers. @@ -132,40 +131,11 @@ public function getName($extension_name) { */ public function get($extension_name) { if (!str_contains($extension_name, "\\")) { - @trigger_error("Passing a database driver name '{$extension_name}' to " . __METHOD__ . '() is deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Pass a database driver namespace instead. See https://www.drupal.org/node/3258175', E_USER_DEPRECATED); - return $this->getFromDriverName($extension_name); + throw new \RuntimeException("Passing a database driver name '{$extension_name}' to " . __METHOD__ . '() is not supported. Pass a database driver namespace instead. See https://www.drupal.org/node/3258175'); } return parent::get($extension_name); } - /** - * Returns the first available driver extension by the driver name. - * - * @param string $driverName - * The database driver name. - * - * @return \Drupal\Core\Extension\DatabaseDriver - * The driver extension. - * - * @throws \Drupal\Core\Extension\Exception\UnknownExtensionException - * When no matching driver extension can be found. - * - * @deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Use - * DatabaseDriverList::get() instead, passing a database driver namespace. - * - * @see https://www.drupal.org/node/3258175 - */ - public function getFromDriverName(string $driverName): DatabaseDriver { - @trigger_error(__METHOD__ . '() is deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Use DatabaseDriverList::get() instead, passing a database driver namespace. See https://www.drupal.org/node/3258175', E_USER_DEPRECATED); - foreach ($this->getList() as $extensionName => $driver) { - $namespaceParts = explode('\\', $extensionName); - if (end($namespaceParts) === $driverName) { - return parent::get($extensionName); - } - } - throw new UnknownExtensionException("Could not find a database driver named '{$driverName}' in any module"); - } - /** * {@inheritdoc} */ diff --git a/core/lib/Drupal/Core/Extension/DatabaseDriverUninstallValidator.php b/core/lib/Drupal/Core/Extension/DatabaseDriverUninstallValidator.php index ed741de3c4dd17ce6b0d942594090760a7ae8ae2..672eafd4336e49e11deea1f957c057251db439b6 100644 --- a/core/lib/Drupal/Core/Extension/DatabaseDriverUninstallValidator.php +++ b/core/lib/Drupal/Core/Extension/DatabaseDriverUninstallValidator.php @@ -50,8 +50,10 @@ public function __construct(TranslationInterface $string_translation, ModuleExte public function validate($module) { $reasons = []; + // This is here to allow InstallerNonDefaultDatabaseDriverTest execute, + // it needs to get a new connection than the one passed in construction. // @todo Remove the next line of code in - // https://www.drupal.org/project/drupal/issues/3129043. + // https://www.drupal.org/project/drupal/issues/3433034. $this->connection = Database::getConnection(); // When the database driver is provided by a module, then that module diff --git a/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php b/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php deleted file mode 100644 index f4964c94c38c2c665f3ecf51404a7008c19a6cb6..0000000000000000000000000000000000000000 --- a/core/lib/Drupal/Core/Extension/Discovery/RecursiveExtensionFilterIterator.php +++ /dev/null @@ -1,170 +0,0 @@ -<?php - -namespace Drupal\Core\Extension\Discovery; - -/** - * Filters a RecursiveDirectoryIterator to discover extensions. - * - * To ensure the best possible performance for extension discovery, this - * filter implementation hard-codes a range of assumptions about directories - * in which Drupal extensions may appear and in which not. Every unnecessary - * subdirectory tree recursion is avoided. - * - * The list of globally ignored directory names is defined in the - * RecursiveExtensionFilterIterator::$skippedFolders property. - * - * In addition, all 'config' directories are skipped, unless the directory path - * ends with 'modules/config', so as to still find the config module provided by - * Drupal core and still allow that module to be overridden with a custom config - * module. - * - * Lastly, ExtensionDiscovery instructs this filter to additionally skip all - * 'tests' directories at regular runtime, since just with Drupal core only, the - * discovery process yields 4x more extensions when tests are not ignored. - * - * @see ExtensionDiscovery::scan() - * @see ExtensionDiscovery::scanDirectory() - * - * @deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Use - * \Drupal\Core\Extension\Discovery\RecursiveExtensionFilterCallback instead. - * - * @see https://www.drupal.org/node/3343023 - */ -class RecursiveExtensionFilterIterator extends \RecursiveFilterIterator { - - /** - * List of base extension type directory names to scan. - * - * Only these directory names are considered when starting a filesystem - * recursion in a search path. - * - * @var array - */ - protected $allowedExtensionTypes = [ - 'profiles', - 'modules', - 'themes', - ]; - - /** - * List of directory names to skip when recursing. - * - * These directories are globally ignored in the recursive filesystem scan; - * i.e., extensions (of all types) are not able to use any of these names, - * because their directory names will be skipped. - * - * @var array - */ - protected $skippedFolders = [ - // Object-oriented code subdirectories. - 'src', - 'lib', - 'vendor', - // Front-end. - 'assets', - 'css', - 'files', - 'images', - 'js', - 'misc', - 'templates', - // Legacy subdirectories. - 'includes', - // Test subdirectories. - 'fixtures', - // @todo ./tests/Drupal should be ./tests/src/Drupal - 'Drupal', - ]; - - /** - * Whether to include test directories when recursing. - * - * @var bool - */ - protected $acceptTests = FALSE; - - /** - * Construct a RecursiveExtensionFilterIterator. - * - * @param \RecursiveIterator $iterator - * The iterator to filter. - * @param string[] $skipped_folders - * (optional) Add to the list of directories that should be filtered out - * during the iteration. - */ - public function __construct(\RecursiveIterator $iterator, array $skipped_folders = []) { - @trigger_error('The ' . __NAMESPACE__ . '\RecursiveExtensionFilterIterator is deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Use \Drupal\Core\Extension\Discovery\RecursiveExtensionFilterCallback instead. See https://www.drupal.org/node/3343023', E_USER_DEPRECATED); - parent::__construct($iterator); - $this->skippedFolders = array_merge($this->skippedFolders, $skipped_folders); - } - - /** - * Controls whether test directories will be scanned. - * - * @param bool $flag - * Pass FALSE to skip all test directories in the discovery. If TRUE, - * extensions in test directories will be discovered and only the global - * directory skip list in RecursiveExtensionFilterIterator::$skippedFolders - * is applied. - */ - public function acceptTests($flag = FALSE) { - $this->acceptTests = $flag; - if (!$this->acceptTests) { - $this->skippedFolders[] = 'tests'; - } - } - - /** - * {@inheritdoc} - */ - #[\ReturnTypeWillChange] - public function getChildren() { - $filter = parent::getChildren(); - // Pass on the skipped folders list. - $filter->skippedFolders = $this->skippedFolders; - // Pass the $acceptTests flag forward to child iterators. - $filter->acceptTests($this->acceptTests); - return $filter; - } - - /** - * {@inheritdoc} - */ - #[\ReturnTypeWillChange] - public function accept() { - $name = $this->current()->getFilename(); - // FilesystemIterator::SKIP_DOTS only skips '.' and '..', but not hidden - // directories (like '.git'). - if ($name[0] == '.') { - return FALSE; - } - if ($this->current()->isDir()) { - // If this is a subdirectory of a base search path, only recurse into the - // fixed list of expected extension type directory names. Required for - // scanning the top-level/root directory; without this condition, we would - // recurse into the whole filesystem tree that possibly contains other - // files aside from Drupal. - if ($this->current()->getSubPath() == '') { - return in_array($name, $this->allowedExtensionTypes, TRUE); - } - // 'config' directories are special-cased here, because every extension - // contains one. However, those default configuration directories cannot - // contain extensions. The directory name cannot be globally skipped, - // because core happens to have a directory of an actual module that is - // named 'config'. By explicitly testing for that case, we can skip all - // other config directories, and at the same time, still allow the core - // config module to be overridden/replaced in a profile/site directory - // (whereas it must be located directly in a modules directory). - if ($name == 'config') { - return str_ends_with($this->current()->getPathname(), 'modules/config'); - } - // Accept the directory unless the folder is skipped. - return !in_array($name, $this->skippedFolders, TRUE); - } - else { - // Only accept extension info files. - return str_ends_with($name, '.info.yml'); - } - } - -} diff --git a/core/lib/Drupal/Core/Extension/Extension.php b/core/lib/Drupal/Core/Extension/Extension.php index 3ef96ffbd3cd8b648958411e0ec9fc16c13058dc..f6f1636804974c9f21858efa37e97a448693bef8 100644 --- a/core/lib/Drupal/Core/Extension/Extension.php +++ b/core/lib/Drupal/Core/Extension/Extension.php @@ -156,21 +156,6 @@ public function load() { return FALSE; } - /** - * Re-routes method calls to SplFileInfo. - * - * Offers all SplFileInfo methods to consumers; e.g., $extension->getMTime(). - * - * @deprecated in drupal:10.1.0 and is removed from drupal:11.0.0. Use - * \Drupal\Core\Extension\Extension::getFileInfo() instead. - * - * @see https://www.drupal.org/node/2959989 - */ - public function __call($method, array $args) { - @trigger_error(__METHOD__ . "('$method')" . ' is deprecated in drupal:10.1.0 and is removed from drupal:11.0.0. Use \Drupal\Core\Extension\Extension::getFileInfo() instead. See https://www.drupal.org/node/3322608', E_USER_DEPRECATED); - return call_user_func_array([$this->getFileInfo(), $method], $args); - } - /** * Returns SplFileInfo instance for the extension's info file. * diff --git a/core/lib/Drupal/Core/Extension/InfoParser.php b/core/lib/Drupal/Core/Extension/InfoParser.php index 542f437a19a808c4c1de0e3741687ca0c55dedcc..e44ef41e77371d3ecd87831281a08500ce987caa 100644 --- a/core/lib/Drupal/Core/Extension/InfoParser.php +++ b/core/lib/Drupal/Core/Extension/InfoParser.php @@ -21,10 +21,10 @@ class InfoParser extends InfoParserDynamic { /** * InfoParser constructor. * - * @param string|null $app_root + * @param string $app_root * The root directory of the Drupal installation. */ - public function __construct(string $app_root = NULL) { + public function __construct(string $app_root) { parent::__construct($app_root); if (FileCacheFactory::getPrefix() !== NULL) { $this->fileCache = FileCacheFactory::get('info_parser'); diff --git a/core/lib/Drupal/Core/Extension/InfoParserDynamic.php b/core/lib/Drupal/Core/Extension/InfoParserDynamic.php index fc6e8a56265eb1cda9cd1cb4605892d917a17ad3..00540bc618d8172d53ca020e42a3f1301b29acd4 100644 --- a/core/lib/Drupal/Core/Extension/InfoParserDynamic.php +++ b/core/lib/Drupal/Core/Extension/InfoParserDynamic.php @@ -11,25 +11,13 @@ */ class InfoParserDynamic implements InfoParserInterface { - /** - * The root directory of the Drupal installation. - * - * @var string - */ - protected $root; - /** * InfoParserDynamic constructor. * - * @param string|null $app_root + * @param string $root * The root directory of the Drupal installation. */ - public function __construct(string $app_root = NULL) { - if ($app_root === NULL) { - @trigger_error('Calling InfoParserDynamic::__construct() without the $app_root argument is deprecated in drupal:10.1.0 and will be required in drupal:11.0.0. See https://www.drupal.org/node/3293709', E_USER_DEPRECATED); - $app_root = \Drupal::hasService('kernel') ? \Drupal::root() : DRUPAL_ROOT; - } - $this->root = $app_root; + public function __construct(protected string $root) { } /** diff --git a/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php index 7323af67e9188f370a5d909fc608a960451bf065..def9f0236afeaab1e35dc0ef36c0767b04060554 100644 --- a/core/lib/Drupal/Core/Extension/ModuleInstaller.php +++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php @@ -89,16 +89,12 @@ class ModuleInstaller implements ModuleInstallerInterface { * @see \Drupal\Core\DrupalKernel * @see \Drupal\Core\CoreServiceProvider */ - public function __construct($root, ModuleHandlerInterface $module_handler, DrupalKernelInterface $kernel, Connection $connection, UpdateHookRegistry $update_registry, protected ?LoggerInterface $logger = NULL) { + public function __construct($root, ModuleHandlerInterface $module_handler, DrupalKernelInterface $kernel, Connection $connection, UpdateHookRegistry $update_registry, protected LoggerInterface $logger) { $this->root = $root; $this->moduleHandler = $module_handler; $this->kernel = $kernel; $this->connection = $connection; $this->updateRegistry = $update_registry; - if ($this->logger === NULL) { - @trigger_error('Calling ' . __METHOD__ . ' without the $logger argument is deprecated in drupal:10.1.0 and it will be required in drupal:11.0.0. See https://www.drupal.org/node/2932520', E_USER_DEPRECATED); - $this->logger = \Drupal::service('logger.channel.system'); - } } /** diff --git a/core/lib/Drupal/Core/Extension/ThemeInstaller.php b/core/lib/Drupal/Core/Extension/ThemeInstaller.php index 99cd65c43964332428aff6d37340a5c0fc67967c..364d672c12fc49175051754a652067446eef51f5 100644 --- a/core/lib/Drupal/Core/Extension/ThemeInstaller.php +++ b/core/lib/Drupal/Core/Extension/ThemeInstaller.php @@ -105,7 +105,7 @@ class ThemeInstaller implements ThemeInstallerInterface { * @param \Drupal\Core\Extension\ThemeExtensionList|null $themeExtensionList * The theme extension list. */ - public function __construct(ThemeHandlerInterface $theme_handler, ConfigFactoryInterface $config_factory, ConfigInstallerInterface $config_installer, ModuleHandlerInterface $module_handler, ConfigManagerInterface $config_manager, AssetCollectionOptimizerInterface $css_collection_optimizer, RouteBuilderInterface $route_builder, LoggerInterface $logger, StateInterface $state, ModuleExtensionList $module_extension_list, protected ?Registry $themeRegistry = NULL, protected ?ThemeExtensionList $themeExtensionList = NULL) { + public function __construct(ThemeHandlerInterface $theme_handler, ConfigFactoryInterface $config_factory, ConfigInstallerInterface $config_installer, ModuleHandlerInterface $module_handler, ConfigManagerInterface $config_manager, AssetCollectionOptimizerInterface $css_collection_optimizer, RouteBuilderInterface $route_builder, LoggerInterface $logger, StateInterface $state, ModuleExtensionList $module_extension_list, protected Registry $themeRegistry, protected ThemeExtensionList $themeExtensionList) { $this->themeHandler = $theme_handler; $this->configFactory = $config_factory; $this->configInstaller = $config_installer; @@ -116,15 +116,6 @@ public function __construct(ThemeHandlerInterface $theme_handler, ConfigFactoryI $this->logger = $logger; $this->state = $state; $this->moduleExtensionList = $module_extension_list; - if ($this->themeRegistry === NULL) { - @trigger_error('Calling ' . __METHOD__ . '() without the $themeRegistry argument is deprecated in drupal:10.1.0 and will be required in drupal:11.0.0. See https://www.drupal.org/node/3350906', E_USER_DEPRECATED); - $this->themeRegistry = \Drupal::service('theme.registry'); - } - if ($this->themeExtensionList === NULL) { - @trigger_error('Calling ' . __METHOD__ . '() without the $themeExtensionList argument is deprecated in drupal:10.3.0 and will be required in drupal:11.0.0. See https://www.drupal.org/node/3413308', E_USER_DEPRECATED); - $this->themeExtensionList = \Drupal::service('extension.list.theme'); - } - } /** diff --git a/core/tests/Drupal/Tests/Core/Extension/DatabaseDriverListTest.php b/core/tests/Drupal/Tests/Core/Extension/DatabaseDriverListTest.php index 4af0786a1ba1efb61ae95dbae4af54256468e712..3d46565e042727bb1f7ca7f4b432bbf1ddc79362 100644 --- a/core/tests/Drupal/Tests/Core/Extension/DatabaseDriverListTest.php +++ b/core/tests/Drupal/Tests/Core/Extension/DatabaseDriverListTest.php @@ -27,35 +27,6 @@ public function testGet(string $driverName, string $moduleName, string $driverEx $this->assertSame($driverName, $driverExtension->getDriverName()); } - /** - * @covers ::get - * @group legacy - * - * @dataProvider providerDatabaseDrivers - */ - public function testLegacyGet(string $driverName, string $moduleName, string $driverExtensionName): void { - $this->expectDeprecation("Passing a database driver name '{$driverName}' to Drupal\\Core\\Extension\\DatabaseDriverList::get() is deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Pass a database driver namespace instead. See https://www.drupal.org/node/3258175"); - $this->expectDeprecation('Drupal\\Core\\Extension\\DatabaseDriverList::getFromDriverName() is deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Use DatabaseDriverList::get() instead, passing a database driver namespace. See https://www.drupal.org/node/3258175'); - $driverExtension = Database::getDriverList()->includeTestDrivers(TRUE)->get($driverName); - $this->assertSame($driverExtensionName, $driverExtension->getName()); - $this->assertSame($moduleName, $driverExtension->getModule()->getName()); - $this->assertSame($driverName, $driverExtension->getDriverName()); - } - - /** - * @covers ::getFromDriverName - * @group legacy - * - * @dataProvider providerDatabaseDrivers - */ - public function testLegacyGetFromDriverName(string $driverName, string $moduleName, string $driverExtensionName): void { - $this->expectDeprecation('Drupal\\Core\\Extension\\DatabaseDriverList::getFromDriverName() is deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Use DatabaseDriverList::get() instead, passing a database driver namespace. See https://www.drupal.org/node/3258175'); - $driverExtension = Database::getDriverList()->includeTestDrivers(TRUE)->getFromDriverName($driverName); - $this->assertSame($driverExtensionName, $driverExtension->getName()); - $this->assertSame($moduleName, $driverExtension->getModule()->getName()); - $this->assertSame($driverName, $driverExtension->getDriverName()); - } - /** * Data provider for testLegacyGetFromDriverName(). */ diff --git a/core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php b/core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php index 45c286c53253a5d650e6ded405344d687021f41d..75d14c6c93866929181bf60a965315ca0bd85ea7 100644 --- a/core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php +++ b/core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php @@ -5,7 +5,6 @@ namespace Drupal\Tests\Core\Extension; use Drupal\Component\FileCache\FileCacheFactory; -use Drupal\Core\Extension\Discovery\RecursiveExtensionFilterIterator; use Drupal\Core\Extension\Extension; use Drupal\Core\Extension\ExtensionDiscovery; use Drupal\Tests\UnitTestCase; @@ -206,16 +205,4 @@ protected function addFileToFilesystemStructure(array &$filesystem_structure, ar } } - /** - * Tests deprecated iterator. - * - * @covers \Drupal\Core\Extension\Discovery\RecursiveExtensionFilterIterator - * @group legacy - */ - public function testDeprecatedIterator(): void { - $this->expectDeprecation('The Drupal\Core\Extension\Discovery\RecursiveExtensionFilterIterator is deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Use \Drupal\Core\Extension\Discovery\RecursiveExtensionFilterCallback instead. See https://www.drupal.org/node/3343023'); - $recursive_extension_filter_iterator = new RecursiveExtensionFilterIterator(new \RecursiveDirectoryIterator('.')); - $this->assertInstanceOf(RecursiveExtensionFilterIterator::class, $recursive_extension_filter_iterator); - } - } diff --git a/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php b/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php index 9c4bae38a5885c862c53cf76e7d83a952e0c5aee..4709d288b19bbfb90aa724ca2f6acedf59d71955 100644 --- a/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php +++ b/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php @@ -8,7 +8,6 @@ use Drupal\Core\Extension\ExtensionLifecycle; use Drupal\Core\Extension\InfoParser; -use Drupal\Core\Extension\InfoParserDynamic; use Drupal\Core\Extension\InfoParserException; use Drupal\Tests\UnitTestCase; use org\bovigo\vfs\vfsStream; @@ -538,12 +537,4 @@ public static function providerLifecycleLink() { ]; } - /** - * @group legacy - */ - public function testDeprecation(): void { - $this->expectDeprecation('Calling InfoParserDynamic::__construct() without the $app_root argument is deprecated in drupal:10.1.0 and will be required in drupal:11.0.0. See https://www.drupal.org/node/3293709'); - new InfoParserDynamic(); - } - } diff --git a/core/tests/Drupal/Tests/Core/Extension/LegacyExtensionTest.php b/core/tests/Drupal/Tests/Core/Extension/LegacyExtensionTest.php deleted file mode 100644 index 22c4f3f2960dd0877db6c85dc09f598fc2785ef9..0000000000000000000000000000000000000000 --- a/core/tests/Drupal/Tests/Core/Extension/LegacyExtensionTest.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -declare(strict_types=1); - -namespace Drupal\Tests\Core\Extension; - -use Drupal\Core\Extension\Extension; -use Drupal\Tests\UnitTestCase; - -/** - * @coversDefaultClass \Drupal\Core\Extension\Extension - * @group Extension - * @group legacy - */ -class LegacyExtensionTest extends UnitTestCase { - - /** - * @covers ::__call - */ - public function testDeprecatedCall() { - $extension = new Extension($this->root, 'theme', 'core/themes/stark/stark.info.yml', 'stark.theme'); - $file = $extension->getFileInfo(); - $this->expectDeprecation('Drupal\Core\Extension\Extension::__call(\'getCTime\') is deprecated in drupal:10.1.0 and is removed from drupal:11.0.0. Use \Drupal\Core\Extension\Extension::getFileInfo() instead. See https://www.drupal.org/node/3322608'); - $this->assertSame($file->getCTime(), $extension->getCTime()); - $this->expectDeprecation('Drupal\Core\Extension\Extension::__call(\'getMTime\') is deprecated in drupal:10.1.0 and is removed from drupal:11.0.0. Use \Drupal\Core\Extension\Extension::getFileInfo() instead. See https://www.drupal.org/node/3322608'); - $this->assertSame($file->getMTime(), $extension->getMTime()); - } - -}