From 1bf1852aab9da472cea8c7be24044657f2078814 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sat, 27 Sep 2025 15:16:58 +0700 Subject: [PATCH] [TypeDeclarationDocblock] clean up recursive mixed check, only in first union to avoid deep mixed removed --- .../NodeAnalyzer/CallTypesResolver.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php index 8e71843aafb..f0864011f8e 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php +++ b/rules/TypeDeclaration/NodeAnalyzer/CallTypesResolver.php @@ -134,10 +134,16 @@ private function unionToSingleType(array $staticTypesByArgumentPosition, bool $r if ($staticTypeByArgumentPosition[$position] instanceof UnionType) { foreach ($staticTypeByArgumentPosition[$position]->getTypes() as $subType) { + // has another type over mixed is not allowed, even on native type if ($subType instanceof MixedType) { $staticTypeByArgumentPosition[$position] = new MixedType(); continue 2; } + + if ($removeMixedArray && $subType instanceof ArrayType && $this->isArrayMixedMixedType($subType)) { + $staticTypeByArgumentPosition[$position] = new MixedType(); + continue 2; + } } } } @@ -228,14 +234,6 @@ private function isEmptyArray(Expr $expr): bool private function isArrayMixedMixedType(Type $type): bool { if (! $type instanceof ArrayType) { - if ($type instanceof UnionType) { - foreach ($type->getTypes() as $subType) { - if ($subType instanceof ArrayType && $this->isArrayMixedMixedType($subType)) { - return true; - } - } - } - return false; }