@@ -202,7 +202,7 @@ public function getVariants(): array
202
202
null ,
203
203
$ this ->getParameters (),
204
204
$ this ->isVariadic (),
205
- $ this -> getReturnType () ,
205
+ null ,
206
206
$ this ->getPhpDocReturnType (),
207
207
$ this ->getNativeReturnType (),
208
208
),
@@ -302,30 +302,9 @@ public function isPublic(): bool
302
302
private function getReturnType (): Type
303
303
{
304
304
if ($ this ->returnType === null ) {
305
- $ name = strtolower ($ this ->getName ());
306
- $ returnType = $ this ->reflection ->getReturnType ();
307
- if ($ returnType === null ) {
308
- if (in_array ($ name , ['__construct ' , '__destruct ' , '__unset ' , '__wakeup ' , '__clone ' ], true )) {
309
- return $ this ->returnType = TypehintHelper::decideType (new VoidType (), $ this ->phpDocReturnType );
310
- }
311
- if ($ name === '__tostring ' ) {
312
- return $ this ->returnType = TypehintHelper::decideType (new StringType (), $ this ->phpDocReturnType );
313
- }
314
- if ($ name === '__isset ' ) {
315
- return $ this ->returnType = TypehintHelper::decideType (new BooleanType (), $ this ->phpDocReturnType );
316
- }
317
- if ($ name === '__sleep ' ) {
318
- return $ this ->returnType = TypehintHelper::decideType (new ArrayType (new IntegerType (), new StringType ()), $ this ->phpDocReturnType );
319
- }
320
- if ($ name === '__set_state ' ) {
321
- return $ this ->returnType = TypehintHelper::decideType (new ObjectWithoutClassType (), $ this ->phpDocReturnType );
322
- }
323
- }
324
-
325
- $ this ->returnType = TypehintHelper::decideTypeFromReflection (
326
- $ returnType ,
305
+ $ this ->returnType = TypehintHelper::decideType (
306
+ $ this ->getNativeReturnType (),
327
307
$ this ->phpDocReturnType ,
328
- $ this ->declaringClass ,
329
308
);
330
309
}
331
310
@@ -344,8 +323,28 @@ private function getPhpDocReturnType(): Type
344
323
private function getNativeReturnType (): Type
345
324
{
346
325
if ($ this ->nativeReturnType === null ) {
326
+ $ returnType = $ this ->reflection ->getReturnType ();
327
+ if ($ returnType === null ) {
328
+ $ name = strtolower ($ this ->getName ());
329
+ if (in_array ($ this ->getName (), ['__construct ' , '__destruct ' , '__unset ' , '__wakeup ' , '__clone ' ], true )) {
330
+ return $ this ->nativeReturnType = new VoidType ();
331
+ }
332
+ if ($ name === '__tostring ' ) {
333
+ return $ this ->nativeReturnType = new StringType ();
334
+ }
335
+ if ($ name === '__isset ' ) {
336
+ return $ this ->nativeReturnType = new BooleanType ();
337
+ }
338
+ if ($ name === '__sleep ' ) {
339
+ return $ this ->nativeReturnType = new ArrayType (new IntegerType (), new StringType ());
340
+ }
341
+ if ($ name === '__set_state ' ) {
342
+ return $ this ->nativeReturnType = new ObjectWithoutClassType ();
343
+ }
344
+ }
345
+
347
346
$ this ->nativeReturnType = TypehintHelper::decideTypeFromReflection (
348
- $ this -> reflection -> getReturnType () ,
347
+ $ returnType ,
349
348
null ,
350
349
$ this ->declaringClass ,
351
350
);
0 commit comments