11
11
use PhpParser \Node \Stmt \ClassMethod ;
12
12
use PhpParser \Node \Stmt \Namespace_ ;
13
13
use PhpParser \Node \Stmt \Use_ ;
14
+ use PhpParser \Node \UnionType ;
14
15
use PhpParser \ParserFactory ;
15
16
16
17
/**
@@ -74,15 +75,14 @@ public function getMethods(): array
74
75
protected function processStatements (array $ statements , string $ prefix = '' )
75
76
{
76
77
$ uses = [];
77
-
78
78
foreach ($ statements as $ statement ) {
79
79
if ($ statement instanceof Namespace_) {
80
80
return $ this ->processStatements ($ statement ->stmts , (string )$ statement ->name );
81
81
}
82
82
83
83
if ($ statement instanceof Use_) {
84
84
foreach ($ statement ->uses as $ use ) {
85
- $ uses [(string ) $ use ->alias ] = (string )$ use ->name ;
85
+ $ uses [(string )$ use ->alias ] = (string )$ use ->name ;
86
86
}
87
87
}
88
88
@@ -102,26 +102,37 @@ protected function processStatements(array $statements, string $prefix = '')
102
102
continue ;
103
103
}
104
104
105
- $ fullMethodName = $ fullClassName . ':: ' . ( string ) $ method ->name ;
105
+ $ fullMethodName = $ fullClassName . ':: ' . $ method ->name ;
106
106
107
107
$ returnType = $ method ->returnType ;
108
-
109
- if (!$ method ->returnType instanceof NullableType) {
108
+ if ($ method ->returnType instanceof NullableType) {
109
+ $ returnType = [$ returnType ->type , 'null ' ];
110
+ } elseif ($ method ->returnType instanceof UnionType) {
111
+ $ returnType = $ returnType ->types ;
112
+ } else {
110
113
if (!\is_null ($ returnType )) {
111
114
$ returnType = (string )$ returnType ;
112
115
}
113
- } else {
114
- $ returnType = (string )$ returnType ->type ;
115
116
}
116
117
117
- if (isset ($ uses [$ returnType ])) {
118
- $ returnType = $ uses [$ returnType ];
119
- }
118
+ $ returnType = (array )$ returnType ;
119
+ foreach ($ returnType as &$ returnTypeItem ) {
120
+ if (isset ($ uses [(string )$ returnTypeItem ])) {
121
+ $ returnTypeItem = $ uses [(string )$ returnTypeItem ];
122
+ }
120
123
121
- $ returnType = \substr ((string )$ returnType , 0 , 1 ) === '\\' ? \substr ((string )$ returnType , 1 ) : $ returnType ;
124
+ $ returnTypeItem = \substr ((string )$ returnTypeItem , 0 , 1 ) === '\\'
125
+ ? \substr ((string )$ returnTypeItem , 1 )
126
+ : $ returnTypeItem ;
122
127
123
- if ($ method ->returnType instanceof NullableType) {
124
- $ returnType = [$ returnType , 'null ' ];
128
+ $ returnTypeItem = (null !== $ returnTypeItem )
129
+ ? (string )$ returnTypeItem
130
+ : null ;
131
+ }
132
+ unset($ returnTypeItem );
133
+
134
+ if (1 === \count ($ returnType )) {
135
+ $ returnType = (string )$ returnType [0 ];
125
136
}
126
137
127
138
$ thisMethod = [
@@ -136,32 +147,40 @@ protected function processStatements(array $statements, string $prefix = '')
136
147
137
148
foreach ($ method ->params as $ param ) {
138
149
$ paramType = $ param ->type ;
139
-
140
- if (!$ param ->type instanceof NullableType) {
150
+ if ($ param ->type instanceof NullableType) {
151
+ $ paramType = [$ paramType ->type , 'null ' ];
152
+ } elseif (
153
+ !empty ($ param ->default ->name ->parts [0 ]) &&
154
+ 'null ' === $ param ->default ->name ->parts [0 ]
155
+ ) {
141
156
if (!\is_null ($ param ->type )) {
142
- $ paramType = (string )$ paramType ;
157
+ $ paramType = [$ paramType , 'null ' ];
158
+ } else {
159
+ $ paramType = ['<any> ' , 'null ' ];
143
160
}
161
+ } elseif ($ param ->type instanceof UnionType) {
162
+ $ paramType = $ paramType ->types ;
144
163
} else {
145
- $ paramType = (string )$ paramType ->type ;
164
+ if (!\is_null ($ paramType )) {
165
+ $ paramType = (string )$ paramType ;
166
+ }
146
167
}
147
168
148
- if (isset ($ uses [$ paramType ])) {
149
- $ paramType = $ uses [$ paramType ];
150
- }
169
+ $ paramType = (array )$ paramType ;
170
+ foreach ($ paramType as &$ paramTypeItem ) {
171
+ if (isset ($ uses [(string )$ paramTypeItem ])) {
172
+ $ paramTypeItem = $ uses [(string )$ paramTypeItem ];
173
+ }
151
174
152
- $ paramType = \substr ((string )$ paramType , 0 , 1 ) === '\\' ? \substr ((string )$ paramType , 1 ) : $ paramType ;
175
+ $ paramTypeItem = \substr ((string )$ paramTypeItem , 0 , 1 ) === '\\'
176
+ ? \substr ((string )$ paramTypeItem , 1 )
177
+ : $ paramTypeItem ;
153
178
154
- if (
155
- $ param ->type instanceof NullableType
156
- ) {
157
- $ paramType = [$ paramType , 'null ' ];
158
- } elseif (!empty ($ param ->default ->name ->parts [0 ]) && 'null ' === $ param ->default ->name ->parts [0 ]) {
159
- if (!\is_null ($ param ->type )) {
160
- $ paramType = [$ paramType , 'null ' ];
161
- } else {
162
- $ paramType = ['<any> ' , 'null ' ];
163
- }
179
+ $ paramTypeItem = (null !== $ paramTypeItem )
180
+ ? (string )$ paramTypeItem
181
+ : null ;
164
182
}
183
+ unset($ paramTypeItem );
165
184
166
185
$ thisMethod ['params ' ]['$ ' .$ param ->var ->name ] = $ paramType ;
167
186
}
0 commit comments