diff --git a/src/Composer/Autoload/AutoloadGenerator.php b/src/Composer/Autoload/AutoloadGenerator.php index 7ea1a3444..2d4c481b1 100644 --- a/src/Composer/Autoload/AutoloadGenerator.php +++ b/src/Composer/Autoload/AutoloadGenerator.php @@ -28,6 +28,7 @@ use Composer\Script\ScriptEvents; */ class AutoloadGenerator { + /** * @var EventDispatcher */ @@ -959,7 +960,7 @@ INITIALIZER; * @param array $packageMap * @return array */ - protected function sortPackageMap(array $packageMap) + public function sortPackageMap(array $packageMap) { $packages = array(); $paths = array(); diff --git a/src/Composer/Plugin/PluginManager.php b/src/Composer/Plugin/PluginManager.php index e8f4b58c3..da9fb5c20 100644 --- a/src/Composer/Plugin/PluginManager.php +++ b/src/Composer/Plugin/PluginManager.php @@ -15,10 +15,10 @@ namespace Composer\Plugin; use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; use Composer\IO\IOInterface; +use Composer\Package\CompletePackage; use Composer\Package\Package; use Composer\Package\Version\VersionParser; use Composer\Repository\RepositoryInterface; -use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; use Composer\Package\Link; use Composer\Semver\Constraint\Constraint; @@ -253,8 +253,13 @@ class PluginManager */ private function loadRepository(RepositoryInterface $repo) { - foreach ($repo->getPackages() as $package) { /** @var PackageInterface $package */ - if ($package instanceof AliasPackage) { + $packages = $repo->getPackages(); + $generator = $this->composer->getAutoloadGenerator(); + $packageMap = $generator->buildPackageMap($this->composer->getInstallationManager(), $this->composer->getPackage(), $packages); + $sortedPackageMap = array_reverse($generator->sortPackageMap($packageMap)); + foreach ($sortedPackageMap as $fullPackage) { + $package = $fullPackage[0]; /** @var PackageInterface $package */ + if (!($package instanceof CompletePackage)) { continue; } if ('composer-plugin' === $package->getType()) {