Skip to content

Commit 08dd4d4

Browse files
committed
Updated Rector to commit bc17200ed451d606aaebe40b2349d9675629a995
rectorphp/rector-src@bc17200 Fix ReplaceArgumentDefaultValueRector generating invalid self:: constant in unrelated classes (#8023)
1 parent 4ea80ec commit 08dd4d4

10 files changed

Lines changed: 216 additions & 58 deletions

File tree

rules/Arguments/ArgumentDefaultValueReplacer.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515
use PhpParser\Node\Identifier;
1616
use PhpParser\Node\Name;
1717
use PhpParser\Node\Stmt\ClassMethod;
18+
use PHPStan\Reflection\ClassReflection;
1819
use Rector\Arguments\Contract\ReplaceArgumentDefaultValueInterface;
1920
use Rector\Arguments\ValueObject\ReplaceArgumentDefaultValue;
2021
use Rector\NodeAnalyzer\ArgsAnalyzer;
2122
use Rector\NodeTypeResolver\NodeTypeResolver;
2223
use Rector\PhpParser\AstResolver;
2324
use Rector\PhpParser\Node\NodeFactory;
2425
use Rector\PhpParser\Node\Value\ValueResolver;
26+
use Rector\Reflection\ReflectionResolver;
2527
use Rector\StaticTypeMapper\ValueObject\Type\FullyQualifiedObjectType;
2628
final class ArgumentDefaultValueReplacer
2729
{
@@ -45,13 +47,18 @@ final class ArgumentDefaultValueReplacer
4547
* @readonly
4648
*/
4749
private NodeTypeResolver $nodeTypeResolver;
48-
public function __construct(NodeFactory $nodeFactory, ValueResolver $valueResolver, ArgsAnalyzer $argsAnalyzer, AstResolver $astResolver, NodeTypeResolver $nodeTypeResolver)
50+
/**
51+
* @readonly
52+
*/
53+
private ReflectionResolver $reflectionResolver;
54+
public function __construct(NodeFactory $nodeFactory, ValueResolver $valueResolver, ArgsAnalyzer $argsAnalyzer, AstResolver $astResolver, NodeTypeResolver $nodeTypeResolver, ReflectionResolver $reflectionResolver)
4955
{
5056
$this->nodeFactory = $nodeFactory;
5157
$this->valueResolver = $valueResolver;
5258
$this->argsAnalyzer = $argsAnalyzer;
5359
$this->astResolver = $astResolver;
5460
$this->nodeTypeResolver = $nodeTypeResolver;
61+
$this->reflectionResolver = $reflectionResolver;
5562
}
5663
/**
5764
* @template TCall as (MethodCall|StaticCall|ClassMethod|FuncCall|New_)
@@ -156,6 +163,18 @@ private function processArgs($expr, ReplaceArgumentDefaultValueInterface $replac
156163
return null;
157164
}
158165
}
166+
// when the replacement value is a self::/static::/parent:: constant, it only
167+
// resolves correctly if the class around the call actually has that constant;
168+
// otherwise the produced code would reference a non-existing constant
169+
if ($normalizedValueAfter instanceof ClassConstFetch && $normalizedValueAfter->class instanceof Name && $normalizedValueAfter->class->isSpecialClassName() && $normalizedValueAfter->name instanceof Identifier) {
170+
$classReflection = $this->reflectionResolver->resolveClassReflection($expr);
171+
if (!$classReflection instanceof ClassReflection) {
172+
return null;
173+
}
174+
if (!$classReflection->hasConstant($normalizedValueAfter->name->toString())) {
175+
return null;
176+
}
177+
}
159178
$particularArg->value = $normalizedValueAfter;
160179
return $expr;
161180
}

src/Application/VersionResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ final class VersionResolver
1919
* @api
2020
* @var string
2121
*/
22-
public const PACKAGE_VERSION = '56fa09d6ace1b1cef0c5445be65fbedfdb61e0d9';
22+
public const PACKAGE_VERSION = 'bc17200ed451d606aaebe40b2349d9675629a995';
2323
/**
2424
* @api
2525
* @var string
2626
*/
27-
public const RELEASE_DATE = '2026-06-02 21:16:56';
27+
public const RELEASE_DATE = '2026-06-02 21:36:43';
2828
/**
2929
* @var int
3030
*/

vendor/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2724,6 +2724,7 @@
27242724
'Rector\\Symfony\\Symfony73\\Rector\\Class_\\GetFiltersToAsTwigFilterAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony73/Rector/Class_/GetFiltersToAsTwigFilterAttributeRector.php',
27252725
'Rector\\Symfony\\Symfony73\\Rector\\Class_\\GetFunctionsToAsTwigFunctionAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony73/Rector/Class_/GetFunctionsToAsTwigFunctionAttributeRector.php',
27262726
'Rector\\Symfony\\Symfony73\\Rector\\Class_\\InvokableCommandInputAttributeRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony73/Rector/Class_/InvokableCommandInputAttributeRector.php',
2727+
'Rector\\Symfony\\Symfony73\\ValueObject\\AsTwigAttributeConversion' => $vendorDir . '/rector/rector-symfony/rules/Symfony73/ValueObject/AsTwigAttributeConversion.php',
27272728
'Rector\\Symfony\\Symfony73\\ValueObject\\CommandArgument' => $vendorDir . '/rector/rector-symfony/rules/Symfony73/ValueObject/CommandArgument.php',
27282729
'Rector\\Symfony\\Symfony73\\ValueObject\\CommandOption' => $vendorDir . '/rector/rector-symfony/rules/Symfony73/ValueObject/CommandOption.php',
27292730
'Rector\\Symfony\\Symfony80\\Rector\\Class_\\RemoveEraseCredentialsRector' => $vendorDir . '/rector/rector-symfony/rules/Symfony80/Rector/Class_/RemoveEraseCredentialsRector.php',

vendor/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2984,6 +2984,7 @@ class ComposerStaticInit01276972c65a3d03f761e9dab07137cb
29842984
'Rector\\Symfony\\Symfony73\\Rector\\Class_\\GetFiltersToAsTwigFilterAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony73/Rector/Class_/GetFiltersToAsTwigFilterAttributeRector.php',
29852985
'Rector\\Symfony\\Symfony73\\Rector\\Class_\\GetFunctionsToAsTwigFunctionAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony73/Rector/Class_/GetFunctionsToAsTwigFunctionAttributeRector.php',
29862986
'Rector\\Symfony\\Symfony73\\Rector\\Class_\\InvokableCommandInputAttributeRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony73/Rector/Class_/InvokableCommandInputAttributeRector.php',
2987+
'Rector\\Symfony\\Symfony73\\ValueObject\\AsTwigAttributeConversion' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony73/ValueObject/AsTwigAttributeConversion.php',
29872988
'Rector\\Symfony\\Symfony73\\ValueObject\\CommandArgument' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony73/ValueObject/CommandArgument.php',
29882989
'Rector\\Symfony\\Symfony73\\ValueObject\\CommandOption' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony73/ValueObject/CommandOption.php',
29892990
'Rector\\Symfony\\Symfony80\\Rector\\Class_\\RemoveEraseCredentialsRector' => __DIR__ . '/..' . '/rector/rector-symfony/rules/Symfony80/Rector/Class_/RemoveEraseCredentialsRector.php',

vendor/composer/installed.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1870,12 +1870,12 @@
18701870
"source": {
18711871
"type": "git",
18721872
"url": "https:\/\/github.com\/rectorphp\/rector-symfony.git",
1873-
"reference": "39fb6b5918310a336dfba64a4624a54cea57eafc"
1873+
"reference": "96774903f6a0bd4891f74dc0cb682e529ef83581"
18741874
},
18751875
"dist": {
18761876
"type": "zip",
1877-
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/39fb6b5918310a336dfba64a4624a54cea57eafc",
1878-
"reference": "39fb6b5918310a336dfba64a4624a54cea57eafc",
1877+
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-symfony\/zipball\/96774903f6a0bd4891f74dc0cb682e529ef83581",
1878+
"reference": "96774903f6a0bd4891f74dc0cb682e529ef83581",
18791879
"shasum": ""
18801880
},
18811881
"require": {
@@ -1910,7 +1910,7 @@
19101910
"tomasvotruba\/unused-public": "^2.2",
19111911
"tracy\/tracy": "^2.12"
19121912
},
1913-
"time": "2026-05-31T01:50:00+00:00",
1913+
"time": "2026-06-02T19:30:46+00:00",
19141914
"default-branch": true,
19151915
"type": "rector-extension",
19161916
"extra": {

0 commit comments

Comments
 (0)