From a76127ffbb868f752b7718366c5bb0ff1d97fb88 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sat, 17 Aug 2019 00:36:45 +0200 Subject: [PATCH] fix lowercase of union fqn types --- .../src/Php/AbstractTypeInfo.php | 13 ++--- .../AddArrayReturnDocTypeRectorTest.php | 6 +- .../Fixture/fully_qualified_name.php.inc | 55 +++++++++++++++++++ .../Source/ValidationResult.php | 8 +++ 4 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/Fixture/fully_qualified_name.php.inc create mode 100644 packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/Source/ValidationResult.php diff --git a/packages/NodeTypeResolver/src/Php/AbstractTypeInfo.php b/packages/NodeTypeResolver/src/Php/AbstractTypeInfo.php index e94ced6bc77b..e67add2ce3cb 100644 --- a/packages/NodeTypeResolver/src/Php/AbstractTypeInfo.php +++ b/packages/NodeTypeResolver/src/Php/AbstractTypeInfo.php @@ -257,15 +257,14 @@ private function normalizeNullable(string $type): string private function normalizeCasing(string $type): string { - if ($this->typeAnalyzer->isPhpReservedType($type)) { - return strtolower($type); - } - - if (strtolower($type) === '$this') { - return strtolower($type); + $types = explode('|', $type); + foreach ($types as $key => $singleType) { + if ($this->typeAnalyzer->isPhpReservedType($singleType) || strtolower($singleType) === '$this') { + $types[$key] = strtolower($singleType); + } } - return $type; + return implode($types, '|'); } /** diff --git a/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/AddArrayReturnDocTypeRectorTest.php b/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/AddArrayReturnDocTypeRectorTest.php index a9c8139d7eed..11600f481d82 100644 --- a/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/AddArrayReturnDocTypeRectorTest.php +++ b/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/AddArrayReturnDocTypeRectorTest.php @@ -9,7 +9,11 @@ final class AddArrayReturnDocTypeRectorTest extends AbstractRectorTestCase { public function test(): void { - $this->doTestFiles([__DIR__ . '/Fixture/fixture.php.inc', __DIR__ . '/Fixture/setter_based.php.inc']); + $this->doTestFiles([ + __DIR__ . '/Fixture/fixture.php.inc', + __DIR__ . '/Fixture/setter_based.php.inc', + __DIR__ . '/Fixture/fully_qualified_name.php.inc', + ]); } protected function getRectorClass(): string diff --git a/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/Fixture/fully_qualified_name.php.inc b/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/Fixture/fully_qualified_name.php.inc new file mode 100644 index 000000000000..fe2a7a245be9 --- /dev/null +++ b/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/Fixture/fully_qualified_name.php.inc @@ -0,0 +1,55 @@ + [new ValidationResult(), 'ha_ja'], + ]; + } +} + +?> +----- + [new ValidationResult(), 'ha_ja'], + ]; + } +} + +?> diff --git a/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/Source/ValidationResult.php b/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/Source/ValidationResult.php new file mode 100644 index 000000000000..e29748d8640c --- /dev/null +++ b/packages/TypeDeclaration/tests/Rector/ClassMethod/AddArrayReturnDocTypeRector/Source/ValidationResult.php @@ -0,0 +1,8 @@ +