From 6e2f50ae2196486326742772d220bd36cad18bd4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20B=C3=BCrk?= <stefan@buerk.tech>
Date: Fri, 28 Jun 2024 13:34:26 +0200
Subject: [PATCH] [TASK] Avoid implicitly nullable class method parameter in
 `EXT:extensionmanager`
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

With PHP 8.4 marking method parameter implicitly nullable
is deprecated and will emit a `E_DEPRECATED` warning. One
recommended way to resolve this, is making it explicitly
nullable using the `?` nullable operator or adding a null
tyype to an union type definition. [1]

This prepares the way towards PHP 8.4 compatibility.

[1] https://php.watch/versions/8.4/implicitly-marking-parameter-type-nullable-deprecated

Resolves: #104247
Releases: main, 12.4, 11.5
Change-Id: I71d8f59eaba6dd22b00f8eb7400f2b49d748e430
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/84992
Tested-by: core-ci <typo3@b13.com>
Tested-by: Stefan Bürk <stefan@buerk.tech>
Reviewed-by: Stefan Bürk <stefan@buerk.tech>
---
 .../Classes/Remote/ExtensionDownloaderRemoteInterface.php       | 2 +-
 .../extensionmanager/Classes/Remote/TerExtensionRemote.php      | 2 +-
 .../extensionmanager/Classes/Report/ExtensionComposerStatus.php | 2 +-
 .../sysext/extensionmanager/Classes/Report/ExtensionStatus.php  | 2 +-
 .../sysext/extensionmanager/Classes/Utility/InstallUtility.php  | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/typo3/sysext/extensionmanager/Classes/Remote/ExtensionDownloaderRemoteInterface.php b/typo3/sysext/extensionmanager/Classes/Remote/ExtensionDownloaderRemoteInterface.php
index b18678614947..15898905d9d9 100644
--- a/typo3/sysext/extensionmanager/Classes/Remote/ExtensionDownloaderRemoteInterface.php
+++ b/typo3/sysext/extensionmanager/Classes/Remote/ExtensionDownloaderRemoteInterface.php
@@ -44,5 +44,5 @@ interface ExtensionDownloaderRemoteInterface
      * @throws DownloadFailedException when a remote file could not be loaded.
      * @throws VerificationFailedException when the remote file could not be unpacked or validated.
      */
-    public function downloadExtension(string $extensionKey, string $version, FileHandlingUtility $fileHandler, string $verificationHash = null, string $pathType = 'Local'): void;
+    public function downloadExtension(string $extensionKey, string $version, FileHandlingUtility $fileHandler, ?string $verificationHash = null, string $pathType = 'Local'): void;
 }
diff --git a/typo3/sysext/extensionmanager/Classes/Remote/TerExtensionRemote.php b/typo3/sysext/extensionmanager/Classes/Remote/TerExtensionRemote.php
index 74daca9cfe1d..511c00c66590 100644
--- a/typo3/sysext/extensionmanager/Classes/Remote/TerExtensionRemote.php
+++ b/typo3/sysext/extensionmanager/Classes/Remote/TerExtensionRemote.php
@@ -158,7 +158,7 @@ class TerExtensionRemote implements ExtensionDownloaderRemoteInterface, Listable
      * @throws DownloadFailedException
      * @throws VerificationFailedException
      */
-    public function downloadExtension(string $extensionKey, string $version, FileHandlingUtility $fileHandler, string $verificationHash = null, string $pathType = 'Local'): void
+    public function downloadExtension(string $extensionKey, string $version, FileHandlingUtility $fileHandler, ?string $verificationHash = null, string $pathType = 'Local'): void
     {
         $extensionPath = strtolower($extensionKey);
         $remotePath = $extensionPath[0] . '/' . $extensionPath[1] . '/' . $extensionPath . '_' . $version . '.t3x';
diff --git a/typo3/sysext/extensionmanager/Classes/Report/ExtensionComposerStatus.php b/typo3/sysext/extensionmanager/Classes/Report/ExtensionComposerStatus.php
index 60e0d75caa03..a76045149d93 100644
--- a/typo3/sysext/extensionmanager/Classes/Report/ExtensionComposerStatus.php
+++ b/typo3/sysext/extensionmanager/Classes/Report/ExtensionComposerStatus.php
@@ -48,7 +48,7 @@ class ExtensionComposerStatus implements RequestAwareStatusProviderInterface
         $this->uriBuilder = $uriBuilder;
     }
 
-    public function getStatus(ServerRequestInterface $request = null): array
+    public function getStatus(?ServerRequestInterface $request = null): array
     {
         $status = [];
         $extensionsWithComposerDeficit = $this->composerDeficitDetector->getExtensionsWithComposerDeficit();
diff --git a/typo3/sysext/extensionmanager/Classes/Report/ExtensionStatus.php b/typo3/sysext/extensionmanager/Classes/Report/ExtensionStatus.php
index 3aa25d127821..ca35fad71f0a 100644
--- a/typo3/sysext/extensionmanager/Classes/Report/ExtensionStatus.php
+++ b/typo3/sysext/extensionmanager/Classes/Report/ExtensionStatus.php
@@ -64,7 +64,7 @@ class ExtensionStatus implements StatusProviderInterface
     /**
      * @param RemoteRegistry|null  $remoteRegistry
      */
-    public function __construct(RemoteRegistry $remoteRegistry = null)
+    public function __construct(?RemoteRegistry $remoteRegistry = null)
     {
         $this->remoteRegistry = $remoteRegistry ?? GeneralUtility::makeInstance(RemoteRegistry::class);
         $this->listUtility = GeneralUtility::makeInstance(ListUtility::class);
diff --git a/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php b/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php
index 9529bb5d0384..44aadb8a5662 100644
--- a/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php
+++ b/typo3/sysext/extensionmanager/Classes/Utility/InstallUtility.php
@@ -539,7 +539,7 @@ class InstallUtility implements SingletonInterface, LoggerAwareInterface
      * @param string $packagePath
      * @param Import|null $import
      */
-    protected function importSiteConfiguration(string $extensionKey, string $packagePath, Import $import = null): void
+    protected function importSiteConfiguration(string $extensionKey, string $packagePath, ?Import $import = null): void
     {
         $importAbsFolder = $packagePath . 'Initialisation/Site';
         $destinationFolder = Environment::getConfigPath() . '/sites';
-- 
GitLab