diff --git a/packages/CodeQuality/src/Rector/Class_/CompleteDynamicPropertiesRector.php b/packages/CodeQuality/src/Rector/Class_/CompleteDynamicPropertiesRector.php index 0df05436b47c..d930cb4201e7 100644 --- a/packages/CodeQuality/src/Rector/Class_/CompleteDynamicPropertiesRector.php +++ b/packages/CodeQuality/src/Rector/Class_/CompleteDynamicPropertiesRector.php @@ -7,6 +7,7 @@ use PhpParser\Node\Expr\Assign; use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticCall; +use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Property; @@ -185,8 +186,15 @@ private function resolveFetchedLocalPropertyNameToTypes(Class_ $class): array return null; } - /** @var string $propertyName */ + if ($node->name instanceof Variable) { + return null; + } + $propertyName = $this->getName($node->name); + if ($propertyName === null) { + return null; + } + $propertyFetchType = $this->resolvePropertyFetchType($node); $fetchedLocalPropertyNameToTypes[$propertyName][] = $propertyFetchType; diff --git a/packages/CodeQuality/tests/Rector/Class_/CompleteDynamicPropertiesRector/CompleteDynamicPropertiesRectorTest.php b/packages/CodeQuality/tests/Rector/Class_/CompleteDynamicPropertiesRector/CompleteDynamicPropertiesRectorTest.php index 1d9773ec857c..b37fa43bc2bd 100644 --- a/packages/CodeQuality/tests/Rector/Class_/CompleteDynamicPropertiesRector/CompleteDynamicPropertiesRectorTest.php +++ b/packages/CodeQuality/tests/Rector/Class_/CompleteDynamicPropertiesRector/CompleteDynamicPropertiesRectorTest.php @@ -18,6 +18,7 @@ public function test(): void __DIR__ . '/Fixture/skip_magic_parent.php.inc', __DIR__ . '/Fixture/skip_magic.php.inc', __DIR__ . '/Fixture/skip_laravel_closure_binding.php.inc', + __DIR__ . '/Fixture/skip_dynamic_properties.php.inc', ]); } diff --git a/packages/CodeQuality/tests/Rector/Class_/CompleteDynamicPropertiesRector/Fixture/skip_dynamic_properties.php.inc b/packages/CodeQuality/tests/Rector/Class_/CompleteDynamicPropertiesRector/Fixture/skip_dynamic_properties.php.inc new file mode 100644 index 000000000000..9803c3422839 --- /dev/null +++ b/packages/CodeQuality/tests/Rector/Class_/CompleteDynamicPropertiesRector/Fixture/skip_dynamic_properties.php.inc @@ -0,0 +1,14 @@ + $v) { + $this->$k = $v; + } + } +}