From e8b5a11ce47cad3232d703a1ba2905028d994842 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 19 Jul 2019 15:59:41 +0200 Subject: [PATCH] [CodeQuality] Fix CompleteDynamicPropertiesRector for dynamic property fetch --- .../Class_/CompleteDynamicPropertiesRector.php | 10 +++++++++- .../CompleteDynamicPropertiesRectorTest.php | 1 + .../Fixture/skip_dynamic_properties.php.inc | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 packages/CodeQuality/tests/Rector/Class_/CompleteDynamicPropertiesRector/Fixture/skip_dynamic_properties.php.inc 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; + } + } +}