From e1526ce432be31993056a3c8a85e6d38391de878 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 15 May 2022 22:51:14 +0200 Subject: [PATCH] add BuilderHelpers::addClassModifier() --- lib/PhpParser/Builder/Class_.php | 10 ++++++++-- lib/PhpParser/BuilderHelpers.php | 9 +++++++++ test/PhpParser/Builder/ClassTest.php | 14 ++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/lib/PhpParser/Builder/Class_.php b/lib/PhpParser/Builder/Class_.php index 87e2901a9a..35b54d0418 100644 --- a/lib/PhpParser/Builder/Class_.php +++ b/lib/PhpParser/Builder/Class_.php @@ -67,7 +67,7 @@ public function implement(...$interfaces) { * @return $this The builder instance (for fluid interface) */ public function makeAbstract() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT); + $this->flags = BuilderHelpers::addClassModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT); return $this; } @@ -78,7 +78,13 @@ public function makeAbstract() { * @return $this The builder instance (for fluid interface) */ public function makeFinal() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); + $this->flags = BuilderHelpers::addClassModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); + + return $this; + } + + public function makeReadonly() { + $this->flags = BuilderHelpers::addClassModifier($this->flags, Stmt\Class_::MODIFIER_READONLY); return $this; } diff --git a/lib/PhpParser/BuilderHelpers.php b/lib/PhpParser/BuilderHelpers.php index 2f0e912739..b8839db322 100644 --- a/lib/PhpParser/BuilderHelpers.php +++ b/lib/PhpParser/BuilderHelpers.php @@ -310,4 +310,13 @@ public static function addModifier(int $modifiers, int $modifier) : int { Stmt\Class_::verifyModifier($modifiers, $modifier); return $modifiers | $modifier; } + + /** + * Adds a modifier and returns new modifier bitmask. + * @return int New modifiers + */ + public static function addClassModifier(int $existingModifiers, int $modifierToSet) : int { + Stmt\Class_::verifyClassModifier($existingModifiers, $modifierToSet); + return $existingModifiers | $modifierToSet; + } } diff --git a/test/PhpParser/Builder/ClassTest.php b/test/PhpParser/Builder/ClassTest.php index cc362b09eb..67cae5d843 100644 --- a/test/PhpParser/Builder/ClassTest.php +++ b/test/PhpParser/Builder/ClassTest.php @@ -68,6 +68,20 @@ public function testFinal() { ); } + public function testReadonly() { + $node = $this->createClassBuilder('Test') + ->makeReadonly() + ->getNode() + ; + + $this->assertEquals( + new Stmt\Class_('Test', [ + 'flags' => Stmt\Class_::MODIFIER_READONLY + ]), + $node + ); + } + public function testStatementOrder() { $method = new Stmt\ClassMethod('testMethod'); $property = new Stmt\Property(