1919use PhpParser \NodeTraverser ;
2020use PhpParser \NodeVisitor ;
2121use PhpParser \Parser ;
22+ use PhpParser \PrettyPrinter \Standard ;
23+ use PhpParser \PrettyPrinterAbstract ;
2224
2325final class ClassMethodBuilder
2426{
@@ -67,8 +69,12 @@ private function __construct()
6769 {
6870 }
6971
70- public static function fromNode (Node \Stmt \ClassMethod $ node ): self
72+ public static function fromNode (Node \Stmt \ClassMethod $ node, bool $ typed = true , PrettyPrinterAbstract $ printer = null ): self
7173 {
74+ if (null === $ printer ) {
75+ $ printer = new Standard (['shortArraySyntax ' => true ]);
76+ }
77+
7278 $ self = new self ();
7379
7480 $ self ->name = $ node ->name ->toString ();
@@ -81,8 +87,10 @@ public static function fromNode(Node\Stmt\ClassMethod $node): self
8187 $ self ->parameters [] = ParameterBuilder::fromNode ($ param );
8288 }
8389
84- if ($ self ->returnType !== null ) {
85- $ self ->typed = true ;
90+ $ self ->typed = $ typed ;
91+
92+ if (null !== $ node ->stmts ) {
93+ $ self ->body = $ printer ->prettyPrint ($ node ->stmts );
8694 }
8795
8896 return $ self ;
@@ -134,6 +142,13 @@ public function getParameters(): array
134142 return $ this ->parameters ;
135143 }
136144
145+ public function setTyped (bool $ typed ): self
146+ {
147+ $ this ->typed = $ typed ;
148+
149+ return $ this ;
150+ }
151+
137152 public function isTyped (): bool
138153 {
139154 return $ this ->typed ;
@@ -165,29 +180,35 @@ public function getDocBlockComment(): ?string
165180 return $ this ->docBlockComment ;
166181 }
167182
168- public function setDocBlockComment (?string $ docBlockComment ): void
183+ public function setDocBlockComment (?string $ docBlockComment ): self
169184 {
170185 $ this ->docBlockComment = $ docBlockComment ;
186+
187+ return $ this ;
171188 }
172189
173190 public function getReturnTypeDocBlockHint (): string
174191 {
175192 return $ this ->returnTypeDocBlockHint ;
176193 }
177194
178- public function setReturnTypeDocBlockHint (?string $ typeDocBlockHint ): void
195+ public function setReturnTypeDocBlockHint (?string $ typeDocBlockHint ): self
179196 {
180197 $ this ->returnTypeDocBlockHint = $ typeDocBlockHint ;
198+
199+ return $ this ;
181200 }
182201
183202 public function getDocBlock (): ?DocBlock
184203 {
185204 return $ this ->docBlock ;
186205 }
187206
188- public function overrideDocBlock (?DocBlock $ docBlock ): void
207+ public function overrideDocBlock (?DocBlock $ docBlock ): self
189208 {
190209 $ this ->docBlock = $ docBlock ;
210+
211+ return $ this ;
191212 }
192213
193214 public function setFinal (bool $ final ): self
0 commit comments