diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector/Fixture/skip_false_report_type.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector/Fixture/skip_false_report_type.php.inc new file mode 100644 index 00000000000..a883b562865 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedCallRector/Fixture/skip_false_report_type.php.inc @@ -0,0 +1,19 @@ +fakedTypes(); + } + + /** + * @return bool + */ + private function fakedTypes() + { + return 100; + } +} diff --git a/rules/TypeDeclaration/NodeAnalyzer/ReturnStrictTypeAnalyzer.php b/rules/TypeDeclaration/NodeAnalyzer/ReturnStrictTypeAnalyzer.php index 9dc65395ea0..142dc05a3bb 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/ReturnStrictTypeAnalyzer.php +++ b/rules/TypeDeclaration/NodeAnalyzer/ReturnStrictTypeAnalyzer.php @@ -12,6 +12,7 @@ use PhpParser\Node\Name; use PhpParser\Node\NullableType; use PhpParser\Node\Stmt\Return_; +use PHPStan\Reflection\FunctionVariantWithPhpDocs; use PHPStan\Type\MixedType; use Rector\Core\Reflection\ReflectionResolver; use Rector\PHPStanStaticTypeMapper\Enum\TypeKind; @@ -65,7 +66,13 @@ private function resolveMethodCallReturnNode(MethodCall | StaticCall | FuncCall } $parametersAcceptor = $methodReflection->getVariants()[0]; - $returnType = $parametersAcceptor->getReturnType(); + if ($parametersAcceptor instanceof FunctionVariantWithPhpDocs) { + // native return type is needed, as docblock can be false + $returnType = $parametersAcceptor->getNativeReturnType(); + } else { + $returnType = $parametersAcceptor->getReturnType(); + } + if ($returnType instanceof MixedType) { return null; }