Skip to content

Commit 7b4044f

Browse files
committed
Fix autoloading for vendor dependencies
1 parent 0327523 commit 7b4044f

2 files changed

Lines changed: 37 additions & 2 deletions

File tree

src/Analyzer/ClassAnalyzer.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use MaxBeckers\PhpBuilderGenerator\Attribute\Builder;
88
use MaxBeckers\PhpBuilderGenerator\Generator\Context\ClassContext;
99
use ReflectionClass;
10-
use ReflectionProperty;
1110

1211
class ClassAnalyzer
1312
{

src/Plugin/ComposerPlugin.php

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace MaxBeckers\PhpBuilderGenerator\Plugin;
66

77
use Composer\Composer;
8+
use Composer\EventDispatcher\Event;
89
use Composer\EventDispatcher\EventSubscriberInterface;
910
use Composer\IO\IOInterface;
1011
use 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

Comments
 (0)