@@ -81,7 +81,7 @@ public function changeNodeVisibility($node, int $visibility) : void
8181 $ this ->replaceVisibilityFlag ($ node , $ visibility );
8282 }
8383 /**
84- * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\ClassConst $node
84+ * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\ClassConst|\PhpParser\Node\Param $node
8585 */
8686 public function makePublic ($ node ) : void
8787 {
@@ -130,7 +130,12 @@ public function isReadonly($node) : bool
130130 */
131131 public function removeReadonly ($ node ) : void
132132 {
133- $ this ->removeVisibilityFlag ($ node , Visibility::READONLY );
133+ $ isConstructorPromotionBefore = $ node instanceof Param && $ node ->isPromoted ();
134+ $ node ->flags &= ~Modifiers::READONLY ;
135+ $ isConstructorPromotionAfter = $ node instanceof Param && $ node ->isPromoted ();
136+ if ($ node instanceof Param && $ isConstructorPromotionBefore && !$ isConstructorPromotionAfter ) {
137+ $ this ->makePublic ($ node );
138+ }
134139 }
135140 /**
136141 * @param \PhpParser\Node\Stmt\ClassConst|\PhpParser\Node\Stmt\ClassMethod $node
@@ -182,13 +187,6 @@ private function addVisibilityFlag($node, int $visibility) : void
182187 {
183188 $ node ->flags |= $ visibility ;
184189 }
185- /**
186- * @param \PhpParser\Node\Stmt\Class_|\PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\ClassConst|\PhpParser\Node\Param $node
187- */
188- private function removeVisibilityFlag ($ node , int $ visibility ) : void
189- {
190- $ node ->flags &= ~$ visibility ;
191- }
192190 /**
193191 * @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Stmt\Property|\PhpParser\Node\Stmt\ClassConst|\PhpParser\Node\Param $node
194192 */
0 commit comments