diff --git a/rules-tests/CodeQuality/Rector/Class_/DynamicDocBlockPropertyToNativePropertyRector/Fixture/with_other_existing_attribute.php.inc b/rules-tests/CodeQuality/Rector/Class_/DynamicDocBlockPropertyToNativePropertyRector/Fixture/with_other_existing_attribute.php.inc new file mode 100644 index 00000000000..12fa3c20eaa --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Class_/DynamicDocBlockPropertyToNativePropertyRector/Fixture/with_other_existing_attribute.php.inc @@ -0,0 +1,38 @@ +someDependency = new SomeDependency(); + } +} + +?> +----- +someDependency = new SomeDependency(); + } +} + +?> diff --git a/rules/CodeQuality/Rector/Class_/DynamicDocBlockPropertyToNativePropertyRector.php b/rules/CodeQuality/Rector/Class_/DynamicDocBlockPropertyToNativePropertyRector.php index 24aa6f6b690..8aa13b19c78 100644 --- a/rules/CodeQuality/Rector/Class_/DynamicDocBlockPropertyToNativePropertyRector.php +++ b/rules/CodeQuality/Rector/Class_/DynamicDocBlockPropertyToNativePropertyRector.php @@ -113,8 +113,16 @@ public function refactor(Node $node): ?Node } // 1. remove dynamic attribute, most likely any - $node->attrGroups = []; + foreach ($node->attrGroups as $key => $attrGroup) { + foreach ($attrGroup->attrs as $attr) { + if ($attr->name->toString() === 'AllowDynamicProperties') { + unset($node->attrGroups[$key]); + continue 2; + } + } + } + $node->attrGroups = array_values($node->attrGroups); $newProperties = $this->createNewPropertyFromPropertyTagValueNodes($propertyPhpDocTagNodes, $node); // remove property tags