99
1010/**
1111 * @phpstan-import-type ArgNodePayload from ArgNode
12+ * @phpstan-import-type AutowireNodePayload from AutowireNode
1213 * @phpstan-import-type TypePayload from Type
1314 *
1415 * @phpstan-type FieldNodePayload array{
1516 * type: TypePayload,
1617 * name: string,
1718 * description: null|string,
18- * argNodes: list<ArgNodePayload>,
19+ * argumentNodes: list<array{
20+ * node: class-string<ArgNode|AutowireNode>,
21+ * payload: ArgNodePayload|AutowireNodePayload
22+ * }>,
1923 * fieldType: string,
2024 * methodName: null|string,
2125 * propertyName: null|string,
2731final readonly class FieldNode implements ArraySerializable
2832{
2933 /**
30- * @param list<ArgNode> $argNodes
34+ * @param list<ArgNode|AutowireNode > $argumentNodes
3135 */
3236 public function __construct (
3337 public Type $ type ,
3438 public string $ name ,
3539 public ?string $ description ,
36- public array $ argNodes ,
40+ public array $ argumentNodes ,
3741 public FieldNodeType $ fieldType ,
3842 public ?string $ methodName ,
3943 public ?string $ propertyName ,
@@ -42,11 +46,19 @@ public function __construct(
4246
4347 public function toArray (): array
4448 {
49+ $ argumentNodes = [];
50+ foreach ($ this ->argumentNodes as $ argumentNode ) {
51+ $ argumentNodes [] = [
52+ 'node ' => $ argumentNode ::class,
53+ 'payload ' => $ argumentNode ->toArray (),
54+ ];
55+ }
56+
4557 return [
4658 'type ' => $ this ->type ->toArray (),
4759 'name ' => $ this ->name ,
4860 'description ' => $ this ->description ,
49- 'argNodes ' => array_map ( fn ( $ argNode ) => $ argNode -> toArray (), $ this -> argNodes ) ,
61+ 'argumentNodes ' => $ argumentNodes ,
5062 'fieldType ' => $ this ->fieldType ->value ,
5163 'methodName ' => $ this ->methodName ,
5264 'propertyName ' => $ this ->propertyName ,
@@ -56,11 +68,23 @@ public function toArray(): array
5668
5769 public static function fromArray (array $ payload ): FieldNode
5870 {
71+ $ argumentNodes = [];
72+ foreach ($ payload ['argumentNodes ' ] as $ argumentNode ) {
73+ $ argumentPayload = $ argumentNode ['payload ' ];
74+ if ($ argumentNode ['node ' ] === ArgNode::class) {
75+ /** @var ArgNodePayload $argumentPayload */
76+ $ argumentNodes [] = ArgNode::fromArray ($ argumentPayload );
77+ } else {
78+ /** @var AutowireNodePayload $argumentPayload */
79+ $ argumentNodes [] = AutowireNode::fromArray ($ argumentPayload );
80+ }
81+ }
82+
5983 return new self (
6084 Type::fromArray ($ payload ['type ' ]),
6185 $ payload ['name ' ],
6286 $ payload ['description ' ],
63- array_map ( fn ( $ argNodePayload ) => ArgNode:: fromArray ( $ argNodePayload ), $ payload [ ' argNodes ' ]) ,
87+ $ argumentNodes ,
6488 FieldNodeType::from ($ payload ['fieldType ' ]),
6589 $ payload ['methodName ' ],
6690 $ payload ['propertyName ' ],
0 commit comments