From 7b4044f31665d1078cd70d8ca214d3e30b9c8c3b Mon Sep 17 00:00:00 2001 From: Max Beckers Date: Tue, 14 Oct 2025 15:48:25 +0200 Subject: [PATCH] Fix autoloading for vendor dependencies --- src/Analyzer/ClassAnalyzer.php | 1 - src/Plugin/ComposerPlugin.php | 38 +++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/Analyzer/ClassAnalyzer.php b/src/Analyzer/ClassAnalyzer.php index 436830c..3bf337a 100644 --- a/src/Analyzer/ClassAnalyzer.php +++ b/src/Analyzer/ClassAnalyzer.php @@ -7,7 +7,6 @@ use MaxBeckers\PhpBuilderGenerator\Attribute\Builder; use MaxBeckers\PhpBuilderGenerator\Generator\Context\ClassContext; use ReflectionClass; -use ReflectionProperty; class ClassAnalyzer { diff --git a/src/Plugin/ComposerPlugin.php b/src/Plugin/ComposerPlugin.php index 488a195..779abb2 100644 --- a/src/Plugin/ComposerPlugin.php +++ b/src/Plugin/ComposerPlugin.php @@ -5,6 +5,7 @@ namespace MaxBeckers\PhpBuilderGenerator\Plugin; use Composer\Composer; +use Composer\EventDispatcher\Event; use Composer\EventDispatcher\EventSubscriberInterface; use Composer\IO\IOInterface; use Composer\Plugin\PluginInterface; @@ -37,7 +38,7 @@ public static function getSubscribedEvents(): array ]; } - public function generateBuilders(): void + public function generateBuilders(Event $event): void { $extra = $this->composer->getPackage()->getExtra(); $config = $extra['php-builder-generator'] ?? []; @@ -46,6 +47,8 @@ public function generateBuilders(): void $this->io->write('PHP Builder Generator: Auto-generation disabled'); return; } + + $this->forceAutoloading(); $this->io->write('Generating PHP builders...'); $extra = $this->composer->getPackage()->getExtra(); @@ -55,5 +58,38 @@ public function generateBuilders(): void $generated = $service->generateBuilders($config); $this->io->write("Generated {$generated} builder classes"); + + if ($generated > 0) { + $this->io->write('Regenerating autoloader...'); + $this->regenerateAutoloader($event); + $this->io->write('Autoloader regenerated.'); + } + } + + private function regenerateAutoloader(Event $event): void + { + $config = $this->composer->getConfig(); + $generator = $this->composer->getAutoloadGenerator(); + $installationManager = $this->composer->getInstallationManager(); + $localRepo = $this->composer->getRepositoryManager()->getLocalRepository(); + $package = $this->composer->getPackage(); + $optimize = $event->getFlags()['optimize'] ?? false; + + $generator->setRunScripts(false); + + $generator->dump( + $config, + $localRepo, + $package, + $installationManager, + 'composer', + $optimize + ); + } + + public function forceAutoloading(): void + { + $vendorDir = $this->composer->getConfig()->get('vendor-dir'); + require_once $vendorDir . '/autoload.php'; } }