/**
   * {@inheritdoc}
   */
  public function getExtensionPackages() {
    if (!isset($this->packages['extension'])) {
      $listing = new ExtensionDiscovery($this->root);
      // Get all profiles, and modules belonging to those profiles.
      // @todo Scan themes as well?
      $profiles = $listing->scan('profile');
      $profile_directories = array_map(function ($profile) {
        return $profile->getPath();
      }, $profiles);
      $listing->setProfileDirectories($profile_directories);
      $modules = $listing->scan('module');
      $extensions = $profiles + $modules;

      $this->packages['extension'] = [];
      foreach ($extensions as $extension_name => $extension) {
        $filename = $this->root . '/' . $extension->getPath() . '/composer.json';
        if (is_readable($filename)) {
          $extension_package = JsonFile::read($filename);
          if (!empty($extension_package['require']) || !empty($extension_package['require-dev'])) {
            $this->packages['extension'][$extension_name] = JsonFile::read($filename);
          }
        }
      }
    }

    return $this->packages['extension'];
  }
  /**
   * {@inheritdoc}
   */
  public function getExtensionPackages() {
    if (!isset($this->packages['extension'])) {
      $listing = new ExtensionDiscovery($this->root);
      // Get all profiles, and modules belonging to those profiles.
      // @todo Scan themes as well?
      $profiles = $listing->scan('profile');
      $profile_directories = array_map(function ($profile) {
        return $profile->getPath();
      }, $profiles);
      $listing->setProfileDirectories($profile_directories);
      $modules = $listing->scan('module');
      $extensions = $profiles + $modules;

      $installed_packages = $this->getInstalledPackages();
      $installed_packages = array_map(function ($package) {
        return $package['name'];
      }, $installed_packages);

      $this->packages['extension'] = [];
      foreach ($extensions as $extension_name => $extension) {
        $filename = $this->root . '/' . $extension->getPath() . '/composer.json';
        if (is_readable($filename)) {
          $extension_package = JsonFile::read($filename);
          // The package must at least have a name and some requirements.
          if (empty($extension_package['name'])) {
            continue;
          }
          if (empty($extension_package['require']) && empty($extension_package['require-dev'])) {
            continue;
          }
          if (in_array($extension_package['name'], $installed_packages)) {
            // This extension is already managed with Composer.
            continue;
          }
          // The path is required by rebuildRootPackage().
          $extension_package['extra']['path'] = $extension->getPath() . '/composer.json';

          $this->packages['extension'][$extension_name] = $extension_package;
        }
      }
    }

    return $this->packages['extension'];
  }