@@ -302,30 +302,9 @@ public function isPublic(): bool
302302 private function getReturnType (): Type
303303 {
304304 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 (),
327307 $ this ->phpDocReturnType ,
328- $ this ->declaringClass ,
329308 );
330309 }
331310
@@ -344,8 +323,28 @@ private function getPhpDocReturnType(): Type
344323 private function getNativeReturnType (): Type
345324 {
346325 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+ 347346 $ this ->nativeReturnType = TypehintHelper::decideTypeFromReflection (
348- $ this -> reflection -> getReturnType () ,
347+ $ returnType ,
349348 null ,
350349 $ this ->declaringClass ,
351350 );
0 commit comments