From bdd59d34922fb77d9a1b06ef34861162b56bd2d3 Mon Sep 17 00:00:00 2001
From: Wim Leers <44946-wimleers@users.noreply.drupalcode.org>
Date: Tue, 7 Mar 2023 17:35:30 +0000
Subject: [PATCH] Issue #3345760 by Wim Leers, phenaproxima:
 \Drupal\automatic_updates_extensions\Form\UpdaterForm should use
 ComposerInspector instead of ComposerUtility

---
 .../src/Form/UpdaterForm.php                  | 72 +++++++------------
 1 file changed, 24 insertions(+), 48 deletions(-)

diff --git a/automatic_updates_extensions/src/Form/UpdaterForm.php b/automatic_updates_extensions/src/Form/UpdaterForm.php
index d738728900..43b9872559 100644
--- a/automatic_updates_extensions/src/Form/UpdaterForm.php
+++ b/automatic_updates_extensions/src/Form/UpdaterForm.php
@@ -13,8 +13,10 @@ use Drupal\Core\State\StateInterface;
 use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\Core\Render\RendererInterface;
 use Drupal\Core\Url;
+use Drupal\package_manager\ComposerInspector;
 use Drupal\package_manager\Exception\StageFailureMarkerException;
 use Drupal\package_manager\FailureMarker;
+use Drupal\package_manager\PathLocator;
 use Drupal\package_manager\ProjectInfo;
 use Drupal\package_manager\ValidationResult;
 use Drupal\system\SystemManager;
@@ -30,41 +32,6 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  */
 final class UpdaterForm extends UpdateFormBase {
 
-  /**
-   * The extension updater service.
-   *
-   * @var \Drupal\automatic_updates_extensions\ExtensionUpdater
-   */
-  private $extensionUpdater;
-
-  /**
-   * The event dispatcher service.
-   *
-   * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface
-   */
-  private $eventDispatcher;
-
-  /**
-   * The state service.
-   *
-   * @var \Drupal\Core\State\StateInterface
-   */
-  private $state;
-
-  /**
-   * The renderer service.
-   *
-   * @var \Drupal\Core\Render\RendererInterface
-   */
-  private $renderer;
-
-  /**
-   * Failure marker service.
-   *
-   * @var \Drupal\package_manager\FailureMarker
-   */
-  private $failureMarker;
-
   /**
    * {@inheritdoc}
    */
@@ -74,31 +41,39 @@ final class UpdaterForm extends UpdateFormBase {
       $container->get('event_dispatcher'),
       $container->get('renderer'),
       $container->get('state'),
-      $container->get('package_manager.failure_marker')
+      $container->get('package_manager.failure_marker'),
+      $container->get('package_manager.composer_inspector'),
+      $container->get('package_manager.path_locator')
     );
   }
 
   /**
    * Constructs a new UpdaterForm object.
    *
-   * @param \Drupal\automatic_updates_extensions\ExtensionUpdater $extension_updater
+   * @param \Drupal\automatic_updates_extensions\ExtensionUpdater $extensionUpdater
    *   The extension updater service.
-   * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
+   * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $eventDispatcher
    *   The extension event dispatcher service.
    * @param \Drupal\Core\Render\RendererInterface $renderer
    *   The renderer service.
    * @param \Drupal\Core\State\StateInterface $state
    *   The state service.
-   * @param \Drupal\package_manager\FailureMarker $failure_marker
+   * @param \Drupal\package_manager\FailureMarker $failureMarker
    *   The failure marker service.
+   * @param \Drupal\package_manager\ComposerInspector $composerInspector
+   *   The Composer inspector service.
+   * @param \Drupal\package_manager\PathLocator $pathLocator
+   *   The path locator service.
    */
-  public function __construct(ExtensionUpdater $extension_updater, EventDispatcherInterface $event_dispatcher, RendererInterface $renderer, StateInterface $state, FailureMarker $failure_marker) {
-    $this->extensionUpdater = $extension_updater;
-    $this->eventDispatcher = $event_dispatcher;
-    $this->renderer = $renderer;
-    $this->state = $state;
-    $this->failureMarker = $failure_marker;
-  }
+  public function __construct(
+    private ExtensionUpdater $extensionUpdater,
+    private EventDispatcherInterface $eventDispatcher,
+    private RendererInterface $renderer,
+    private StateInterface $state,
+    private FailureMarker $failureMarker,
+    private ComposerInspector $composerInspector,
+    private PathLocator $pathLocator,
+  ) {}
 
   /**
    * {@inheritdoc}
@@ -261,12 +236,13 @@ final class UpdaterForm extends UpdateFormBase {
 
     $all_projects_data = update_calculate_project_data($available_updates);
     $outdated_modules = [];
-    $installed_packages = array_keys($this->extensionUpdater->getActiveComposer()->getInstalledPackages());
+    $installed_packages = $this->composerInspector->getInstalledPackagesList($this->pathLocator->getProjectRoot())
+      ->getArrayCopy();
     $non_supported_update_statuses = [];
     foreach ($all_projects_data as $project_name => $project_data) {
       if (in_array($project_data['project_type'], $supported_project_types, TRUE)) {
         if ($project_data['status'] !== UpdateManagerInterface::CURRENT) {
-          if (!in_array("drupal/$project_name", $installed_packages, TRUE)) {
+          if (!array_key_exists("drupal/$project_name", $installed_packages)) {
             $non_supported_update_statuses[] = $project_data['status'];
             continue;
           }
-- 
GitLab