From 092ef3be68a8e478dec09bbeb779fff46b09c023 Mon Sep 17 00:00:00 2001 From: Ondrej Mirtes Date: Sun, 28 Aug 2022 11:27:01 +0200 Subject: [PATCH] Optimize match/enum performance --- src/Rules/Comparison/MatchExpressionRule.php | 45 + src/TrinaryLogic.php | 2 +- src/Type/IntersectionType.php | 20 +- src/Type/ObjectType.php | 36 +- src/Type/StaticType.php | 38 +- src/Type/UnionType.php | 6 +- .../Analyser/AnalyserIntegrationTest.php | 10 + tests/PHPStan/Analyser/data/bug-7176.php | 4 +- .../Analyser/data/match-performance-issue.php | 1029 +++++++++++++++++ .../Comparison/MatchExpressionRuleTest.php | 2 +- 10 files changed, 1151 insertions(+), 41 deletions(-) create mode 100644 tests/PHPStan/Analyser/data/match-performance-issue.php diff --git a/src/Rules/Comparison/MatchExpressionRule.php b/src/Rules/Comparison/MatchExpressionRule.php index d9c230d871..1bf3efb5e8 100644 --- a/src/Rules/Comparison/MatchExpressionRule.php +++ b/src/Rules/Comparison/MatchExpressionRule.php @@ -8,13 +8,19 @@ use PHPStan\Rules\Rule; use PHPStan\Rules\RuleErrorBuilder; use PHPStan\Type\Constant\ConstantBooleanType; +use PHPStan\Type\Enum\EnumCaseObjectType; use PHPStan\Type\NeverType; use PHPStan\Type\ObjectType; +use PHPStan\Type\SubtractableType; use PHPStan\Type\TypeCombinator; +use PHPStan\Type\TypeUtils; +use PHPStan\Type\TypeWithClassName; use PHPStan\Type\UnionType; use PHPStan\Type\VerbosityLevel; use UnhandledMatchError; +use function array_keys; use function array_map; +use function array_values; use function count; use function sprintf; @@ -85,6 +91,45 @@ public function processNode(Node $node, Scope $scope): array if (!$hasDefault && !$nextArmIsDead) { $remainingType = $node->getEndScope()->getType($matchCondition); + if ($remainingType instanceof TypeWithClassName && $remainingType instanceof SubtractableType) { + $subtractedType = $remainingType->getSubtractedType(); + if ($subtractedType !== null && $remainingType->getClassReflection() !== null) { + $classReflection = $remainingType->getClassReflection(); + if ($classReflection->isEnum()) { + $cases = []; + foreach (array_keys($classReflection->getEnumCases()) as $name) { + $cases[$name] = new EnumCaseObjectType($classReflection->getName(), $name); + } + + $subtractedTypes = TypeUtils::flattenTypes($subtractedType); + $set = true; + foreach ($subtractedTypes as $subType) { + if (!$subType instanceof EnumCaseObjectType) { + $set = false; + break; + } + + if ($subType->getClassName() !== $classReflection->getName()) { + $set = false; + break; + } + + unset($cases[$subType->getEnumCaseName()]); + } + + $cases = array_values($cases); + $casesCount = count($cases); + if ($set) { + if ($casesCount > 1) { + $remainingType = new UnionType($cases); + } + if ($casesCount === 1) { + $remainingType = $cases[0]; + } + } + } + } + } if ( !$remainingType instanceof NeverType && !$this->isUnhandledMatchErrorCaught($node) diff --git a/src/TrinaryLogic.php b/src/TrinaryLogic.php index 68fbfb7f27..a1d2c5a923 100644 --- a/src/TrinaryLogic.php +++ b/src/TrinaryLogic.php @@ -108,7 +108,7 @@ public static function maxMin(self ...$operands): self throw new ShouldNotHappenException(); } $operandValues = array_column($operands, 'value'); - return self::create(max($operandValues) > 0 ? max($operandValues) : min($operandValues)); + return self::create(max($operandValues) > 0 ? 1 : min($operandValues)); } public function negate(): self diff --git a/src/Type/IntersectionType.php b/src/Type/IntersectionType.php index 7f008d57c8..75ba1a8216 100644 --- a/src/Type/IntersectionType.php +++ b/src/Type/IntersectionType.php @@ -146,7 +146,12 @@ public function isSuperTypeOf(Type $otherType): TrinaryLogic $results = []; foreach ($this->getTypes() as $innerType) { - $results[] = $innerType->isSuperTypeOf($otherType); + $result = $innerType->isSuperTypeOf($otherType); + if ($result->no()) { + return $result; + } + + $results[] = $result; } return TrinaryLogic::createYes()->and(...$results); @@ -160,7 +165,11 @@ public function isSubTypeOf(Type $otherType): TrinaryLogic $results = []; foreach ($this->getTypes() as $innerType) { - $results[] = $otherType->isSuperTypeOf($innerType); + $result = $otherType->isSuperTypeOf($innerType); + if ($result->yes()) { + return $result; + } + $results[] = $result; } return TrinaryLogic::maxMin(...$results); @@ -170,7 +179,12 @@ public function isAcceptedBy(Type $acceptingType, bool $strictTypes): TrinaryLog { $results = []; foreach ($this->getTypes() as $innerType) { - $results[] = $acceptingType->accepts($innerType, $strictTypes); + $result = $acceptingType->accepts($innerType, $strictTypes); + if ($result->yes()) { + return $result; + } + + $results[] = $result; } return TrinaryLogic::maxMin(...$results); diff --git a/src/Type/ObjectType.php b/src/Type/ObjectType.php index 4a7333abdb..a9f70d8acb 100644 --- a/src/Type/ObjectType.php +++ b/src/Type/ObjectType.php @@ -40,6 +40,7 @@ use function array_key_exists; use function array_keys; use function array_map; +use function array_merge; use function array_values; use function count; use function implode; @@ -1052,7 +1053,14 @@ public function changeSubtractedType(?Type $subtractedType): Type $cases[$name] = new EnumCaseObjectType($classReflection->getName(), $name); } - foreach (TypeUtils::flattenTypes($subtractedType) as $subType) { + $originalCases = $cases; + + $subtractedTypes = TypeUtils::flattenTypes($subtractedType); + if ($this->subtractedType !== null) { + $subtractedTypes = array_merge($subtractedTypes, TypeUtils::flattenTypes($this->subtractedType)); + } + $subtractedCases = []; + foreach ($subtractedTypes as $subType) { if (!$subType instanceof EnumCaseObjectType) { return new self($this->className, $subtractedType); } @@ -1061,19 +1069,33 @@ public function changeSubtractedType(?Type $subtractedType): Type return new self($this->className, $subtractedType); } - unset($cases[$subType->getEnumCaseName()]); + if (!array_key_exists($subType->getEnumCaseName(), $cases)) { + return new self($this->className, $subtractedType); + } + + $subtractedCases[$subType->getEnumCaseName()] = $subType; + unset($originalCases[$subType->getEnumCaseName()]); } - $cases = array_values($cases); - if (count($cases) === 0) { + if (count($originalCases) === 1) { + return array_values($originalCases)[0]; + } + + $subtractedCases = array_values($subtractedCases); + $subtractedCasesCount = count($subtractedCases); + if ($subtractedCasesCount === count($cases)) { return new NeverType(); } - if (count($cases) === 1) { - return $cases[0]; + if ($subtractedCasesCount === 0) { + return new self($this->className); + } + + if (count($subtractedCases) === 1) { + return new self($this->className, $subtractedCases[0]); } - return new UnionType(array_values($cases)); + return new self($this->className, new UnionType($subtractedCases)); } } diff --git a/src/Type/StaticType.php b/src/Type/StaticType.php index 108f8b64d7..b24549b3d8 100644 --- a/src/Type/StaticType.php +++ b/src/Type/StaticType.php @@ -20,9 +20,6 @@ use PHPStan\Type\Traits\NonGeneralizableTypeTrait; use PHPStan\Type\Traits\NonGenericTypeTrait; use PHPStan\Type\Traits\UndecidedComparisonTypeTrait; -use function array_keys; -use function array_values; -use function count; use function get_class; use function sprintf; @@ -432,35 +429,24 @@ public function getTypeWithoutSubtractedType(): Type public function changeSubtractedType(?Type $subtractedType): Type { - $classReflection = $this->getClassReflection(); - if ($classReflection->isEnum() && $subtractedType !== null) { - $cases = []; - foreach (array_keys($classReflection->getEnumCases()) as $constantName) { - $cases[$constantName] = new EnumCaseObjectType($classReflection->getName(), $constantName); - } - - foreach (TypeUtils::flattenTypes($subtractedType) as $subType) { - if (!$subType instanceof EnumCaseObjectType) { - return new self($this->classReflection, $subtractedType); + if ($subtractedType !== null) { + $classReflection = $this->getClassReflection(); + if ($classReflection->isEnum()) { + $objectType = $this->getStaticObjectType()->changeSubtractedType($subtractedType); + if ($objectType instanceof NeverType) { + return $objectType; } - if ($subType->getClassName() !== $this->getClassName()) { - return new self($this->classReflection, $subtractedType); + if ($objectType instanceof EnumCaseObjectType) { + return TypeCombinator::intersect($this, $objectType); } - unset($cases[$subType->getEnumCaseName()]); - } - - $cases = array_values($cases); - if (count($cases) === 0) { - return new NeverType(); - } + if ($objectType instanceof ObjectType) { + return new self($classReflection, $objectType->getSubtractedType()); + } - if (count($cases) === 1) { - return TypeCombinator::intersect($this, $cases[0]); + return $this; } - - return TypeCombinator::intersect($this, new UnionType(array_values($cases))); } return new self($this->classReflection, $subtractedType); diff --git a/src/Type/UnionType.php b/src/Type/UnionType.php index ecdbc0140f..69161429d0 100644 --- a/src/Type/UnionType.php +++ b/src/Type/UnionType.php @@ -139,7 +139,11 @@ public function isSuperTypeOf(Type $otherType): TrinaryLogic $results = []; foreach ($this->getTypes() as $innerType) { - $results[] = $innerType->isSuperTypeOf($otherType); + $result = $innerType->isSuperTypeOf($otherType); + if ($result->yes()) { + return $result; + } + $results[] = $result; } if ($otherType instanceof TemplateUnionType) { diff --git a/tests/PHPStan/Analyser/AnalyserIntegrationTest.php b/tests/PHPStan/Analyser/AnalyserIntegrationTest.php index beab78f005..d9c6d03083 100644 --- a/tests/PHPStan/Analyser/AnalyserIntegrationTest.php +++ b/tests/PHPStan/Analyser/AnalyserIntegrationTest.php @@ -922,6 +922,16 @@ public function testBug7320(): void $this->assertSame(13, $errors[0]->getLine()); } + public function testMatchPerformanceIssue(): void + { + if (PHP_VERSION_ID < 80100) { + $this->markTestSkipped('Test requires PHP 8.1.'); + } + + $errors = $this->runAnalyse(__DIR__ . '/data/match-performance-issue.php'); + $this->assertNoErrors($errors); + } + /** * @param string[]|null $allAnalysedFiles * @return Error[] diff --git a/tests/PHPStan/Analyser/data/bug-7176.php b/tests/PHPStan/Analyser/data/bug-7176.php index b6c844f66d..f07a144d9a 100644 --- a/tests/PHPStan/Analyser/data/bug-7176.php +++ b/tests/PHPStan/Analyser/data/bug-7176.php @@ -17,13 +17,13 @@ function test(Suit $x): string { assertType('Bug7176\Suit::Clubs', $x); return 'WORKS'; } - assertType('Bug7176\Suit::Diamonds|Bug7176\Suit::Hearts|Bug7176\Suit::Spades', $x); + assertType('Bug7176\Suit~Bug7176\Suit::Clubs', $x); if (in_array($x, [Suit::Spades], true)) { assertType('Bug7176\Suit::Spades', $x); return 'DOES NOT WORK'; } - assertType('Bug7176\Suit::Diamonds|Bug7176\Suit::Hearts', $x); + assertType('Bug7176\Suit~Bug7176\Suit::Clubs|Bug7176\Suit::Spades', $x); return match ($x) { Suit::Hearts => 'a', diff --git a/tests/PHPStan/Analyser/data/match-performance-issue.php b/tests/PHPStan/Analyser/data/match-performance-issue.php new file mode 100644 index 0000000000..b15e813423 --- /dev/null +++ b/tests/PHPStan/Analyser/data/match-performance-issue.php @@ -0,0 +1,1029 @@ += 8.1 + +namespace MatchPerformanceIssue; + +enum Country: string +{ + + case CODE_AFG = 'AF'; + case CODE_ALA = 'AX'; + case CODE_ALB = 'AL'; + case CODE_DZA = 'DZ'; + case CODE_ASM = 'AS'; + case CODE_AND = 'AD'; + case CODE_AGO = 'AO'; + case CODE_AIA = 'AI'; + case CODE_ATA = 'AQ'; + case CODE_ATG = 'AG'; + case CODE_ARG = 'AR'; + case CODE_ARM = 'AM'; + case CODE_ABW = 'AW'; + case CODE_AUS = 'AU'; + case CODE_AUT = 'AT'; + case CODE_AZE = 'AZ'; + case CODE_BHS = 'BS'; + case CODE_BHR = 'BH'; + case CODE_BGD = 'BD'; + case CODE_BRB = 'BB'; + case CODE_BLR = 'BY'; + case CODE_BEL = 'BE'; + case CODE_BLZ = 'BZ'; + case CODE_BEN = 'BJ'; + case CODE_BMU = 'BM'; + case CODE_BTN = 'BT'; + case CODE_BOL = 'BO'; + case CODE_BIH = 'BA'; + case CODE_BES = 'BQ'; + case CODE_BWA = 'BW'; + case CODE_BVT = 'BV'; + case CODE_BRA = 'BR'; + case CODE_IOT = 'IO'; + case CODE_BRN = 'BN'; + case CODE_BGR = 'BG'; + case CODE_BFA = 'BF'; + case CODE_BDI = 'BI'; + case CODE_KHM = 'KH'; + case CODE_CMR = 'CM'; + case CODE_CAN = 'CA'; + case CODE_CPV = 'CV'; + case CODE_CYM = 'KY'; + case CODE_CAF = 'CF'; + case CODE_TCD = 'TD'; + case CODE_CHL = 'CL'; + case CODE_CHN = 'CN'; + case CODE_CXR = 'CX'; + case CODE_CCK = 'CC'; + case CODE_COL = 'CO'; + case CODE_COM = 'KM'; + case CODE_COG = 'CG'; + case CODE_COK = 'CK'; + case CODE_CRI = 'CR'; + case CODE_CIV = 'CI'; + case CODE_HRV = 'HR'; + case CODE_CUB = 'CU'; + case CODE_CUW = 'CW'; + case CODE_CYP = 'CY'; + case CODE_CZE = 'CZ'; + case CODE_COD = 'CD'; + case CODE_DNK = 'DK'; + case CODE_DJI = 'DJ'; + case CODE_DMA = 'DM'; + case CODE_DOM = 'DO'; + case CODE_ECU = 'EC'; + case CODE_EGY = 'EG'; + case CODE_SLV = 'SV'; + case CODE_GNQ = 'GQ'; + case CODE_ERI = 'ER'; + case CODE_EST = 'EE'; + case CODE_ETH = 'ET'; + case CODE_FLK = 'FK'; + case CODE_FRO = 'FO'; + case CODE_FJI = 'FJ'; + case CODE_FIN = 'FI'; + case CODE_FRA = 'FR'; + case CODE_GUF = 'GF'; + case CODE_PYF = 'PF'; + case CODE_ATF = 'TF'; + case CODE_GAB = 'GA'; + case CODE_GMB = 'GM'; + case CODE_GEO = 'GE'; + case CODE_DEU = 'DE'; + case CODE_GHA = 'GH'; + case CODE_GIB = 'GI'; + case CODE_GRC = 'GR'; + case CODE_GRL = 'GL'; + case CODE_GRD = 'GD'; + case CODE_GLP = 'GP'; + case CODE_GUM = 'GU'; + case CODE_GTM = 'GT'; + case CODE_GGY = 'GG'; + case CODE_GIN = 'GN'; + case CODE_GNB = 'GW'; + case CODE_GUY = 'GY'; + case CODE_HTI = 'HT'; + case CODE_HMD = 'HM'; + case CODE_HND = 'HN'; + case CODE_HKG = 'HK'; + case CODE_HUN = 'HU'; + case CODE_ISL = 'IS'; + case CODE_IND = 'IN'; + case CODE_IDN = 'ID'; + case CODE_IRQ = 'IQ'; + case CODE_IRL = 'IE'; + case CODE_IRN = 'IR'; + case CODE_IMN = 'IM'; + case CODE_ISR = 'IL'; + case CODE_ITA = 'IT'; + case CODE_JAM = 'JM'; + case CODE_JPN = 'JP'; + case CODE_JEY = 'JE'; + case CODE_JOR = 'JO'; + case CODE_KAZ = 'KZ'; + case CODE_KEN = 'KE'; + case CODE_KIR = 'KI'; + case CODE_XKX = 'XK'; + case CODE_KWT = 'KW'; + case CODE_KGZ = 'KG'; + case CODE_LAO = 'LA'; + case CODE_LVA = 'LV'; + case CODE_LBN = 'LB'; + case CODE_LSO = 'LS'; + case CODE_LBR = 'LR'; + case CODE_LBY = 'LY'; + case CODE_LIE = 'LI'; + case CODE_LTU = 'LT'; + case CODE_LUX = 'LU'; + case CODE_MAC = 'MO'; + case CODE_MKD = 'MK'; + case CODE_MDG = 'MG'; + case CODE_MWI = 'MW'; + case CODE_MYS = 'MY'; + case CODE_MDV = 'MV'; + case CODE_MLI = 'ML'; + case CODE_MLT = 'MT'; + case CODE_MHL = 'MH'; + case CODE_MTQ = 'MQ'; + case CODE_MRT = 'MR'; + case CODE_MUS = 'MU'; + case CODE_MYT = 'YT'; + case CODE_MEX = 'MX'; + case CODE_FSM = 'FM'; + case CODE_MDA = 'MD'; + case CODE_MCO = 'MC'; + case CODE_MNG = 'MN'; + case CODE_MNE = 'ME'; + case CODE_MSR = 'MS'; + case CODE_MAR = 'MA'; + case CODE_MOZ = 'MZ'; + case CODE_MMR = 'MM'; + case CODE_NAM = 'NA'; + case CODE_NRU = 'NR'; + case CODE_NPL = 'NP'; + case CODE_NLD = 'NL'; + case CODE_NCL = 'NC'; + case CODE_NZL = 'NZ'; + case CODE_NIC = 'NI'; + case CODE_NER = 'NE'; + case CODE_NGA = 'NG'; + case CODE_NIU = 'NU'; + case CODE_NFK = 'NF'; + case CODE_MNP = 'MP'; + case CODE_PRK = 'KP'; + case CODE_NOR = 'NO'; + case CODE_OMN = 'OM'; + case CODE_PAK = 'PK'; + case CODE_PLW = 'PW'; + case CODE_PSE = 'PS'; + case CODE_PAN = 'PA'; + case CODE_PNG = 'PG'; + case CODE_PRY = 'PY'; + case CODE_PER = 'PE'; + case CODE_PHL = 'PH'; + case CODE_PCN = 'PN'; + case CODE_POL = 'PL'; + case CODE_PRT = 'PT'; + case CODE_PRI = 'PR'; + case CODE_QAT = 'QA'; + case CODE_REU = 'RE'; + case CODE_ROU = 'RO'; + case CODE_RUS = 'RU'; + case CODE_RWA = 'RW'; + case CODE_SHN = 'SH'; + case CODE_KNA = 'KN'; + case CODE_LCA = 'LC'; + case CODE_SXM = 'SX'; + case CODE_MAF = 'MF'; + case CODE_SPM = 'PM'; + case CODE_VCT = 'VC'; + case CODE_WSM = 'WS'; + case CODE_SMR = 'SM'; + case CODE_STP = 'ST'; + case CODE_SAU = 'SA'; + case CODE_SEN = 'SN'; + case CODE_SRB = 'RS'; + case CODE_SYC = 'SC'; + case CODE_SLE = 'SL'; + case CODE_SGP = 'SG'; + case CODE_SVK = 'SK'; + case CODE_SVN = 'SI'; + case CODE_SLB = 'SB'; + case CODE_SOM = 'SO'; + case CODE_ZAF = 'ZA'; + case CODE_SGS = 'GS'; + case CODE_KOR = 'KR'; + case CODE_SSU = 'SS'; + case CODE_ESP = 'ES'; + case CODE_LKA = 'LK'; + case CODE_SDN = 'SD'; + case CODE_SUR = 'SR'; + case CODE_SJM = 'SJ'; + case CODE_SWZ = 'SZ'; + case CODE_SWE = 'SE'; + case CODE_CHE = 'CH'; + case CODE_SYR = 'SY'; + case CODE_TWN = 'TW'; + case CODE_TJK = 'TJ'; + case CODE_TZA = 'TZ'; + case CODE_THA = 'TH'; + case CODE_TLS = 'TL'; + case CODE_TGO = 'TG'; + case CODE_TKL = 'TK'; + case CODE_TON = 'TO'; + case CODE_TTO = 'TT'; + case CODE_TUN = 'TN'; + case CODE_TUR = 'TR'; + case CODE_TKM = 'TM'; + case CODE_TCA = 'TC'; + case CODE_TUV = 'TV'; + case CODE_UGA = 'UG'; + case CODE_UKR = 'UA'; + case CODE_ARE = 'AE'; + case CODE_GBR = 'GB'; + case CODE_USA = 'US'; + case CODE_UMI = 'UM'; + case CODE_URY = 'UY'; + case CODE_UZB = 'UZ'; + case CODE_VUT = 'VU'; + case CODE_VAT = 'VA'; + case CODE_VEN = 'VE'; + case CODE_VNM = 'VN'; + case CODE_VGB = 'VG'; + case CODE_VIR = 'VI'; + case CODE_WLF = 'WF'; + case CODE_ESH = 'EH'; + case CODE_YEM = 'YE'; + case CODE_ZMB = 'ZM'; + case CODE_ZWE = 'ZW'; + + /** + * @return string[] + */ + public static function getLabelDefinitions(): array + { + return [ + self::CODE_ABW->value => _('Aruba'), + self::CODE_AFG->value => _('Islámský stát Afghánistán'), + self::CODE_AGO->value => _('Angolská republika'), + self::CODE_AIA->value => _('Anguilla'), + self::CODE_ALA->value => _('Alandské ostrovy'), + self::CODE_ALB->value => _('Albánská republika'), + self::CODE_AND->value => _('Andorrské knížectví'), + self::CODE_ARE->value => _('Spojené arabské emiráty'), + self::CODE_ARG->value => _('Argentinská republika'), + self::CODE_ARM->value => _('Arménská republika'), + self::CODE_ASM->value => _('Americká Samoa'), + self::CODE_ATA->value => _('Antarktida'), + self::CODE_ATF->value => _('Francouzská jižní území'), + self::CODE_ATG->value => _('Antigua a Barbuda'), + self::CODE_AUS->value => _('Austrálie'), + self::CODE_AUT->value => _('Rakouská republika'), + self::CODE_AZE->value => _('Ázerbájdžánská republika'), + self::CODE_BDI->value => _('Burundská republika'), + self::CODE_BEL->value => _('Belgické království'), + self::CODE_BEN->value => _('Beninská republika'), + self::CODE_BFA->value => _('Burkina Faso'), + self::CODE_BGD->value => _('Bangladéšská lidová republika'), + self::CODE_BGR->value => _('Bulharská republika'), + self::CODE_BHR->value => _('Bahrajnské království'), + self::CODE_BHS->value => _('Bahamské společenství'), + self::CODE_BIH->value => _('Bosna a Hercegovina'), + self::CODE_BES->value => _('Karibské Nizozemsko'), + self::CODE_BLR->value => _('Běloruská republika'), + self::CODE_BLZ->value => _('Belize'), + self::CODE_BMU->value => _('Bermudy'), + self::CODE_BOL->value => _('Bolivijská republika'), + self::CODE_BRA->value => _('Brazilská federativní republika'), + self::CODE_BRB->value => _('Barbados'), + self::CODE_BRN->value => _('Brunej Darussalam'), + self::CODE_BTN->value => _('Bhútánské království'), + self::CODE_BVT->value => _('Bouvetův ostrov'), + self::CODE_BWA->value => _('Botswanská republika'), + self::CODE_CAF->value => _('Středoafrická republika'), + self::CODE_CAN->value => _('Kanada'), + self::CODE_CCK->value => _('Kokosové ostrovy'), + self::CODE_CHE->value => _('Švýcarská konfederace'), + self::CODE_CHL->value => _('Chilská republika'), + self::CODE_CHN->value => _('Čínská lidová republika'), + self::CODE_CIV->value => _('Republika Pobřeží slonoviny'), + self::CODE_CMR->value => _('Kamerunská republika'), + self::CODE_COD->value => _('Konžská demokratická republika'), + self::CODE_COG->value => _('Konžská republika'), + self::CODE_COK->value => _('Cookovy ostrovy'), + self::CODE_COL->value => _('Kolumbijská republika'), + self::CODE_COM->value => _('Komorský svaz'), + self::CODE_CPV->value => _('Kapverdská republika'), + self::CODE_CRI->value => _('Kostarická republika'), + self::CODE_CUB->value => _('Kubánská republika'), + self::CODE_CUW->value => _('Curaçao'), + self::CODE_CXR->value => _('Vánoční ostrov'), + self::CODE_CYM->value => _('Kajmanské ostrovy'), + self::CODE_CYP->value => _('Kyperská republika'), + self::CODE_CZE->value => _('Česká republika'), + self::CODE_DEU->value => _('Spolková republika Německo'), + self::CODE_DJI->value => _('Džibutská republika'), + self::CODE_DMA->value => _('Dominické společenství'), + self::CODE_DNK->value => _('Dánské království'), + self::CODE_DOM->value => _('Dominikánská republika'), + self::CODE_DZA->value => _('Alžírská lidová demokratická republika'), + self::CODE_ECU->value => _('Ekvádorská republika'), + self::CODE_EGY->value => _('Egyptská arabská republika'), + self::CODE_ERI->value => _('Eritrea'), + self::CODE_ESH->value => _('Západní Sahara'), + self::CODE_ESP->value => _('Španělské království'), + self::CODE_EST->value => _('Estonská republika'), + self::CODE_ETH->value => _('Etiopská federativní demokratická republika'), + self::CODE_FIN->value => _('Finská republika'), + self::CODE_FJI->value => _('Republika Fidžijské ostrovy'), + self::CODE_FLK->value => _('Falklandy (Malvíny)'), + self::CODE_FRA->value => _('Francouzská republika'), + self::CODE_FRO->value => _('Faerské ostrovy'), + self::CODE_FSM->value => _('Federativní státy Mikronésie'), + self::CODE_GAB->value => _('Gabonská republika'), + self::CODE_GBR->value => _('Spojené království Velké Británie a Severního Irska'), + self::CODE_GEO->value => _('Gruzie'), + self::CODE_GGY->value => _('Guernsey'), + self::CODE_GHA->value => _('Ghanská republika'), + self::CODE_GIB->value => _('Gibraltar'), + self::CODE_GIN->value => _('Guinejská republika'), + self::CODE_GLP->value => _('Guadeloupe'), + self::CODE_GMB->value => _('Gambijská republika'), + self::CODE_GNB->value => _('Republika Guinea-Bissau'), + self::CODE_GNQ->value => _('Republika Rovníková Guinea'), + self::CODE_GRC->value => _('Řecká republika'), + self::CODE_GRD->value => _('Grenada'), + self::CODE_GRL->value => _('Grónsko'), + self::CODE_GTM->value => _('Guatemalská republika'), + self::CODE_GUF->value => _('Francouzská Guyana'), + self::CODE_GUM->value => _('Guam'), + self::CODE_GUY->value => _('Guyanská republika'), + self::CODE_HKG->value => _('Hongkong, zvláštní administrativní oblast Čínské lidové republiky'), + self::CODE_HMD->value => _('Heardův ostrov a McDonaldovy ostrovy'), + self::CODE_HND->value => _('Honduraská republika'), + self::CODE_HRV->value => _('Chorvatská republika'), + self::CODE_HTI->value => _('Haitská republika'), + self::CODE_HUN->value => _('Maďarská republika'), + self::CODE_IDN->value => _('Indonéská republika'), + self::CODE_IMN->value => _('Ostrov Man'), + self::CODE_IND->value => _('Indická republika'), + self::CODE_IOT->value => _('Britské indickooceánské území'), + self::CODE_IRL->value => _('Irsko'), + self::CODE_IRN->value => _('Íránská islámská republika'), + self::CODE_IRQ->value => _('Irácká republika'), + self::CODE_ISL->value => _('Islandská republika'), + self::CODE_ISR->value => _('Izraelský stát'), + self::CODE_ITA->value => _('Italská republika'), + self::CODE_JAM->value => _('Jamajka'), + self::CODE_JEY->value => _('Jersey'), + self::CODE_JOR->value => _('Jordánské hášimovské království'), + self::CODE_JPN->value => _('Japonsko'), + self::CODE_KAZ->value => _('Republika Kazachstán'), + self::CODE_KEN->value => _('Keňská republika'), + self::CODE_KGZ->value => _('Republika Kyrgyzstán'), + self::CODE_KHM->value => _('Kambodžské království'), + self::CODE_KIR->value => _('Republika Kiribati'), + self::CODE_KNA->value => _('Svatý Kryštof a Nevis'), + self::CODE_KOR->value => _('Korejská republika'), + self::CODE_KWT->value => _('Kuvajtský stát'), + self::CODE_LAO->value => _('Laoská lidově demokratická republika'), + self::CODE_LBN->value => _('Libanonská republika'), + self::CODE_LBR->value => _('Liberijská republika'), + self::CODE_LBY->value => _('Libyjská arabská lidová socialistická džamáhírije'), + self::CODE_LCA->value => _('Svatá Lucie'), + self::CODE_LIE->value => _('Lichtenštejnské knížectví'), + self::CODE_LKA->value => _('Srílanská demokratická socialistická republika'), + self::CODE_LSO->value => _('Lesothské království'), + self::CODE_LTU->value => _('Litevská republika'), + self::CODE_LUX->value => _('Lucemburské velkovévodství'), + self::CODE_LVA->value => _('Lotyšská republika'), + self::CODE_MAC->value => _('Macao, zvláštní administrativní oblast Čínské lidové republiky'), + self::CODE_MAF->value => _('Svatý Martin (Francie)'), + self::CODE_MAR->value => _('Marocké království'), + self::CODE_MCO->value => _('Monacké knížectví'), + self::CODE_MDA->value => _('Moldavská republika'), + self::CODE_MDG->value => _('Madagaskarská republika'), + self::CODE_MDV->value => _('Maledivská republika'), + self::CODE_MEX->value => _('Spojené státy mexické'), + self::CODE_MHL->value => _('Republika Marshallovy ostrovy'), + self::CODE_MKD->value => _('Bývalá jugoslávská republika Makedonie'), + self::CODE_MLI->value => _('Maliská republika'), + self::CODE_MLT->value => _('Maltská republika'), + self::CODE_MMR->value => _('Myanmarský svaz'), + self::CODE_MNE->value => _('Republika Černá Hora'), + self::CODE_MNG->value => _('Mongolsko'), + self::CODE_MNP->value => _('Společenství Severních Marian'), + self::CODE_MOZ->value => _('Mosambická republika'), + self::CODE_MRT->value => _('Mauritánská islámská republika'), + self::CODE_MSR->value => _('Montserrat'), + self::CODE_MTQ->value => _('Martinik'), + self::CODE_MUS->value => _('Mauricijská republika'), + self::CODE_MWI->value => _('Malawská republika'), + self::CODE_MYS->value => _('Malajsie'), + self::CODE_MYT->value => _('Mayotte'), + self::CODE_NAM->value => _('Namibijská republika'), + self::CODE_NCL->value => _('Nová Kaledonie'), + self::CODE_NER->value => _('Nigerská republika'), + self::CODE_NFK->value => _('Norfolk'), + self::CODE_NGA->value => _('Nigérijská federativní republika'), + self::CODE_NIC->value => _('Nikaragujská republika'), + self::CODE_NIU->value => _('Niue'), + self::CODE_NLD->value => _('Nizozemské království'), + self::CODE_NOR->value => _('Norské království'), + self::CODE_NPL->value => _('Nepálské království'), + self::CODE_NRU->value => _('Nauruská republika'), + self::CODE_NZL->value => _('Nový Zéland'), + self::CODE_OMN->value => _('Sultanát Omán'), + self::CODE_PAK->value => _('Pákistánská islámská republika'), + self::CODE_PAN->value => _('Panamská republika'), + self::CODE_PCN->value => _('Pitcairn'), + self::CODE_PER->value => _('Peruánská republika'), + self::CODE_PHL->value => _('Filipínská republika'), + self::CODE_PLW->value => _('Palauská republika'), + self::CODE_PNG->value => _('Papua Nová Guinea'), + self::CODE_POL->value => _('Polská republika'), + self::CODE_PRI->value => _('Portoriko'), + self::CODE_PRK->value => _('Korejská lidově demokratická republika'), + self::CODE_PRT->value => _('Portugalská republika'), + self::CODE_PRY->value => _('Paraguayská republika'), + self::CODE_PSE->value => _('Palestinská samospráva'), + self::CODE_PYF->value => _('Francouzská Polynésie'), + self::CODE_QAT->value => _('Stát Katar'), + self::CODE_REU->value => _('Réunion'), + self::CODE_ROU->value => _('Rumunsko'), + self::CODE_RUS->value => _('Ruská federace'), + self::CODE_RWA->value => _('Rwandská republika'), + self::CODE_SAU->value => _('Saúdskoarabské království'), + self::CODE_SDN->value => _('Súdánská republika'), + self::CODE_SEN->value => _('Senegalská republika'), + self::CODE_SGP->value => _('Singapurská republika'), + self::CODE_SGS->value => _('Jižní Georgie a Jižní Sandwichovy ostrovy'), + self::CODE_SHN->value => _('Svatá Helena'), + self::CODE_SJM->value => _('Svalbard a ostrov Jan Mayen'), + self::CODE_SLB->value => _('Šalamounovy ostrovy'), + self::CODE_SLE->value => _('Republika Sierra Leone'), + self::CODE_SLV->value => _('Salvadorská republika'), + self::CODE_SMR->value => _('Sanmarinská republika'), + self::CODE_SOM->value => _('Somálská republika'), + self::CODE_SPM->value => _('Saint Pierre a Miquelon'), + self::CODE_SRB->value => _('Republika Srbsko'), + self::CODE_SSU->value => _('Jihosúdánská republika'), + self::CODE_STP->value => _('Demokratická republika Svatý Tomáš a Princův ostrov'), + self::CODE_SUR->value => _('Surinamská republika'), + self::CODE_SVK->value => _('Slovenská republika'), + self::CODE_SVN->value => _('Slovinská republika'), + self::CODE_SWE->value => _('Švédské království'), + self::CODE_SWZ->value => _('Svazijské království'), + self::CODE_SXM->value => _('Svatý Martin (Nizozemsko)'), + self::CODE_SYC->value => _('Seychelská republika'), + self::CODE_SYR->value => _('Syrská arabská republika'), + self::CODE_TCA->value => _('Turks a Caicos'), + self::CODE_TCD->value => _('Čadská republika'), + self::CODE_TGO->value => _('Tožská republika'), + self::CODE_THA->value => _('Thajské království'), + self::CODE_TJK->value => _('Republika Tádžikistán'), + self::CODE_TKL->value => _('Tokelau'), + self::CODE_TKM->value => _('Turkmenistán'), + self::CODE_TLS->value => _('Demokratická republika Východní Timor'), + self::CODE_TON->value => _('Království Tonga'), + self::CODE_TTO->value => _('Republika Trinidad a Tobago'), + self::CODE_TUN->value => _('Tuniská republika'), + self::CODE_TUR->value => _('Turecká republika'), + self::CODE_TUV->value => _('Tuvalu'), + self::CODE_TWN->value => _('Tchaj-wan, čínská provincie'), + self::CODE_TZA->value => _('Sjednocená republika Tanzanie'), + self::CODE_UGA->value => _('Ugandská republika'), + self::CODE_UKR->value => _('Ukrajina'), + self::CODE_UMI->value => _('Menší odlehlé ostrovy USA'), + self::CODE_URY->value => _('Uruguayská východní republika'), + self::CODE_USA->value => _('Spojené státy americké'), + self::CODE_UZB->value => _('Republika Uzbekistán'), + self::CODE_VAT->value => _('Svatý stolec (Vatikánský městský stát)'), + self::CODE_VCT->value => _('Svatý Vincenc a Grenadiny'), + self::CODE_VEN->value => _('Bolívarovská republika Venezuela'), + self::CODE_VGB->value => _('Britské Panenské ostrovy'), + self::CODE_VIR->value => _('Americké Panenské ostrovy'), + self::CODE_VNM->value => _('Vietnamská socialistická republika'), + self::CODE_VUT->value => _('Vanuatská republika'), + self::CODE_WLF->value => _('Wallis a Futuna'), + self::CODE_WSM->value => _('Nezávislý stát Samoa'), + self::CODE_XKX->value => _('Kosovská republika'), + self::CODE_YEM->value => _('Jemenská republika'), + self::CODE_ZAF->value => _('Jihoafrická republika'), + self::CODE_ZMB->value => _('Zambijská republika'), + self::CODE_ZWE->value => _('Zimbabwská republika'), + ]; + } + + /** + * @return string[] + */ + public static function getShortLabelDefinitions(): array + { + return [ + self::CODE_ABW->value => _('Aruba'), + self::CODE_AFG->value => _('Afghánistán'), + self::CODE_AGO->value => _('Angola'), + self::CODE_AIA->value => _('Anguilla'), + self::CODE_ALA->value => _('Alandské ostrovy'), + self::CODE_ALB->value => _('Albánie'), + self::CODE_AND->value => _('Andorra'), + self::CODE_ARE->value => _('Spojené arabské emiráty'), + self::CODE_ARG->value => _('Argentina'), + self::CODE_ARM->value => _('Arménie'), + self::CODE_ASM->value => _('Americká Samoa'), + self::CODE_ATA->value => _('Antarktida'), + self::CODE_ATF->value => _('Francouzská jižní území'), + self::CODE_ATG->value => _('Antigua a Barbuda'), + self::CODE_AUS->value => _('Austrálie'), + self::CODE_AUT->value => _('Rakousko'), + self::CODE_AZE->value => _('Ázerbájdžán'), + self::CODE_BDI->value => _('Burundi'), + self::CODE_BEL->value => _('Belgie'), + self::CODE_BEN->value => _('Benin'), + self::CODE_BFA->value => _('Burkina Faso'), + self::CODE_BGD->value => _('Bangladéš'), + self::CODE_BGR->value => _('Bulharsko'), + self::CODE_BHR->value => _('Bahrajn'), + self::CODE_BHS->value => _('Bahamy'), + self::CODE_BIH->value => _('Bosna a Hercegovina'), + self::CODE_BES->value => _('Karibské Nizozemsko'), + self::CODE_BLR->value => _('Bělorusko'), + self::CODE_BLZ->value => _('Belize'), + self::CODE_BMU->value => _('Bermudy'), + self::CODE_BOL->value => _('Bolívie'), + self::CODE_BRA->value => _('Brazílie'), + self::CODE_BRB->value => _('Barbados'), + self::CODE_BRN->value => _('Brunej Darussalam'), + self::CODE_BTN->value => _('Bhútán'), + self::CODE_BVT->value => _('Bouvetův ostrov'), + self::CODE_BWA->value => _('Botswana'), + self::CODE_CAF->value => _('Středoafrická republika'), + self::CODE_CAN->value => _('Kanada'), + self::CODE_CCK->value => _('Kokosové ostrovy'), + self::CODE_CHE->value => _('Švýcarsko'), + self::CODE_CHL->value => _('Chile'), + self::CODE_CHN->value => _('Čína'), + self::CODE_CIV->value => _('Pobřeží slonoviny'), + self::CODE_CMR->value => _('Kamerun'), + self::CODE_COD->value => _('Kongo, demokratická republika'), + self::CODE_COG->value => _('Kongo'), + self::CODE_COK->value => _('Cookovy ostrovy'), + self::CODE_COL->value => _('Kolumbie'), + self::CODE_COM->value => _('Komory'), + self::CODE_CPV->value => _('Kapverdy'), + self::CODE_CRI->value => _('Kostarika'), + self::CODE_CUB->value => _('Kuba'), + self::CODE_CUW->value => _('Curaçao'), + self::CODE_CXR->value => _('Vánoční ostrov'), + self::CODE_CYM->value => _('Kajmanské ostrovy'), + self::CODE_CYP->value => _('Kypr'), + self::CODE_CZE->value => _('Česko'), + self::CODE_DEU->value => _('Německo'), + self::CODE_DJI->value => _('Džibutsko'), + self::CODE_DMA->value => _('Dominika'), + self::CODE_DNK->value => _('Dánsko'), + self::CODE_DOM->value => _('Dominikánská republika'), + self::CODE_DZA->value => _('Alžírsko'), + self::CODE_ECU->value => _('Ekvádor'), + self::CODE_EGY->value => _('Egypt'), + self::CODE_ERI->value => _('Eritrea'), + self::CODE_ESH->value => _('Západní Sahara'), + self::CODE_ESP->value => _('Španělsko'), + self::CODE_EST->value => _('Estonsko'), + self::CODE_ETH->value => _('Etiopie'), + self::CODE_FIN->value => _('Finsko'), + self::CODE_FJI->value => _('Fidži'), + self::CODE_FLK->value => _('Falklandy (Malvíny)'), + self::CODE_FRA->value => _('Francie'), + self::CODE_FRO->value => _('Faerské ostrovy'), + self::CODE_FSM->value => _('Mikronésie'), + self::CODE_GAB->value => _('Gabon'), + self::CODE_GBR->value => _('Velká Británie'), + self::CODE_GEO->value => _('Gruzie'), + self::CODE_GGY->value => _('Guernsey'), + self::CODE_GHA->value => _('Ghana'), + self::CODE_GIB->value => _('Gibraltar'), + self::CODE_GIN->value => _('Guinea'), + self::CODE_GLP->value => _('Guadeloupe'), + self::CODE_GMB->value => _('Gambie'), + self::CODE_GNB->value => _('Guinea-Bissau'), + self::CODE_GNQ->value => _('Rovníková Guinea'), + self::CODE_GRC->value => _('Řecko'), + self::CODE_GRD->value => _('Grenada'), + self::CODE_GRL->value => _('Grónsko'), + self::CODE_GTM->value => _('Guatemala'), + self::CODE_GUF->value => _('Francouzská Guyana'), + self::CODE_GUM->value => _('Guam'), + self::CODE_GUY->value => _('Guyana'), + self::CODE_HKG->value => _('Hongkong'), + self::CODE_HMD->value => _('Heardův ostrov a McDonaldovy ostrovy'), + self::CODE_HND->value => _('Honduras'), + self::CODE_HRV->value => _('Chorvatsko'), + self::CODE_HTI->value => _('Haiti'), + self::CODE_HUN->value => _('Maďarsko'), + self::CODE_IDN->value => _('Indonésie'), + self::CODE_IMN->value => _('Ostrov Man'), + self::CODE_IND->value => _('Indie'), + self::CODE_IOT->value => _('Britské indickooceánské území'), + self::CODE_IRL->value => _('Irsko'), + self::CODE_IRN->value => _('Írán'), + self::CODE_IRQ->value => _('Irák'), + self::CODE_ISL->value => _('Island'), + self::CODE_ISR->value => _('Izrael'), + self::CODE_ITA->value => _('Itálie'), + self::CODE_JAM->value => _('Jamajka'), + self::CODE_JEY->value => _('Jersey'), + self::CODE_JOR->value => _('Jordánsko'), + self::CODE_JPN->value => _('Japonsko'), + self::CODE_KAZ->value => _('Kazachstán'), + self::CODE_KEN->value => _('Keňa'), + self::CODE_KGZ->value => _('Kyrgyzstán'), + self::CODE_KHM->value => _('Kambodža'), + self::CODE_KIR->value => _('Kiribati'), + self::CODE_KNA->value => _('Svatý Kryštof a Nevis'), + self::CODE_KOR->value => _('Jižní Korea'), + self::CODE_KWT->value => _('Kuvajt'), + self::CODE_LAO->value => _('Laos'), + self::CODE_LBN->value => _('Libanon'), + self::CODE_LBR->value => _('Libérie'), + self::CODE_LBY->value => _('Libye'), + self::CODE_LCA->value => _('Svatá Lucie'), + self::CODE_LIE->value => _('Lichtenštejnsko'), + self::CODE_LKA->value => _('Srí Lanka'), + self::CODE_LSO->value => _('Lesotho'), + self::CODE_LTU->value => _('Litva'), + self::CODE_LUX->value => _('Lucembursko'), + self::CODE_LVA->value => _('Lotyšsko'), + self::CODE_MAC->value => _('Macao'), + self::CODE_MAF->value => _('Svatý Martin (Francie)'), + self::CODE_MAR->value => _('Maroko'), + self::CODE_MCO->value => _('Monako'), + self::CODE_MDA->value => _('Moldavsko'), + self::CODE_MDG->value => _('Madagaskar'), + self::CODE_MDV->value => _('Maledivy'), + self::CODE_MEX->value => _('Mexiko'), + self::CODE_MHL->value => _('Marshallovy ostrovy'), + self::CODE_MKD->value => _('Makedonie'), + self::CODE_MLI->value => _('Mali'), + self::CODE_MLT->value => _('Malta'), + self::CODE_MMR->value => _('Myanmar'), + self::CODE_MNE->value => _('Černá Hora'), + self::CODE_MNG->value => _('Mongolsko'), + self::CODE_MNP->value => _('Severní Mariany'), + self::CODE_MOZ->value => _('Mosambik'), + self::CODE_MRT->value => _('Mauritánie'), + self::CODE_MSR->value => _('Montserrat'), + self::CODE_MTQ->value => _('Martinik'), + self::CODE_MUS->value => _('Mauricius'), + self::CODE_MWI->value => _('Malawi'), + self::CODE_MYS->value => _('Malajsie'), + self::CODE_MYT->value => _('Mayotte'), + self::CODE_NAM->value => _('Namibie'), + self::CODE_NCL->value => _('Nová Kaledonie'), + self::CODE_NER->value => _('Niger'), + self::CODE_NFK->value => _('Norfolk'), + self::CODE_NGA->value => _('Nigérie'), + self::CODE_NIC->value => _('Nikaragua'), + self::CODE_NIU->value => _('Niue'), + self::CODE_NLD->value => _('Nizozemsko'), + self::CODE_NOR->value => _('Norsko'), + self::CODE_NPL->value => _('Nepál'), + self::CODE_NRU->value => _('Nauru'), + self::CODE_NZL->value => _('Nový Zéland'), + self::CODE_OMN->value => _('Omán'), + self::CODE_PAK->value => _('Pákistán'), + self::CODE_PAN->value => _('Panama'), + self::CODE_PCN->value => _('Pitcairn'), + self::CODE_PER->value => _('Peru'), + self::CODE_PHL->value => _('Filipíny'), + self::CODE_PLW->value => _('Palau'), + self::CODE_PNG->value => _('Papua Nová Guinea'), + self::CODE_POL->value => _('Polsko'), + self::CODE_PRI->value => _('Portoriko'), + self::CODE_PRK->value => _('Severní Korea'), + self::CODE_PRT->value => _('Portugalsko'), + self::CODE_PRY->value => _('Paraguay'), + self::CODE_PSE->value => _('Palestina'), + self::CODE_PYF->value => _('Francouzská Polynésie'), + self::CODE_QAT->value => _('Katar'), + self::CODE_REU->value => _('Réunion'), + self::CODE_ROU->value => _('Rumunsko'), + self::CODE_RUS->value => _('Rusko'), + self::CODE_RWA->value => _('Rwanda'), + self::CODE_SAU->value => _('Saúdská Arábie'), + self::CODE_SDN->value => _('Súdán'), + self::CODE_SEN->value => _('Senegal'), + self::CODE_SGP->value => _('Singapur'), + self::CODE_SGS->value => _('Jižní Georgie a Jižní Sandwichovy ostrovy'), + self::CODE_SHN->value => _('Svatá Helena'), + self::CODE_SJM->value => _('Svalbard a ostrov Jan Mayen'), + self::CODE_SLB->value => _('Šalamounovy ostrovy'), + self::CODE_SLE->value => _('Sierra Leone'), + self::CODE_SLV->value => _('Salvador'), + self::CODE_SMR->value => _('San Marino'), + self::CODE_SOM->value => _('Somálsko'), + self::CODE_SPM->value => _('Saint Pierre a Miquelon'), + self::CODE_SRB->value => _('Srbsko'), + self::CODE_SSU->value => _('Jižní Súdán'), + self::CODE_STP->value => _('Svatý Tomáš'), + self::CODE_SUR->value => _('Surinam'), + self::CODE_SVK->value => _('Slovensko'), + self::CODE_SVN->value => _('Slovinsko'), + self::CODE_SWE->value => _('Švédsko'), + self::CODE_SWZ->value => _('Svazijsko'), + self::CODE_SXM->value => _('Svatý Martin (Nizozemsko)'), + self::CODE_SYC->value => _('Seychely'), + self::CODE_SYR->value => _('Sýrie'), + self::CODE_TCA->value => _('Turks a Caicos'), + self::CODE_TCD->value => _('Čad'), + self::CODE_TGO->value => _('Togo'), + self::CODE_THA->value => _('Thajsko'), + self::CODE_TJK->value => _('Tádžikistán'), + self::CODE_TKL->value => _('Tokelau'), + self::CODE_TKM->value => _('Turkmenistán'), + self::CODE_TLS->value => _('Východní Timor'), + self::CODE_TON->value => _('Tonga'), + self::CODE_TTO->value => _('Trinidad a Tobago'), + self::CODE_TUN->value => _('Tunisko'), + self::CODE_TUR->value => _('Turecko'), + self::CODE_TUV->value => _('Tuvalu'), + self::CODE_TWN->value => _('Tchaj-wan'), + self::CODE_TZA->value => _('Tanzanie'), + self::CODE_UGA->value => _('Uganda'), + self::CODE_UKR->value => _('Ukrajina'), + self::CODE_UMI->value => _('Menší odlehlé ostrovy USA'), + self::CODE_URY->value => _('Uruguay'), + self::CODE_USA->value => _('Spojené státy'), + self::CODE_UZB->value => _('Uzbekistán'), + self::CODE_VAT->value => _('Vatikán'), + self::CODE_VCT->value => _('Svatý Vincenc a Grenadiny'), + self::CODE_VEN->value => _('Venezuela'), + self::CODE_VGB->value => _('Britské Panenské ostrovy'), + self::CODE_VIR->value => _('Americké Panenské ostrovy'), + self::CODE_VNM->value => _('Vietnam'), + self::CODE_VUT->value => _('Vanuatu'), + self::CODE_WLF->value => _('Wallis a Futuna'), + self::CODE_WSM->value => _('Samoa'), + self::CODE_XKX->value => _('Kosovo'), + self::CODE_YEM->value => _('Jemen'), + self::CODE_ZAF->value => _('Jihoafrická republika'), + self::CODE_ZMB->value => _('Zambie'), + self::CODE_ZWE->value => _('Zimbabwe'), + ]; + } + + public function getIdent(): string + { + return match ($this) { + self::CODE_ABW => _('Aruba'), + self::CODE_AFG => _('Afghánistán'), + self::CODE_AGO => _('Angola'), + self::CODE_AIA => _('Anguilla'), + self::CODE_ALA => _('Alandské ostrovy'), + self::CODE_ALB => _('Albánie'), + self::CODE_AND => _('Andorra'), + self::CODE_ARE => _('Spojené arabské emiráty'), + self::CODE_ARG => _('Argentina'), + self::CODE_ARM => _('Arménie'), + self::CODE_ASM => _('Americká Samoa'), + self::CODE_ATA => _('Antarktida'), + self::CODE_ATF => _('Francouzská jižní území'), + self::CODE_ATG => _('Antigua a Barbuda'), + self::CODE_AUS => _('Austrálie'), + self::CODE_AUT => _('Rakousko'), + self::CODE_AZE => _('Ázerbájdžán'), + self::CODE_BDI => _('Burundi'), + self::CODE_BEL => _('Belgie'), + self::CODE_BEN => _('Benin'), + self::CODE_BFA => _('Burkina Faso'), + self::CODE_BGD => _('Bangladéš'), + self::CODE_BGR => _('Bulharsko'), + self::CODE_BHR => _('Bahrajn'), + self::CODE_BHS => _('Bahamy'), + self::CODE_BIH => _('Bosna a Hercegovina'), + self::CODE_BES => _('Karibské Nizozemsko'), + self::CODE_BLR => _('Bělorusko'), + self::CODE_BLZ => _('Belize'), + self::CODE_BMU => _('Bermudy'), + self::CODE_BOL => _('Bolívie'), + self::CODE_BRA => _('Brazílie'), + self::CODE_BRB => _('Barbados'), + self::CODE_BRN => _('Brunej Darussalam'), + self::CODE_BTN => _('Bhútán'), + self::CODE_BVT => _('Bouvetův ostrov'), + self::CODE_BWA => _('Botswana'), + self::CODE_CAF => _('Středoafrická republika'), + self::CODE_CAN => _('Kanada'), + self::CODE_CCK => _('Kokosové ostrovy'), + self::CODE_CHE => _('Švýcarsko'), + self::CODE_CHL => _('Chile'), + self::CODE_CHN => _('Čína'), + self::CODE_CIV => _('Pobřeží slonoviny'), + self::CODE_CMR => _('Kamerun'), + self::CODE_COD => _('Kongo, demokratická republika'), + self::CODE_COG => _('Kongo'), + self::CODE_COK => _('Cookovy ostrovy'), + self::CODE_COL => _('Kolumbie'), + self::CODE_COM => _('Komory'), + self::CODE_CPV => _('Kapverdy'), + self::CODE_CRI => _('Kostarika'), + self::CODE_CUB => _('Kuba'), + self::CODE_CUW => _('Curaçao'), + self::CODE_CXR => _('Vánoční ostrov'), + self::CODE_CYM => _('Kajmanské ostrovy'), + self::CODE_CYP => _('Kypr'), + self::CODE_CZE => _('Česko'), + self::CODE_DEU => _('Německo'), + self::CODE_DJI => _('Džibutsko'), + self::CODE_DMA => _('Dominika'), + self::CODE_DNK => _('Dánsko'), + self::CODE_DOM => _('Dominikánská republika'), + self::CODE_DZA => _('Alžírsko'), + self::CODE_ECU => _('Ekvádor'), + self::CODE_EGY => _('Egypt'), + self::CODE_ERI => _('Eritrea'), + self::CODE_ESH => _('Západní Sahara'), + self::CODE_ESP => _('Španělsko'), + self::CODE_EST => _('Estonsko'), + self::CODE_ETH => _('Etiopie'), + self::CODE_FIN => _('Finsko'), + self::CODE_FJI => _('Fidži'), + self::CODE_FLK => _('Falklandy (Malvíny)'), + self::CODE_FRA => _('Francie'), + self::CODE_FRO => _('Faerské ostrovy'), + self::CODE_FSM => _('Mikronésie'), + self::CODE_GAB => _('Gabon'), + self::CODE_GBR => _('Velká Británie'), + self::CODE_GEO => _('Gruzie'), + self::CODE_GGY => _('Guernsey'), + self::CODE_GHA => _('Ghana'), + self::CODE_GIB => _('Gibraltar'), + self::CODE_GIN => _('Guinea'), + self::CODE_GLP => _('Guadeloupe'), + self::CODE_GMB => _('Gambie'), + self::CODE_GNB => _('Guinea-Bissau'), + self::CODE_GNQ => _('Rovníková Guinea'), + self::CODE_GRC => _('Řecko'), + self::CODE_GRD => _('Grenada'), + self::CODE_GRL => _('Grónsko'), + self::CODE_GTM => _('Guatemala'), + self::CODE_GUF => _('Francouzská Guyana'), + self::CODE_GUM => _('Guam'), + self::CODE_GUY => _('Guyana'), + self::CODE_HKG => _('Hongkong'), + self::CODE_HMD => _('Heardův ostrov a McDonaldovy ostrovy'), + self::CODE_HND => _('Honduras'), + self::CODE_HRV => _('Chorvatsko'), + self::CODE_HTI => _('Haiti'), + self::CODE_HUN => _('Maďarsko'), + self::CODE_IDN => _('Indonésie'), + self::CODE_IMN => _('Ostrov Man'), + self::CODE_IND => _('Indie'), + self::CODE_IOT => _('Britské indickooceánské území'), + self::CODE_IRL => _('Irsko'), + self::CODE_IRN => _('Írán'), + self::CODE_IRQ => _('Irák'), + self::CODE_ISL => _('Island'), + self::CODE_ISR => _('Izrael'), + self::CODE_ITA => _('Itálie'), + self::CODE_JAM => _('Jamajka'), + self::CODE_JEY => _('Jersey'), + self::CODE_JOR => _('Jordánsko'), + self::CODE_JPN => _('Japonsko'), + self::CODE_KAZ => _('Kazachstán'), + self::CODE_KEN => _('Keňa'), + self::CODE_KGZ => _('Kyrgyzstán'), + self::CODE_KHM => _('Kambodža'), + self::CODE_KIR => _('Kiribati'), + self::CODE_KNA => _('Svatý Kryštof a Nevis'), + self::CODE_KOR => _('Jižní Korea'), + self::CODE_KWT => _('Kuvajt'), + self::CODE_LAO => _('Laos'), + self::CODE_LBN => _('Libanon'), + self::CODE_LBR => _('Libérie'), + self::CODE_LBY => _('Libye'), + self::CODE_LCA => _('Svatá Lucie'), + self::CODE_LIE => _('Lichtenštejnsko'), + self::CODE_LKA => _('Srí Lanka'), + self::CODE_LSO => _('Lesotho'), + self::CODE_LTU => _('Litva'), + self::CODE_LUX => _('Lucembursko'), + self::CODE_LVA => _('Lotyšsko'), + self::CODE_MAC => _('Macao'), + self::CODE_MAF => _('Svatý Martin (Francie)'), + self::CODE_MAR => _('Maroko'), + self::CODE_MCO => _('Monako'), + self::CODE_MDA => _('Moldavsko'), + self::CODE_MDG => _('Madagaskar'), + self::CODE_MDV => _('Maledivy'), + self::CODE_MEX => _('Mexiko'), + self::CODE_MHL => _('Marshallovy ostrovy'), + self::CODE_MKD => _('Makedonie'), + self::CODE_MLI => _('Mali'), + self::CODE_MLT => _('Malta'), + self::CODE_MMR => _('Myanmar'), + self::CODE_MNE => _('Černá Hora'), + self::CODE_MNG => _('Mongolsko'), + self::CODE_MNP => _('Severní Mariany'), + self::CODE_MOZ => _('Mosambik'), + self::CODE_MRT => _('Mauritánie'), + self::CODE_MSR => _('Montserrat'), + self::CODE_MTQ => _('Martinik'), + self::CODE_MUS => _('Mauricius'), + self::CODE_MWI => _('Malawi'), + self::CODE_MYS => _('Malajsie'), + self::CODE_MYT => _('Mayotte'), + self::CODE_NAM => _('Namibie'), + self::CODE_NCL => _('Nová Kaledonie'), + self::CODE_NER => _('Niger'), + self::CODE_NFK => _('Norfolk'), + self::CODE_NGA => _('Nigérie'), + self::CODE_NIC => _('Nikaragua'), + self::CODE_NIU => _('Niue'), + self::CODE_NLD => _('Nizozemsko'), + self::CODE_NOR => _('Norsko'), + self::CODE_NPL => _('Nepál'), + self::CODE_NRU => _('Nauru'), + self::CODE_NZL => _('Nový Zéland'), + self::CODE_OMN => _('Omán'), + self::CODE_PAK => _('Pákistán'), + self::CODE_PAN => _('Panama'), + self::CODE_PCN => _('Pitcairn'), + self::CODE_PER => _('Peru'), + self::CODE_PHL => _('Filipíny'), + self::CODE_PLW => _('Palau'), + self::CODE_PNG => _('Papua Nová Guinea'), + self::CODE_POL => _('Polsko'), + self::CODE_PRI => _('Portoriko'), + self::CODE_PRK => _('Severní Korea'), + self::CODE_PRT => _('Portugalsko'), + self::CODE_PRY => _('Paraguay'), + self::CODE_PSE => _('Palestina'), + self::CODE_PYF => _('Francouzská Polynésie'), + self::CODE_QAT => _('Katar'), + self::CODE_REU => _('Réunion'), + self::CODE_ROU => _('Rumunsko'), + self::CODE_RUS => _('Rusko'), + self::CODE_RWA => _('Rwanda'), + self::CODE_SAU => _('Saúdská Arábie'), + self::CODE_SDN => _('Súdán'), + self::CODE_SEN => _('Senegal'), + self::CODE_SGP => _('Singapur'), + self::CODE_SGS => _('Jižní Georgie a Jižní Sandwichovy ostrovy'), + self::CODE_SHN => _('Svatá Helena'), + self::CODE_SJM => _('Svalbard a ostrov Jan Mayen'), + self::CODE_SLB => _('Šalamounovy ostrovy'), + self::CODE_SLE => _('Sierra Leone'), + self::CODE_SLV => _('Salvador'), + self::CODE_SMR => _('San Marino'), + self::CODE_SOM => _('Somálsko'), + self::CODE_SPM => _('Saint Pierre a Miquelon'), + self::CODE_SRB => _('Srbsko'), + self::CODE_SSU => _('Jižní Súdán'), + self::CODE_STP => _('Svatý Tomáš'), + self::CODE_SUR => _('Surinam'), + self::CODE_SVK => _('Slovensko'), + self::CODE_SVN => _('Slovinsko'), + self::CODE_SWE => _('Švédsko'), + self::CODE_SWZ => _('Svazijsko'), + self::CODE_SXM => _('Svatý Martin (Nizozemsko)'), + self::CODE_SYC => _('Seychely'), + self::CODE_SYR => _('Sýrie'), + self::CODE_TCA => _('Turks a Caicos'), + self::CODE_TCD => _('Čad'), + self::CODE_TGO => _('Togo'), + self::CODE_THA => _('Thajsko'), + self::CODE_TJK => _('Tádžikistán'), + self::CODE_TKL => _('Tokelau'), + self::CODE_TKM => _('Turkmenistán'), + self::CODE_TLS => _('Východní Timor'), + self::CODE_TON => _('Tonga'), + self::CODE_TTO => _('Trinidad a Tobago'), + self::CODE_TUN => _('Tunisko'), + self::CODE_TUR => _('Turecko'), + self::CODE_TUV => _('Tuvalu'), + self::CODE_TWN => _('Tchaj-wan'), + self::CODE_TZA => _('Tanzanie'), + self::CODE_UGA => _('Uganda'), + self::CODE_UKR => _('Ukrajina'), + self::CODE_UMI => _('Menší odlehlé ostrovy USA'), + self::CODE_URY => _('Uruguay'), + self::CODE_USA => _('Spojené státy'), + self::CODE_UZB => _('Uzbekistán'), + self::CODE_VAT => _('Vatikán'), + self::CODE_VCT => _('Svatý Vincenc a Grenadiny'), + self::CODE_VEN => _('Venezuela'), + self::CODE_VGB => _('Britské Panenské ostrovy'), + self::CODE_VIR => _('Americké Panenské ostrovy'), + self::CODE_VNM => _('Vietnam'), + self::CODE_VUT => _('Vanuatu'), + self::CODE_WLF => _('Wallis a Futuna'), + self::CODE_WSM => _('Samoa'), + self::CODE_XKX => _('Kosovo'), + self::CODE_YEM => _('Jemen'), + self::CODE_ZAF => _('Jihoafrická republika'), + self::CODE_ZMB => _('Zambie'), + self::CODE_ZWE => _('Zimbabwe'), + }; + } + +} diff --git a/tests/PHPStan/Rules/Comparison/MatchExpressionRuleTest.php b/tests/PHPStan/Rules/Comparison/MatchExpressionRuleTest.php index 380093e3b2..d39ab6006e 100644 --- a/tests/PHPStan/Rules/Comparison/MatchExpressionRuleTest.php +++ b/tests/PHPStan/Rules/Comparison/MatchExpressionRuleTest.php @@ -145,7 +145,7 @@ public function testEnums(): void 19, ], [ - 'Match expression does not handle remaining values: ($this(MatchEnums\Foo)&MatchEnums\Foo::TWO)|($this(MatchEnums\Foo)&MatchEnums\Foo::THREE)', + 'Match expression does not handle remaining values: MatchEnums\Foo::THREE|MatchEnums\Foo::TWO', 35, ], [