2021-11-01 14:32:25 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
declare (strict_types=1);
|
2022-06-06 16:43:29 +00:00
|
|
|
namespace RectorPrefix20220606\Rector\Core\Kernel;
|
2021-11-01 14:32:25 +00:00
|
|
|
|
2022-06-06 16:43:29 +00:00
|
|
|
use RectorPrefix20220606\Rector\Core\Config\Loader\ConfigureCallMergingLoaderFactory;
|
|
|
|
use RectorPrefix20220606\Rector\Core\Contract\Rector\RectorInterface;
|
|
|
|
use RectorPrefix20220606\Rector\Core\DependencyInjection\Collector\ConfigureCallValuesCollector;
|
|
|
|
use RectorPrefix20220606\Rector\Core\DependencyInjection\CompilerPass\MakeRectorsPublicCompilerPass;
|
|
|
|
use RectorPrefix20220606\Rector\Core\DependencyInjection\CompilerPass\MergeImportedRectorConfigureCallValuesCompilerPass;
|
|
|
|
use RectorPrefix20220606\Rector\Core\DependencyInjection\CompilerPass\RemoveSkippedRectorsCompilerPass;
|
|
|
|
use RectorPrefix20220606\Rector\Core\Exception\ShouldNotHappenException;
|
2022-06-06 06:00:07 +00:00
|
|
|
use RectorPrefix20220606\Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
|
|
|
use RectorPrefix20220606\Symfony\Component\DependencyInjection\ContainerInterface;
|
|
|
|
use RectorPrefix20220606\Symplify\Astral\ValueObject\AstralConfig;
|
|
|
|
use RectorPrefix20220606\Symplify\AutowireArrayParameter\DependencyInjection\CompilerPass\AutowireArrayParameterCompilerPass;
|
|
|
|
use RectorPrefix20220606\Symplify\ComposerJsonManipulator\ValueObject\ComposerJsonManipulatorConfig;
|
|
|
|
use RectorPrefix20220606\Symplify\PackageBuilder\DependencyInjection\CompilerPass\AutowireInterfacesCompilerPass;
|
|
|
|
use RectorPrefix20220606\Symplify\PackageBuilder\ValueObject\ConsoleColorDiffConfig;
|
|
|
|
use RectorPrefix20220606\Symplify\Skipper\ValueObject\SkipperConfig;
|
|
|
|
use RectorPrefix20220606\Symplify\SymplifyKernel\ContainerBuilderFactory;
|
|
|
|
use RectorPrefix20220606\Symplify\SymplifyKernel\Contract\LightKernelInterface;
|
2022-06-06 16:43:29 +00:00
|
|
|
final class RectorKernel implements LightKernelInterface
|
2021-11-01 14:32:25 +00:00
|
|
|
{
|
|
|
|
/**
|
2021-12-04 12:47:17 +00:00
|
|
|
* @readonly
|
2021-11-01 14:32:25 +00:00
|
|
|
* @var \Rector\Core\DependencyInjection\Collector\ConfigureCallValuesCollector
|
|
|
|
*/
|
|
|
|
private $configureCallValuesCollector;
|
|
|
|
/**
|
|
|
|
* @var \Symfony\Component\DependencyInjection\ContainerInterface|null
|
|
|
|
*/
|
|
|
|
private $container = null;
|
|
|
|
public function __construct()
|
|
|
|
{
|
2022-06-06 16:43:29 +00:00
|
|
|
$this->configureCallValuesCollector = new ConfigureCallValuesCollector();
|
2021-11-01 14:32:25 +00:00
|
|
|
}
|
|
|
|
/**
|
|
|
|
* @param string[] $configFiles
|
|
|
|
*/
|
2022-06-06 06:00:07 +00:00
|
|
|
public function createFromConfigs(array $configFiles) : \RectorPrefix20220606\Psr\Container\ContainerInterface
|
2021-11-01 14:32:25 +00:00
|
|
|
{
|
|
|
|
$defaultConfigFiles = $this->createDefaultConfigFiles();
|
|
|
|
$configFiles = \array_merge($defaultConfigFiles, $configFiles);
|
|
|
|
$compilerPasses = $this->createCompilerPasses();
|
2022-06-06 16:43:29 +00:00
|
|
|
$configureCallMergingLoaderFactory = new ConfigureCallMergingLoaderFactory($this->configureCallValuesCollector);
|
|
|
|
$containerBuilderFactory = new ContainerBuilderFactory($configureCallMergingLoaderFactory);
|
2022-01-25 11:43:54 +00:00
|
|
|
$containerBuilder = $containerBuilderFactory->create($configFiles, $compilerPasses, []);
|
2021-11-01 14:32:25 +00:00
|
|
|
// @see https://symfony.com/blog/new-in-symfony-4-4-dependency-injection-improvements-part-1
|
|
|
|
$containerBuilder->setParameter('container.dumper.inline_factories', \true);
|
|
|
|
// to fix reincluding files again
|
|
|
|
$containerBuilder->setParameter('container.dumper.inline_class_loader', \false);
|
|
|
|
$containerBuilder->compile();
|
|
|
|
$this->container = $containerBuilder;
|
|
|
|
return $containerBuilder;
|
|
|
|
}
|
2022-06-06 06:00:07 +00:00
|
|
|
public function getContainer() : \RectorPrefix20220606\Psr\Container\ContainerInterface
|
2021-11-01 14:32:25 +00:00
|
|
|
{
|
|
|
|
if ($this->container === null) {
|
2022-06-06 16:43:29 +00:00
|
|
|
throw new ShouldNotHappenException();
|
2021-11-01 14:32:25 +00:00
|
|
|
}
|
|
|
|
return $this->container;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* @return CompilerPassInterface[]
|
|
|
|
*/
|
|
|
|
private function createCompilerPasses() : array
|
|
|
|
{
|
2022-05-31 07:47:20 +00:00
|
|
|
return [
|
|
|
|
// must run before AutowireArrayParameterCompilerPass, as the autowired array cannot contain removed services
|
2022-06-06 16:43:29 +00:00
|
|
|
new RemoveSkippedRectorsCompilerPass(),
|
2022-05-31 07:47:20 +00:00
|
|
|
// autowire Rectors by default (mainly for tests)
|
2022-06-06 16:43:29 +00:00
|
|
|
new AutowireInterfacesCompilerPass([RectorInterface::class]),
|
|
|
|
new MakeRectorsPublicCompilerPass(),
|
2022-05-31 07:47:20 +00:00
|
|
|
// add all merged arguments of Rector services
|
2022-06-06 16:43:29 +00:00
|
|
|
new MergeImportedRectorConfigureCallValuesCompilerPass($this->configureCallValuesCollector),
|
|
|
|
new AutowireArrayParameterCompilerPass(),
|
2022-05-31 07:47:20 +00:00
|
|
|
];
|
2021-11-01 14:32:25 +00:00
|
|
|
}
|
|
|
|
/**
|
|
|
|
* @return string[]
|
|
|
|
*/
|
|
|
|
private function createDefaultConfigFiles() : array
|
|
|
|
{
|
2022-06-06 16:43:29 +00:00
|
|
|
return [__DIR__ . '/../../config/config.php', AstralConfig::FILE_PATH, ComposerJsonManipulatorConfig::FILE_PATH, SkipperConfig::FILE_PATH, ConsoleColorDiffConfig::FILE_PATH];
|
2021-11-01 14:32:25 +00:00
|
|
|
}
|
|
|
|
}
|