55namespace MaxBeckers \PhpBuilderGenerator \Plugin ;
66
77use Composer \Composer ;
8+ use Composer \EventDispatcher \Event ;
89use Composer \EventDispatcher \EventSubscriberInterface ;
910use Composer \IO \IOInterface ;
1011use Composer \Plugin \PluginInterface ;
@@ -37,7 +38,7 @@ public static function getSubscribedEvents(): array
3738 ];
3839 }
3940
40- public function generateBuilders (): void
41+ public function generateBuilders (Event $ event ): void
4142 {
4243 $ extra = $ this ->composer ->getPackage ()->getExtra ();
4344 $ config = $ extra ['php-builder-generator ' ] ?? [];
@@ -46,6 +47,8 @@ public function generateBuilders(): void
4647 $ this ->io ->write ('<info>PHP Builder Generator: Auto-generation disabled</info> ' );
4748 return ;
4849 }
50+
51+ $ this ->forceAutoloading ();
4952 $ this ->io ->write ('<info>Generating PHP builders...</info> ' );
5053
5154 $ extra = $ this ->composer ->getPackage ()->getExtra ();
@@ -55,5 +58,38 @@ public function generateBuilders(): void
5558 $ generated = $ service ->generateBuilders ($ config );
5659
5760 $ this ->io ->write ("<info>Generated {$ generated } builder classes</info> " );
61+
62+ if ($ generated > 0 ) {
63+ $ this ->io ->write ('<info>Regenerating autoloader...</info> ' );
64+ $ this ->regenerateAutoloader ($ event );
65+ $ this ->io ->write ('<info>Autoloader regenerated.</info> ' );
66+ }
67+ }
68+
69+ private function regenerateAutoloader (Event $ event ): void
70+ {
71+ $ config = $ this ->composer ->getConfig ();
72+ $ generator = $ this ->composer ->getAutoloadGenerator ();
73+ $ installationManager = $ this ->composer ->getInstallationManager ();
74+ $ localRepo = $ this ->composer ->getRepositoryManager ()->getLocalRepository ();
75+ $ package = $ this ->composer ->getPackage ();
76+ $ optimize = $ event ->getFlags ()['optimize ' ] ?? false ;
77+
78+ $ generator ->setRunScripts (false );
79+
80+ $ generator ->dump (
81+ $ config ,
82+ $ localRepo ,
83+ $ package ,
84+ $ installationManager ,
85+ 'composer ' ,
86+ $ optimize
87+ );
88+ }
89+
90+ public function forceAutoloading (): void
91+ {
92+ $ vendorDir = $ this ->composer ->getConfig ()->get ('vendor-dir ' );
93+ require_once $ vendorDir . '/autoload.php ' ;
5894 }
5995}
0 commit comments