diff --git a/packages/TypeDeclaration/src/Rector/FunctionLike/ReturnTypeDeclarationRector.php b/packages/TypeDeclaration/src/Rector/FunctionLike/ReturnTypeDeclarationRector.php index 686187cfc7ae..cb4d3b763dfc 100644 --- a/packages/TypeDeclaration/src/Rector/FunctionLike/ReturnTypeDeclarationRector.php +++ b/packages/TypeDeclaration/src/Rector/FunctionLike/ReturnTypeDeclarationRector.php @@ -145,6 +145,13 @@ public function refactor(Node $node): ?Node } } + // nullable aase + if ($currentType instanceof UnionType && $inferedType instanceof UnionType) { + if ($inferedType->isSubTypeOf($currentType)->yes()) { + return null; + } + } + // @see https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters if ($this->isAtLeastPhpVersion('7.4') && $isSubtype) { $node->returnType = $inferredReturnNode; diff --git a/packages/TypeDeclaration/tests/Rector/FunctionLike/ReturnTypeDeclarationRector/Fixture/issue2383.php.inc b/packages/TypeDeclaration/tests/Rector/FunctionLike/ReturnTypeDeclarationRector/Fixture/issue2383.php.inc new file mode 100644 index 000000000000..eb43e52f6d01 --- /dev/null +++ b/packages/TypeDeclaration/tests/Rector/FunctionLike/ReturnTypeDeclarationRector/Fixture/issue2383.php.inc @@ -0,0 +1,25 @@ +