public function compile() { $containerBuilder = new UnfreezableContainerBuilder(); foreach (ExtensionRepository::findAll() as $extension) { $containerBuilder->registerExtension($extension); } foreach ($containerBuilder->getExtensions() as $extension) { /* @var $extension \Symfony\Component\DependencyInjection\Extension\ExtensionInterface */ $containerBuilder->loadFromExtension($extension->getAlias(), array()); } $containerBuilder->getCompilerPassConfig()->setOptimizationPasses(array_filter($containerBuilder->getCompilerPassConfig()->getOptimizationPasses(), function (CompilerPassInterface $compilerPass) { return !$compilerPass instanceof ResolveParameterPlaceHoldersPass; })); $compiler = new \Stagehand\ComponentFactory\Compiler($containerBuilder, self::COMPILED_CONTAINER_CLASS, self::COMPILED_CONTAINER_NAMESPACE); file_put_contents(__DIR__ . '/' . self::COMPILED_CONTAINER_CLASS . '.php', $compiler->compile()); }
public function compile() { foreach (PluginRepository::findAll() as $plugin) { $containerBuilder = new UnfreezableContainerBuilder(); $containerBuilder->registerExtension(new GeneralExtension()); $extensionClass = new \ReflectionClass('Stagehand\\TestRunner\\DependencyInjection\\Extension\\' . $plugin->getPluginID() . 'Extension'); if (!$extensionClass->isInterface() && !$extensionClass->isAbstract() && $extensionClass->isSubclassOf('Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface')) { $containerBuilder->registerExtension($extensionClass->newInstance()); } foreach ($containerBuilder->getExtensions() as $extension) { /* @var $extension \Symfony\Component\DependencyInjection\Extension\ExtensionInterface */ $containerBuilder->loadFromExtension($extension->getAlias(), array()); } $containerBuilder->addCompilerPass(new ReplaceDefinitionByPluginDefinitionPass($plugin)); $containerBuilder->getCompilerPassConfig()->setOptimizationPasses(array_filter($containerBuilder->getCompilerPassConfig()->getOptimizationPasses(), function (CompilerPassInterface $compilerPass) { return !$compilerPass instanceof ResolveParameterPlaceHoldersPass; })); $containerClass = $plugin->getPluginID() . 'Container'; $compiler = new \Stagehand\ComponentFactory\Compiler($containerBuilder, $containerClass, self::COMPILED_CONTAINER_NAMESPACE); $containerSource = $compiler->compile(); file_put_contents(__DIR__ . '/../' . $containerClass . '.php', $containerSource); } }