@@ -116,7 +116,8 @@ public static function castFunctionAbstract(\ReflectionFunctionAbstract $c, arra
116
116
117
117
if (isset ($ a [$ prefix .'returnType ' ])) {
118
118
$ v = $ a [$ prefix .'returnType ' ];
119
- $ a [$ prefix .'returnType ' ] = $ v instanceof \ReflectionNamedType ? $ v ->getName () : $ v ->__toString ();
119
+ $ v = $ v instanceof \ReflectionNamedType ? $ v ->getName () : $ v ->__toString ();
120
+ $ a [$ prefix .'returnType ' ] = $ a [$ prefix .'returnType ' ]->allowsNull () ? '? ' .$ v : $ v ;
120
121
}
121
122
if (isset ($ a [$ prefix .'this ' ])) {
122
123
$ a [$ prefix .'this ' ] = new CutStub ($ a [$ prefix .'this ' ]);
@@ -168,21 +169,12 @@ public static function castParameter(\ReflectionParameter $c, array $a, Stub $st
168
169
'allowsNull ' => 'allowsNull ' ,
169
170
));
170
171
171
- try {
172
- if (method_exists ($ c , 'getType ' )) {
173
- if ($ v = $ c ->getType ()) {
174
- $ a [$ prefix .'typeHint ' ] = $ v instanceof \ReflectionNamedType ? $ v ->getName () : $ v ->__toString ();
175
- }
176
- } else {
177
- $ v = explode (' ' , $ c ->__toString (), 6 );
178
- if (isset ($ v [5 ]) && 0 === strspn ($ v [4 ], '.&$ ' )) {
179
- $ a [$ prefix .'typeHint ' ] = $ v [4 ];
180
- }
181
- }
182
- } catch (\ReflectionException $ e ) {
183
- if (preg_match ('/^Class ([^ ]++) does not exist$/ ' , $ e ->getMessage (), $ m )) {
184
- $ a [$ prefix .'typeHint ' ] = $ m [1 ];
172
+ if (method_exists ($ c , 'getType ' )) {
173
+ if ($ v = $ c ->getType ()) {
174
+ $ a [$ prefix .'typeHint ' ] = $ v instanceof \ReflectionNamedType ? $ v ->getName () : $ v ->__toString ();
185
175
}
176
+ } elseif (preg_match ('/^(?:[^ ]++ ){4}([a-zA-Z_\x7F-\xFF][^ ]++)/ ' , $ c , $ v )) {
177
+ $ a [$ prefix .'typeHint ' ] = $ v [1 ];
186
178
}
187
179
if (!isset ($ a [$ prefix .'typeHint ' ])) {
188
180
unset($ a [$ prefix .'allowsNull ' ]);
0 commit comments