diff --git a/phpstan.neon b/phpstan.neon index b19da80279e..2872d2d05ab 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -319,6 +319,7 @@ parameters: identifier: symplify.forbiddenFuncCall paths: - src/functions/node_helper.php + - src/functions/rule_class_aliases.php - src/Util/Reflection/PrivatesAccessor.php # it may return array in case of empty array( , , ), very rare and would nullify all other types diff --git a/src/functions/rule_class_aliases.php b/src/functions/rule_class_aliases.php index 9e5338a8f0d..9545970c31f 100644 --- a/src/functions/rule_class_aliases.php +++ b/src/functions/rule_class_aliases.php @@ -9,13 +9,16 @@ // backward-compatibility aliases for rules retargeted to Class_/ClassLike nodes and moved out of the ClassMethod namespace, // so configs and 3rd party sets referencing the former namespace keep working -$ruleClassAliases = [ - ChangeMethodVisibilityRector::class => 'Rector\Visibility\Rector\ClassMethod\ChangeMethodVisibilityRector', - RemoveParentDelegatingClassMethodRector::class => 'Rector\DeadCode\Rector\ClassMethod\RemoveParentDelegatingClassMethodRector', - ReturnTypeFromMockObjectRector::class => 'Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromMockObjectRector', - AddVoidReturnTypeWhereNoReturnRector::class => 'Rector\TypeDeclaration\Rector\ClassMethod\AddVoidReturnTypeWhereNoReturnRector', +$legacyToCurrentRuleClasses = [ + 'Rector\Visibility\Rector\ClassMethod\ChangeMethodVisibilityRector' => ChangeMethodVisibilityRector::class, + 'Rector\DeadCode\Rector\ClassMethod\RemoveParentDelegatingClassMethodRector' => RemoveParentDelegatingClassMethodRector::class, + 'Rector\TypeDeclaration\Rector\ClassMethod\ReturnTypeFromMockObjectRector' => ReturnTypeFromMockObjectRector::class, + 'Rector\TypeDeclaration\Rector\ClassMethod\AddVoidReturnTypeWhereNoReturnRector' => AddVoidReturnTypeWhereNoReturnRector::class, ]; -foreach ($ruleClassAliases as $currentClass => $legacyClass) { - class_alias($currentClass, $legacyClass); -} +// register lazily, so the current rule classes are only loaded when the legacy name is actually requested +spl_autoload_register(static function (string $class) use ($legacyToCurrentRuleClasses): void { + if (isset($legacyToCurrentRuleClasses[$class])) { + class_alias($legacyToCurrentRuleClasses[$class], $class); + } +});