From 80d8cc15565d4d381b230b4271dc72b200808373 Mon Sep 17 00:00:00 2001 From: Lisa Ridley <l.ridley@vardot.com> Date: Mon, 30 Dec 2024 10:38:04 -0500 Subject: [PATCH] Issue #3496505: Fixing more static analysis issues, and ignoring those regarding deprecations, which will be removed as we refactor. --- src/Asset/AssetDumper.php | 21 +++++++++- src/Asset/CssCollectionOptimizer.php | 5 +++ src/Asset/CssCollectionOptimizerLazy.php | 42 ++++++++++++++++++- src/Asset/JsCollectionOptimizer.php | 8 ++++ src/Asset/JsCollectionOptimizerLazy.php | 41 +++++++++++++++++- .../src/Unit/FlysystemServiceProviderTest.php | 3 ++ 6 files changed, 117 insertions(+), 3 deletions(-) diff --git a/src/Asset/AssetDumper.php b/src/Asset/AssetDumper.php index 888bcc9..9cda4d5 100644 --- a/src/Asset/AssetDumper.php +++ b/src/Asset/AssetDumper.php @@ -4,6 +4,7 @@ namespace Drupal\flysystem\Asset; use Drupal\Component\Utility\Crypt; use Drupal\Core\Asset\AssetDumper as DrupalAssetDumper; +use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\File\FileSystemInterface; use Drupal\Core\File\FileExists; @@ -16,6 +17,24 @@ class AssetDumper extends DrupalAssetDumper { use SchemeExtensionTrait; + /** + * Drupal Config factory service. + * + * @var \Drupal\Core\Config\ConfigFactoryInterface + */ + protected $configFactory; + /** + * AssetDumper constructor. + * + * @param \Drupal\Core\File\FileSystemInterface $file_system + * The file handler. + * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory + * Drupal Config factory service. + */ + public function __construct(FileSystemInterface $file_system, ConfigFactoryInterface $config_factory) { + $this->fileSystem = $file_system; + $this->configFactory = $config_factory; + } /** * {@inheritdoc} */ @@ -39,7 +58,7 @@ class AssetDumper extends DrupalAssetDumper { // file) in generating the file anyway. Sites on servers where rewrite rules // aren't working can set css.gzip to FALSE in order to skip // generating a file that won't be used. - if (extension_loaded('zlib') && \Drupal::config('system.performance')->get($file_extension . '.gzip')) { + if (extension_loaded('zlib') && $this->configFactory->get('system.performance')->get($file_extension . '.gzip')) { if (!file_exists($uri . '.gz') && !$this->fileSystem->saveData(gzencode($data, 9, FORCE_GZIP), $uri . '.gz', FileExists::Replace)) { return FALSE; } diff --git a/src/Asset/CssCollectionOptimizer.php b/src/Asset/CssCollectionOptimizer.php index 4ab1679..9fee802 100644 --- a/src/Asset/CssCollectionOptimizer.php +++ b/src/Asset/CssCollectionOptimizer.php @@ -7,6 +7,8 @@ use Drupal\Core\Logger\LoggerChannelTrait; /** * Optimizes CSS assets. + * + * @phpstan-ignore class.extendsDeprecatedClass */ class CssCollectionOptimizer extends DrupalCssCollectionOptimizer { @@ -22,12 +24,15 @@ class CssCollectionOptimizer extends DrupalCssCollectionOptimizer { $file_system = $this->fileSystem; $delete_stale = static function ($uri) use ($file_system) { // Default stale file threshold is 30 days (2592000 seconds). + // @phpstan-ignore-next-line $stale_file_threshold = \Drupal::config('system.performance')->get('stale_file_threshold') ?? 2592000; + // @phpstan-ignore-next-line if (\Drupal::time()->getRequestTime() - filemtime($uri) > $stale_file_threshold) { try { $file_system->delete($uri); } catch (\Exception $e) { + // @phpstan-ignore-next-line \Drupal::service('logger.factory')->get('flysystem')->error($e->getMessage()); } } diff --git a/src/Asset/CssCollectionOptimizerLazy.php b/src/Asset/CssCollectionOptimizerLazy.php index 2e1bfff..5864300 100644 --- a/src/Asset/CssCollectionOptimizerLazy.php +++ b/src/Asset/CssCollectionOptimizerLazy.php @@ -4,6 +4,8 @@ namespace Drupal\flysystem\Asset; use Drupal\Core\Asset\CssCollectionOptimizerLazy as DrupalCssCollectionOptimizerLazy; use Drupal\Core\File\Exception\FileException; +use Drupal\Core\Logger\LoggerChannelFactoryInterface; + /** * Optimizes CSS assets. @@ -12,6 +14,44 @@ class CssCollectionOptimizerLazy extends DrupalCssCollectionOptimizerLazy { use SchemeExtensionTrait; + /** + * Constructs a CssCollectionOptimizerLazy. + * + * @param \Drupal\Core\Asset\AssetCollectionGrouperInterface $grouper + * The grouper for CSS assets. + * @param \Drupal\Core\Asset\AssetOptimizerInterface $optimizer + * The asset optimizer. + * @param \Drupal\Core\Theme\ThemeManagerInterface $themeManager + * The theme manager. + * @param \Drupal\Core\Asset\LibraryDependencyResolverInterface $dependencyResolver + * The library dependency resolver. + * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack + * The request stack. + * @param \Drupal\Core\File\FileSystemInterface $fileSystem + * The file system service. + * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory + * The config factory. + * @param \Drupal\Core\File\FileUrlGeneratorInterface $fileUrlGenerator + * The file URL generator. + * @param \Drupal\Component\Datetime\TimeInterface $time + * The time service. + * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager + * The language manager. + */ + public function __construct( + protected readonly AssetCollectionGrouperInterface $grouper, + protected readonly AssetOptimizerInterface $optimizer, + protected readonly ThemeManagerInterface $themeManager, + protected readonly LibraryDependencyResolverInterface $dependencyResolver, + protected readonly RequestStack $requestStack, + protected readonly FileSystemInterface $fileSystem, + protected readonly ConfigFactoryInterface $configFactory, + protected readonly FileUrlGeneratorInterface $fileUrlGenerator, + protected readonly TimeInterface $time, + protected readonly LanguageManagerInterface $languageManager, + protected readonly LoggerChannelFactoryInterface $loggerFactory, + ) {} + /** * {@inheritdoc} */ @@ -20,7 +60,7 @@ class CssCollectionOptimizerLazy extends DrupalCssCollectionOptimizerLazy { $this->fileSystem->deleteRecursive($this->getSchemeForExtension('css') . '://css'); } catch (FileException $fileException) { - \Drupal::logger('flysystem')->error($fileException->getMessage()); + $this->loggerFactory->get('flysystem')->error($fileException->getMessage()); } } diff --git a/src/Asset/JsCollectionOptimizer.php b/src/Asset/JsCollectionOptimizer.php index ca61254..82d94b9 100644 --- a/src/Asset/JsCollectionOptimizer.php +++ b/src/Asset/JsCollectionOptimizer.php @@ -7,6 +7,8 @@ use Drupal\Core\Logger\LoggerChannelTrait; /** * Optimizes JavaScript assets. + * + * @phpstan-ignore class.extendsDeprecatedClass */ class JsCollectionOptimizer extends DrupalJsCollectionOptimizer { @@ -22,12 +24,18 @@ class JsCollectionOptimizer extends DrupalJsCollectionOptimizer { $file_system = $this->fileSystem; $delete_stale = static function ($uri) use ($file_system) { // Default stale file threshold is 30 days (2592000 seconds). + // @phpstan-ignore-next-line $stale_file_threshold = \Drupal::config('system.performance')->get('stale_file_threshold') ?? 2592000; + // @phpstan-ignore-next-line if (\Drupal::time()->getRequestTime() - filemtime($uri) > $stale_file_threshold) { try { $file_system->delete($uri); } + catch (\Exception $fileException) { + $this->loggerFactory->get('flysystem')->error($fileException->getMessage()); + } catch (\Exception $e) { + // @phpstan-ignore-next-line \Drupal::service('logger.factory')->get('flysystem')->error($e->getMessage()); } } diff --git a/src/Asset/JsCollectionOptimizerLazy.php b/src/Asset/JsCollectionOptimizerLazy.php index 385e626..b53dd81 100644 --- a/src/Asset/JsCollectionOptimizerLazy.php +++ b/src/Asset/JsCollectionOptimizerLazy.php @@ -4,6 +4,7 @@ namespace Drupal\flysystem\Asset; use Drupal\Core\Asset\JsCollectionOptimizerLazy as DrupalJsCollectionOptimizerLazy; use Drupal\Core\File\Exception\FileException; +use Drupal\Core\Logger\LoggerChannelFactoryInterface; /** * Optimizes JavaScript assets. @@ -12,6 +13,44 @@ class JsCollectionOptimizerLazy extends DrupalJsCollectionOptimizerLazy { use SchemeExtensionTrait; + /** + * Constructs a JsCollectionOptimizerLazy. + * + * @param \Drupal\Core\Asset\AssetCollectionGrouperInterface $grouper + * The grouper for JS assets. + * @param \Drupal\Core\Asset\AssetOptimizerInterface $optimizer + * The asset optimizer. + * @param \Drupal\Core\Theme\ThemeManagerInterface $themeManager + * The theme manager. + * @param \Drupal\Core\Asset\LibraryDependencyResolverInterface $dependencyResolver + * The library dependency resolver. + * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack + * The request stack. + * @param \Drupal\Core\File\FileSystemInterface $fileSystem + * The file system service. + * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory + * The config factory. + * @param \Drupal\Core\File\FileUrlGeneratorInterface $fileUrlGenerator + * The file URL generator. + * @param \Drupal\Component\Datetime\TimeInterface $time + * The time service. + * @param \Drupal\Core\Language\LanguageManagerInterface $languageManager + * The language manager. + */ + public function __construct( + protected readonly AssetCollectionGrouperInterface $grouper, + protected readonly AssetOptimizerInterface $optimizer, + protected readonly ThemeManagerInterface $themeManager, + protected readonly LibraryDependencyResolverInterface $dependencyResolver, + protected readonly RequestStack $requestStack, + protected readonly FileSystemInterface $fileSystem, + protected readonly ConfigFactoryInterface $configFactory, + protected readonly FileUrlGeneratorInterface $fileUrlGenerator, + protected readonly TimeInterface $time, + protected readonly LanguageManagerInterface $languageManager, + protected readonly LoggerChannelFactoryInterface $loggerFactory, + ) {} + /** * {@inheritdoc} */ @@ -20,7 +59,7 @@ class JsCollectionOptimizerLazy extends DrupalJsCollectionOptimizerLazy { $this->fileSystem->deleteRecursive($this->getSchemeForExtension('js') . '://js'); } catch (FileException $fileException) { - \Drupal::logger('flysystem')->error($fileException->getMessage()); + $this->loggerFactory->get('flysystem')->error($fileException->getMessage()); } } diff --git a/tests/src/Unit/FlysystemServiceProviderTest.php b/tests/src/Unit/FlysystemServiceProviderTest.php index 02a16a0..8772044 100644 --- a/tests/src/Unit/FlysystemServiceProviderTest.php +++ b/tests/src/Unit/FlysystemServiceProviderTest.php @@ -97,9 +97,11 @@ class FlysystemServiceProviderTest extends UnitTestCase { (new FlysystemServiceProvider())->register($this->container); $this->assertSame(AssetDumper::class, $this->container->getDefinition('asset.js.dumper')->getClass()); + // @phpstan-ignore classConstant.deprecatedClass $this->container->register('asset.js.collection_optimizer', JsCollectionOptimizer::class); (new FlysystemServiceProvider())->register($this->container); $this->assertSame(AssetDumper::class, $this->container->getDefinition('asset.js.dumper')->getClass()); + // @phpstan-ignore classConstant.deprecatedClass $this->assertSame(JsCollectionOptimizer::class, $this->container->getDefinition('asset.js.collection_optimizer')->getClass()); // A successful swap. @@ -122,6 +124,7 @@ class FlysystemServiceProviderTest extends UnitTestCase { public function testSwappingCssServices() { // Test swapping the asset dumper. $this->container->register('asset.css.dumper', AssetDumper::class); + // @phpstan-ignore classConstant.deprecatedClass $this->container->register('asset.css.collection_optimizer', CssCollectionOptimizer::class); $this->container->register('asset.css.optimizer', CssOptimizer::class); -- GitLab