Updated Rector to commit 919bb98f90

919bb98f90 Infinity loop check #2 (#54)
This commit is contained in:
Tomas Votruba 2021-05-16 20:30:32 +00:00
parent 6d32da57f9
commit 5f1b18c0c4
9 changed files with 108 additions and 49 deletions

View File

@ -55,7 +55,7 @@ use RectorPrefix20210516\Symplify\SmartFileSystem\SmartFileSystem;
return static function (\RectorPrefix20210516\Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator $containerConfigurator) : void {
$services = $containerConfigurator->services();
$services->defaults()->public()->autowire()->autoconfigure();
$services->load('Rector\\Core\\', __DIR__ . '/../src')->exclude([__DIR__ . '/../src/Rector', __DIR__ . '/../src/Exception', __DIR__ . '/../src/DependencyInjection/CompilerPass', __DIR__ . '/../src/DependencyInjection/Loader', __DIR__ . '/../src/HttpKernel', __DIR__ . '/../src/ValueObject', __DIR__ . '/../src/Bootstrap', __DIR__ . '/../src/PhpParser/Node/CustomNode', __DIR__ . '/../src/functions', __DIR__ . '/../src/constants.php']);
$services->load('Rector\\Core\\', __DIR__ . '/../src')->exclude([__DIR__ . '/../src/Rector', __DIR__ . '/../src/Exception', __DIR__ . '/../src/DependencyInjection/CompilerPass', __DIR__ . '/../src/DependencyInjection/Loader', __DIR__ . '/../src/HttpKernel', __DIR__ . '/../src/ValueObject', __DIR__ . '/../src/Bootstrap', __DIR__ . '/../src/PhpParser/Node/CustomNode', __DIR__ . '/../src/functions', __DIR__ . '/../src/constants.php', __DIR__ . '/../src/PhpParser/NodeVisitor/CreatedByRuleNodeVisitor.php']);
$services->alias(\RectorPrefix20210516\Symfony\Component\Console\Application::class, \Rector\Core\Console\ConsoleApplication::class);
$services->set(\RectorPrefix20210516\Symplify\SmartFileSystem\FileSystemGuard::class);
$services->set(\RectorPrefix20210516\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser::class);

View File

@ -0,0 +1,24 @@
<?php
declare (strict_types=1);
namespace Rector\Core\PhpParser\NodeVisitor;
use PhpParser\Node;
use PhpParser\NodeVisitorAbstract;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class CreatedByRuleNodeVisitor extends \PhpParser\NodeVisitorAbstract
{
/**
* @var string
*/
private $rectorClass;
public function __construct(string $rectorClass)
{
$this->rectorClass = $rectorClass;
}
public function enterNode(\PhpParser\Node $node)
{
$node->setAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CREATED_BY_RULE, $this->rectorClass);
return $node;
}
}

View File

@ -24,7 +24,6 @@ use Rector\Core\Application\FileSystem\RemovedAndAddedFilesCollector;
use Rector\Core\Configuration\CurrentNodeProvider;
use Rector\Core\Configuration\Option;
use Rector\Core\Contract\Rector\PhpRectorInterface;
use Rector\Core\Exception\NodeTraverser\InfiniteLoopTraversingException;
use Rector\Core\Exception\ShouldNotHappenException;
use Rector\Core\Exclusion\ExclusionManager;
use Rector\Core\Logging\CurrentRectorProvider;
@ -36,9 +35,9 @@ use Rector\Core\PhpParser\Node\NodeFactory;
use Rector\Core\PhpParser\Node\Value\ValueResolver;
use Rector\Core\PhpParser\Printer\BetterStandardPrinter;
use Rector\Core\Provider\CurrentFileProvider;
use Rector\Core\Validation\InfiniteLoopValidator;
use Rector\Core\ValueObject\Application\File;
use Rector\Core\ValueObject\ProjectType;
use Rector\DowngradePhp80\Rector\NullsafeMethodCall\DowngradeNullsafeToTernaryOperatorRector;
use Rector\NodeCollector\NodeCollector\NodeRepository;
use Rector\NodeNameResolver\NodeNameResolver;
use Rector\NodeRemoval\NodeRemover;
@ -182,10 +181,14 @@ abstract class AbstractRector extends \PhpParser\NodeVisitorAbstract implements
* @var array<string, Node[]|Node>
*/
private $nodesToReturn = [];
/**
* @var \Rector\Core\Validation\InfiniteLoopValidator
*/
private $infiniteLoopValidator;
/**
* @required
*/
public function autowireAbstractRector(\Rector\PostRector\Collector\NodesToRemoveCollector $nodesToRemoveCollector, \Rector\PostRector\Collector\NodesToAddCollector $nodesToAddCollector, \Rector\ChangesReporting\Collector\RectorChangeCollector $rectorChangeCollector, \Rector\NodeRemoval\NodeRemover $nodeRemover, \Rector\PostRector\DependencyInjection\PropertyAdder $propertyAdder, \Rector\Core\Application\FileSystem\RemovedAndAddedFilesCollector $removedAndAddedFilesCollector, \Rector\Core\PhpParser\Printer\BetterStandardPrinter $betterStandardPrinter, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \RectorPrefix20210516\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\Privatization\NodeManipulator\VisibilityManipulator $visibilityManipulator, \Rector\Core\PhpParser\Node\NodeFactory $nodeFactory, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \RectorPrefix20210516\Symfony\Component\Console\Style\SymfonyStyle $symfonyStyle, \Rector\Core\Php\PhpVersionProvider $phpVersionProvider, \Rector\Core\Exclusion\ExclusionManager $exclusionManager, \Rector\StaticTypeMapper\StaticTypeMapper $staticTypeMapper, \RectorPrefix20210516\Symplify\PackageBuilder\Parameter\ParameterProvider $parameterProvider, \Rector\Core\Logging\CurrentRectorProvider $currentRectorProvider, \Rector\Core\Configuration\CurrentNodeProvider $currentNodeProvider, \RectorPrefix20210516\Symplify\Skipper\Skipper\Skipper $skipper, \Rector\Core\PhpParser\Node\Value\ValueResolver $valueResolver, \Rector\NodeCollector\NodeCollector\NodeRepository $nodeRepository, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder, \Rector\Core\PhpParser\Comparing\NodeComparator $nodeComparator, \Rector\Core\Provider\CurrentFileProvider $currentFileProvider, \Rector\Core\NodeAnalyzer\ChangedNodeAnalyzer $changedNodeAnalyzer) : void
public function autowireAbstractRector(\Rector\PostRector\Collector\NodesToRemoveCollector $nodesToRemoveCollector, \Rector\PostRector\Collector\NodesToAddCollector $nodesToAddCollector, \Rector\ChangesReporting\Collector\RectorChangeCollector $rectorChangeCollector, \Rector\NodeRemoval\NodeRemover $nodeRemover, \Rector\PostRector\DependencyInjection\PropertyAdder $propertyAdder, \Rector\Core\Application\FileSystem\RemovedAndAddedFilesCollector $removedAndAddedFilesCollector, \Rector\Core\PhpParser\Printer\BetterStandardPrinter $betterStandardPrinter, \Rector\NodeNameResolver\NodeNameResolver $nodeNameResolver, \Rector\NodeTypeResolver\NodeTypeResolver $nodeTypeResolver, \RectorPrefix20210516\Symplify\Astral\NodeTraverser\SimpleCallableNodeTraverser $simpleCallableNodeTraverser, \Rector\Privatization\NodeManipulator\VisibilityManipulator $visibilityManipulator, \Rector\Core\PhpParser\Node\NodeFactory $nodeFactory, \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory $phpDocInfoFactory, \RectorPrefix20210516\Symfony\Component\Console\Style\SymfonyStyle $symfonyStyle, \Rector\Core\Php\PhpVersionProvider $phpVersionProvider, \Rector\Core\Exclusion\ExclusionManager $exclusionManager, \Rector\StaticTypeMapper\StaticTypeMapper $staticTypeMapper, \RectorPrefix20210516\Symplify\PackageBuilder\Parameter\ParameterProvider $parameterProvider, \Rector\Core\Logging\CurrentRectorProvider $currentRectorProvider, \Rector\Core\Configuration\CurrentNodeProvider $currentNodeProvider, \RectorPrefix20210516\Symplify\Skipper\Skipper\Skipper $skipper, \Rector\Core\PhpParser\Node\Value\ValueResolver $valueResolver, \Rector\NodeCollector\NodeCollector\NodeRepository $nodeRepository, \Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder, \Rector\Core\PhpParser\Comparing\NodeComparator $nodeComparator, \Rector\Core\Provider\CurrentFileProvider $currentFileProvider, \Rector\Core\NodeAnalyzer\ChangedNodeAnalyzer $changedNodeAnalyzer, \Rector\Core\Validation\InfiniteLoopValidator $infiniteLoopValidator) : void
{
$this->nodesToRemoveCollector = $nodesToRemoveCollector;
$this->nodesToAddCollector = $nodesToAddCollector;
@ -214,6 +217,7 @@ abstract class AbstractRector extends \PhpParser\NodeVisitorAbstract implements
$this->nodeComparator = $nodeComparator;
$this->currentFileProvider = $currentFileProvider;
$this->changedNodeAnalyzer = $changedNodeAnalyzer;
$this->infiniteLoopValidator = $infiniteLoopValidator;
}
/**
* @return Node[]|null
@ -273,34 +277,7 @@ abstract class AbstractRector extends \PhpParser\NodeVisitorAbstract implements
$this->connectParentNodes($node);
// is different node type? do not traverse children to avoid looping
if (\get_class($originalNode) !== \get_class($node)) {
$createdByRule = $originalNode->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CREATED_BY_RULE);
// special case
if ($createdByRule === static::class && static::class !== \Rector\DowngradePhp80\Rector\NullsafeMethodCall\DowngradeNullsafeToTernaryOperatorRector::class) {
// does it contain the same node type as input?
$hasNestedOriginalNodeType = $this->betterNodeFinder->findInstanceOf($node, \get_class($originalNode));
if ($hasNestedOriginalNodeType !== []) {
throw new \Rector\Core\Exception\NodeTraverser\InfiniteLoopTraversingException(static::class);
}
}
// hacking :)
$nodeTraverser = new \PhpParser\NodeTraverser();
$nodeTraverser->addVisitor(new class(static::class) extends \PhpParser\NodeVisitorAbstract
{
/**
* @var string
*/
private $rectorClass;
public function __construct(string $rectorClass)
{
$this->rectorClass = $rectorClass;
}
public function enterNode(\PhpParser\Node $node)
{
$node->setAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CREATED_BY_RULE, $this->rectorClass);
return $node;
}
});
$nodeTraverser->traverse([$originalNode]);
$this->infiniteLoopValidator->process($node, $originalNode, static::class);
// search "infinite recursion" in https://github.com/nikic/PHP-Parser/blob/master/doc/component/Walking_the_AST.markdown
$originalNodeHash = \spl_object_hash($originalNode);
if ($originalNode instanceof \PhpParser\Node\Stmt && $node instanceof \PhpParser\Node\Expr) {

View File

@ -0,0 +1,54 @@
<?php
declare (strict_types=1);
namespace Rector\Core\Validation;
use PhpParser\Node;
use PhpParser\NodeTraverser;
use Rector\Core\Contract\Rector\RectorInterface;
use Rector\Core\Exception\NodeTraverser\InfiniteLoopTraversingException;
use Rector\Core\PhpParser\Node\BetterNodeFinder;
use Rector\Core\PhpParser\NodeVisitor\CreatedByRuleNodeVisitor;
use Rector\DowngradePhp80\Rector\NullsafeMethodCall\DowngradeNullsafeToTernaryOperatorRector;
use Rector\NodeTypeResolver\Node\AttributeKey;
final class InfiniteLoopValidator
{
/**
* @var \Rector\Core\PhpParser\Node\BetterNodeFinder
*/
private $betterNodeFinder;
public function __construct(\Rector\Core\PhpParser\Node\BetterNodeFinder $betterNodeFinder)
{
$this->betterNodeFinder = $betterNodeFinder;
}
/**
* @param class-string<RectorInterface> $rectorClass
*/
public function process(\PhpParser\Node $node, \PhpParser\Node $originalNode, string $rectorClass) : void
{
if ($rectorClass === \Rector\DowngradePhp80\Rector\NullsafeMethodCall\DowngradeNullsafeToTernaryOperatorRector::class) {
return;
}
$createdByRule = $originalNode->getAttribute(\Rector\NodeTypeResolver\Node\AttributeKey::CREATED_BY_RULE);
// special case
if ($createdByRule === $rectorClass) {
// does it contain the same node type as input?
$originalNodeClass = \get_class($originalNode);
$hasNestedOriginalNodeType = $this->betterNodeFinder->findInstanceOf($node, $originalNodeClass);
if ($hasNestedOriginalNodeType !== []) {
throw new \Rector\Core\Exception\NodeTraverser\InfiniteLoopTraversingException($rectorClass);
}
}
$this->decorateNode($originalNode, $rectorClass);
}
/**
* @param class-string<RectorInterface> $rectorClass
*/
private function decorateNode(\PhpParser\Node $node, string $rectorClass) : void
{
$nodeTraverser = new \PhpParser\NodeTraverser();
$createdByRuleNodeVisitor = new \Rector\Core\PhpParser\NodeVisitor\CreatedByRuleNodeVisitor($rectorClass);
$nodeTraverser->addVisitor($createdByRuleNodeVisitor);
$nodeTraverser->traverse([$node]);
}
}

2
vendor/autoload.php vendored
View File

@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48::getLoader();
return ComposerAutoloaderInita12e7b5de1a942b41a17590912c45195::getLoader();

View File

@ -1767,6 +1767,7 @@ return array(
'Rector\\Core\\PhpParser\\NodeFinder\\PropertyFetchFinder' => $baseDir . '/src/PhpParser/NodeFinder/PropertyFetchFinder.php',
'Rector\\Core\\PhpParser\\NodeTransformer' => $baseDir . '/src/PhpParser/NodeTransformer.php',
'Rector\\Core\\PhpParser\\NodeTraverser\\RectorNodeTraverser' => $baseDir . '/src/PhpParser/NodeTraverser/RectorNodeTraverser.php',
'Rector\\Core\\PhpParser\\NodeVisitor\\CreatedByRuleNodeVisitor' => $baseDir . '/src/PhpParser/NodeVisitor/CreatedByRuleNodeVisitor.php',
'Rector\\Core\\PhpParser\\Node\\AssignAndBinaryMap' => $baseDir . '/src/PhpParser/Node/AssignAndBinaryMap.php',
'Rector\\Core\\PhpParser\\Node\\BetterNodeFinder' => $baseDir . '/src/PhpParser/Node/BetterNodeFinder.php',
'Rector\\Core\\PhpParser\\Node\\CustomNode\\FileWithoutNamespace' => $baseDir . '/src/PhpParser/Node/CustomNode/FileWithoutNamespace.php',
@ -1799,6 +1800,7 @@ return array(
'Rector\\Core\\Template\\TemplateTypeNotFound' => $baseDir . '/src/Template/TemplateTypeNotFound.php',
'Rector\\Core\\Util\\PhpVersionFactory' => $baseDir . '/src/Util/PhpVersionFactory.php',
'Rector\\Core\\Util\\StaticRectorStrings' => $baseDir . '/src/Util/StaticRectorStrings.php',
'Rector\\Core\\Validation\\InfiniteLoopValidator' => $baseDir . '/src/Validation/InfiniteLoopValidator.php',
'Rector\\Core\\ValueObjectFactory\\Application\\FileFactory' => $baseDir . '/src/ValueObjectFactory/Application/FileFactory.php',
'Rector\\Core\\ValueObjectFactory\\ProcessResultFactory' => $baseDir . '/src/ValueObjectFactory/ProcessResultFactory.php',
'Rector\\Core\\ValueObject\\Application\\File' => $baseDir . '/src/ValueObject/Application/File.php',

View File

@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
class ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48
class ComposerAutoloaderInita12e7b5de1a942b41a17590912c45195
{
private static $loader;
@ -22,15 +22,15 @@ class ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48', 'loadClassLoader'), true, true);
spl_autoload_register(array('ComposerAutoloaderInita12e7b5de1a942b41a17590912c45195', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInita12e7b5de1a942b41a17590912c45195', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInita3a01dcabb577976ff00f21b50974d48::getInitializer($loader));
call_user_func(\Composer\Autoload\ComposerStaticInita12e7b5de1a942b41a17590912c45195::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
@ -42,19 +42,19 @@ class ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInita3a01dcabb577976ff00f21b50974d48::$files;
$includeFiles = Composer\Autoload\ComposerStaticInita12e7b5de1a942b41a17590912c45195::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequirea3a01dcabb577976ff00f21b50974d48($fileIdentifier, $file);
composerRequirea12e7b5de1a942b41a17590912c45195($fileIdentifier, $file);
}
return $loader;
}
}
function composerRequirea3a01dcabb577976ff00f21b50974d48($fileIdentifier, $file)
function composerRequirea12e7b5de1a942b41a17590912c45195($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;

View File

@ -4,7 +4,7 @@
namespace Composer\Autoload;
class ComposerStaticInita3a01dcabb577976ff00f21b50974d48
class ComposerStaticInita12e7b5de1a942b41a17590912c45195
{
public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
@ -2096,6 +2096,7 @@ class ComposerStaticInita3a01dcabb577976ff00f21b50974d48
'Rector\\Core\\PhpParser\\NodeFinder\\PropertyFetchFinder' => __DIR__ . '/../..' . '/src/PhpParser/NodeFinder/PropertyFetchFinder.php',
'Rector\\Core\\PhpParser\\NodeTransformer' => __DIR__ . '/../..' . '/src/PhpParser/NodeTransformer.php',
'Rector\\Core\\PhpParser\\NodeTraverser\\RectorNodeTraverser' => __DIR__ . '/../..' . '/src/PhpParser/NodeTraverser/RectorNodeTraverser.php',
'Rector\\Core\\PhpParser\\NodeVisitor\\CreatedByRuleNodeVisitor' => __DIR__ . '/../..' . '/src/PhpParser/NodeVisitor/CreatedByRuleNodeVisitor.php',
'Rector\\Core\\PhpParser\\Node\\AssignAndBinaryMap' => __DIR__ . '/../..' . '/src/PhpParser/Node/AssignAndBinaryMap.php',
'Rector\\Core\\PhpParser\\Node\\BetterNodeFinder' => __DIR__ . '/../..' . '/src/PhpParser/Node/BetterNodeFinder.php',
'Rector\\Core\\PhpParser\\Node\\CustomNode\\FileWithoutNamespace' => __DIR__ . '/../..' . '/src/PhpParser/Node/CustomNode/FileWithoutNamespace.php',
@ -2128,6 +2129,7 @@ class ComposerStaticInita3a01dcabb577976ff00f21b50974d48
'Rector\\Core\\Template\\TemplateTypeNotFound' => __DIR__ . '/../..' . '/src/Template/TemplateTypeNotFound.php',
'Rector\\Core\\Util\\PhpVersionFactory' => __DIR__ . '/../..' . '/src/Util/PhpVersionFactory.php',
'Rector\\Core\\Util\\StaticRectorStrings' => __DIR__ . '/../..' . '/src/Util/StaticRectorStrings.php',
'Rector\\Core\\Validation\\InfiniteLoopValidator' => __DIR__ . '/../..' . '/src/Validation/InfiniteLoopValidator.php',
'Rector\\Core\\ValueObjectFactory\\Application\\FileFactory' => __DIR__ . '/../..' . '/src/ValueObjectFactory/Application/FileFactory.php',
'Rector\\Core\\ValueObjectFactory\\ProcessResultFactory' => __DIR__ . '/../..' . '/src/ValueObjectFactory/ProcessResultFactory.php',
'Rector\\Core\\ValueObject\\Application\\File' => __DIR__ . '/../..' . '/src/ValueObject/Application/File.php',
@ -3448,9 +3450,9 @@ class ComposerStaticInita3a01dcabb577976ff00f21b50974d48
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInita3a01dcabb577976ff00f21b50974d48::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInita3a01dcabb577976ff00f21b50974d48::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInita3a01dcabb577976ff00f21b50974d48::$classMap;
$loader->prefixLengthsPsr4 = ComposerStaticInita12e7b5de1a942b41a17590912c45195::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInita12e7b5de1a942b41a17590912c45195::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInita12e7b5de1a942b41a17590912c45195::$classMap;
}, null, ClassLoader::class);
}

View File

@ -21,8 +21,8 @@ if (!class_exists('SomeTestCase', false) && !interface_exists('SomeTestCase', fa
if (!class_exists('CheckoutEntityFactory', false) && !interface_exists('CheckoutEntityFactory', false) && !trait_exists('CheckoutEntityFactory', false)) {
spl_autoload_call('RectorPrefix20210516\CheckoutEntityFactory');
}
if (!class_exists('ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48', false) && !interface_exists('ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48', false) && !trait_exists('ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48', false)) {
spl_autoload_call('RectorPrefix20210516\ComposerAutoloaderInita3a01dcabb577976ff00f21b50974d48');
if (!class_exists('ComposerAutoloaderInita12e7b5de1a942b41a17590912c45195', false) && !interface_exists('ComposerAutoloaderInita12e7b5de1a942b41a17590912c45195', false) && !trait_exists('ComposerAutoloaderInita12e7b5de1a942b41a17590912c45195', false)) {
spl_autoload_call('RectorPrefix20210516\ComposerAutoloaderInita12e7b5de1a942b41a17590912c45195');
}
if (!class_exists('Doctrine\Inflector\Inflector', false) && !interface_exists('Doctrine\Inflector\Inflector', false) && !trait_exists('Doctrine\Inflector\Inflector', false)) {
spl_autoload_call('RectorPrefix20210516\Doctrine\Inflector\Inflector');
@ -95,9 +95,9 @@ if (!function_exists('print_node')) {
return \RectorPrefix20210516\print_node(...func_get_args());
}
}
if (!function_exists('composerRequirea3a01dcabb577976ff00f21b50974d48')) {
function composerRequirea3a01dcabb577976ff00f21b50974d48() {
return \RectorPrefix20210516\composerRequirea3a01dcabb577976ff00f21b50974d48(...func_get_args());
if (!function_exists('composerRequirea12e7b5de1a942b41a17590912c45195')) {
function composerRequirea12e7b5de1a942b41a17590912c45195() {
return \RectorPrefix20210516\composerRequirea12e7b5de1a942b41a17590912c45195(...func_get_args());
}
}
if (!function_exists('parseArgs')) {