@@ -205,39 +205,34 @@ private static function init(string $enumClass): void
205205 "Enum class \"{$ enumClass }\" needs to be final "
206206 );
207207
208- // Case constants must be private
209208 $ caseConstants = [];
210- if (\PHP_VERSION_ID >= 80000 ) {
211- /** @phpstan-ignore-next-line */
212- $ caseConstants = $ reflection ->getConstants (ReflectionClassConstant::IS_PRIVATE );
213- } else {
214- foreach ($ reflection ->getReflectionConstants () as $ reflConstant ) {
215- if ($ reflConstant ->isPrivate ()) {
216- $ caseConstants [$ reflConstant ->getName ()] = $ reflConstant ->getValue ();
217- }
209+ $ cases = [];
210+ foreach ($ reflection ->getReflectionConstants () as $ reflConstant ) {
211+ // Case constants must be private
212+ if ($ reflConstant ->isPrivate ()) {
213+ $ name = $ reflConstant ->getName ();
214+ $ value = $ reflConstant ->getValue ();
215+
216+ assert (
217+ /** @phpstan-ignore-next-line */
218+ (\is_subclass_of ($ enumClass , EmulatedIntEnum::class) && \is_int ($ value ))
219+ || (\is_subclass_of ($ enumClass , EmulatedStringEnum::class) && \is_string ($ value )), /** @phpstan-ignore-line */
220+ "Enum case constant \"{$ enumClass }:: {$ name }\" does not match enum backing type "
221+ );
222+
223+ assert (
224+ \count (\array_keys ($ caseConstants , $ value , true )) === 0 ,
225+ "Enum case value for {$ enumClass }:: {$ name } is ambiguous "
226+ );
227+
228+ /** @var static $case */
229+ $ case = new $ enumClass ($ name , $ value );
230+
231+ $ cases [$ name ] = $ case ;
232+ $ caseConstants [$ name ] = $ value ;
218233 }
219234 }
220235
221- $ cases = [];
222- foreach ($ caseConstants as $ name => $ value ) {
223- assert (
224- /** @phpstan-ignore-next-line */
225- (\is_subclass_of ($ enumClass , EmulatedIntEnum::class) && \is_int ($ value ))
226- || (\is_subclass_of ($ enumClass , EmulatedStringEnum::class) && \is_string ($ value )), /** @phpstan-ignore-line */
227- "Enum case constant \"{$ enumClass }:: {$ name }\" does not match enum backing type "
228- );
229-
230- assert (
231- \count (\array_keys ($ caseConstants , $ value , true )) === 1 ,
232- "Enum case value for {$ enumClass }:: {$ name } is ambiguous "
233- );
234-
235- /** @var static $case */
236- $ case = new $ enumClass ($ name , $ value );
237- $ cases [$ name ] = $ case ;
238- }
239-
240- /** @var array<string, string|int> $caseConstants */
241236 self ::$ cases [$ enumClass ] = $ cases ;
242237 self ::$ caseConstants [$ enumClass ] = $ caseConstants ;
243238 }
0 commit comments