From 931e6e24502a70dd19cd93c0ef10510b23213f87 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 26 Apr 2023 11:35:16 +0700 Subject: [PATCH] [PHPStanStaticTypeMapper] Improve UnionTypeMapper performance take 2 (#3688) * [PHPStanStaticTypeMapper] Improve UnionTypeMapper take 2 No need to verify bool and false exists when count types only 2 as already verified previously for all bool * clean up * [ci-review] Rector Rectify --------- Co-authored-by: GitHub Action --- .../TypeMapper/UnionTypeMapper.php | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php b/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php index 2c8d70c8c2f..9d45d5bd158 100644 --- a/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php +++ b/packages/PHPStanStaticTypeMapper/TypeMapper/UnionTypeMapper.php @@ -246,29 +246,30 @@ private function resolveUnionTypes(PhpParserUnionType $phpParserUnionType): ?Php return null; } + if (count($phpParserUnionType->types) === 2) { + return $phpParserUnionType; + } + $identifierNames = []; foreach ($phpParserUnionType->types as $type) { if ($type instanceof Identifier) { $identifierNames[] = $type->toString(); } } - + if (! in_array('bool', $identifierNames, true)) { return $phpParserUnionType; } - + if (! in_array('false', $identifierNames, true)) { return $phpParserUnionType; } - foreach ($phpParserUnionType->types as $key => $type) { - if ($type instanceof Identifier && $type->toString() === 'false') { - unset($phpParserUnionType->types[$key]); - $phpParserUnionType->types = array_values($phpParserUnionType->types); - - return $phpParserUnionType; - } - } + $phpParserUnionType->types = array_filter( + $phpParserUnionType->types, + static fn(Node $node): bool => ! $node instanceof Identifier || $node->toString() !== 'false' + ); + $phpParserUnionType->types = array_values($phpParserUnionType->types); return $phpParserUnionType; }