diff --git a/src/Composer/Script/EventDispatcher.php b/src/Composer/Script/EventDispatcher.php index 049762f7c..83b4fb500 100644 --- a/src/Composer/Script/EventDispatcher.php +++ b/src/Composer/Script/EventDispatcher.php @@ -14,7 +14,7 @@ namespace Composer\Script; use Composer\Json\JsonFile; use Composer\Repository\FilesystemRepository; -use Composer\Autoload\ClassLoader; +use Composer\Autoload\AutoloadGenerator; use Composer\Package\PackageInterface; use Composer\IO\IOInterface; use Composer\Composer; @@ -48,8 +48,6 @@ class EventDispatcher { $this->composer = $composer; $this->io = $io; - $this->loader = new ClassLoader(); - $this->loader->register(); } /** @@ -105,16 +103,22 @@ class EventDispatcher { $package = $this->composer->getPackage(); $scripts = $package->getScripts(); - $autoload = $package->getAutoload(); - // get namespaces in composer.json project - if (!$this->loader->getPrefixes() && isset($autoload['psr-0'])) { - krsort($autoload['psr-0']); - foreach ($autoload['psr-0'] as $ns => $path) { - $this->loader->add($ns, rtrim(getcwd().'/'.$path, '/')); - } + if (empty($scripts[$event->getName()])) { + return array(); + } + + if ($this->loader) { + $this->loader->unregister(); } - return isset($scripts[$event->getName()]) ? $scripts[$event->getName()] : array(); + $generator = new AutoloadGenerator; + $packages = $this->composer->getRepositoryManager()->getLocalRepository()->getPackages(); + $packageMap = $generator->buildPackageMap($this->composer->getInstallationManager(), $package, $packages); + $map = $generator->parseAutoloads($packageMap); + $this->loader = $generator->createLoader($map); + $this->loader->register(); + + return $scripts[$event->getName()]; } }