From 31e22ff70699ac52c0cd4faee5b5f42291bb8ccb Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 26 Apr 2023 20:29:58 +0700 Subject: [PATCH] [PHPStanStaticTypeMapper] Improve performance of UnionTypeMapper take 3 (#3690) --- .../TypeMapper/UnionTypeMapper.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php index 9d45d5bd158..8bfcb0f11f1 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php @@ -131,7 +131,8 @@ public function mapToPhpParserNode(Type $type, string $typeKind): ?Node public function resolveTypeWithNullablePHPParserUnionType( PhpParserUnionType $phpParserUnionType ): PhpParserUnionType|NullableType|null { - if (count($phpParserUnionType->types) === 2) { + $totalTypes = count($phpParserUnionType->types); + if ($totalTypes === 2) { $phpParserUnionType->types = array_values($phpParserUnionType->types); $firstType = $phpParserUnionType->types[0]; $secondType = $phpParserUnionType->types[1]; @@ -140,14 +141,14 @@ public function resolveTypeWithNullablePHPParserUnionType( Assert::isAnyOf($firstType, [Name::class, Identifier::class]); Assert::isAnyOf($secondType, [Name::class, Identifier::class]); } catch (InvalidArgumentException) { - return $this->resolveUnionTypes($phpParserUnionType); + return $this->resolveUnionTypes($phpParserUnionType, $totalTypes); } $firstTypeValue = $firstType->toString(); $secondTypeValue = $secondType->toString(); if ($firstTypeValue === $secondTypeValue) { - return $this->resolveUnionTypes($phpParserUnionType); + return $this->resolveUnionTypes($phpParserUnionType, $totalTypes); } if ($firstTypeValue === 'null') { @@ -159,7 +160,7 @@ public function resolveTypeWithNullablePHPParserUnionType( } } - return $this->resolveUnionTypes($phpParserUnionType); + return $this->resolveUnionTypes($phpParserUnionType, $totalTypes); } private function resolveNullableType(NullableType $nullableType): null|NullableType|PhpParserUnionType @@ -240,13 +241,13 @@ private function matchArrayTypes(UnionType $unionType): Identifier | NullableTyp return new Identifier($type); } - private function resolveUnionTypes(PhpParserUnionType $phpParserUnionType): ?PhpParserUnionType + private function resolveUnionTypes(PhpParserUnionType $phpParserUnionType, int $totalTypes): ?PhpParserUnionType { if (! $this->phpVersionProvider->isAtLeastPhpVersion(PhpVersionFeature::UNION_TYPES)) { return null; } - if (count($phpParserUnionType->types) === 2) { + if ($totalTypes === 2) { return $phpParserUnionType; }