From 673ce762abf3355fcdc186ca17eb89edf86993bf Mon Sep 17 00:00:00 2001 From: Maks Rafalko Date: Wed, 8 Nov 2023 15:29:03 +0100 Subject: [PATCH] Do not remove attributes from class methods when visibility is mutated (#1896) Previously, attributes were removed when e.g. `public` was mutated to `protected`. Now, attributes are retained. --- .../FunctionSignature/ProtectedVisibility.php | 1 + .../FunctionSignature/PublicVisibility.php | 1 + .../ProtectedVisibilityTest.php | 36 +++++++++++++++++++ .../PublicVisibilityTest.php | 36 +++++++++++++++++++ 4 files changed, 74 insertions(+) diff --git a/src/Mutator/FunctionSignature/ProtectedVisibility.php b/src/Mutator/FunctionSignature/ProtectedVisibility.php index 36e04d56a..ff5158b7a 100644 --- a/src/Mutator/FunctionSignature/ProtectedVisibility.php +++ b/src/Mutator/FunctionSignature/ProtectedVisibility.php @@ -82,6 +82,7 @@ public function mutate(Node $node): iterable 'params' => $node->getParams(), 'returnType' => $node->getReturnType(), 'stmts' => $node->getStmts(), + 'attrGroups' => $node->getAttrGroups(), ], $node->getAttributes() ); diff --git a/src/Mutator/FunctionSignature/PublicVisibility.php b/src/Mutator/FunctionSignature/PublicVisibility.php index 39023c1b3..14f345c56 100644 --- a/src/Mutator/FunctionSignature/PublicVisibility.php +++ b/src/Mutator/FunctionSignature/PublicVisibility.php @@ -81,6 +81,7 @@ public function mutate(Node $node): iterable 'params' => $node->getParams(), 'returnType' => $node->getReturnType(), 'stmts' => $node->getStmts(), + 'attrGroups' => $node->getAttrGroups(), ], $node->getAttributes() ); diff --git a/tests/phpunit/Mutator/FunctionSignature/ProtectedVisibilityTest.php b/tests/phpunit/Mutator/FunctionSignature/ProtectedVisibilityTest.php index 495a4f71d..b7f3ae09b 100644 --- a/tests/phpunit/Mutator/FunctionSignature/ProtectedVisibilityTest.php +++ b/tests/phpunit/Mutator/FunctionSignature/ProtectedVisibilityTest.php @@ -227,5 +227,41 @@ private function anything() } PHP ]; + + yield 'It does not remove attributes' => [ + <<<'PHP' + [ + <<<'PHP' +