From 9d54dedd21bb5d4986d054d9223f0ae55d85e218 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 26 Sep 2025 23:30:52 +0700 Subject: [PATCH 1/2] [TypeDeclarationDocblocks] Skip union mixed|mixed on ClassMethodArrayDocblockParamFromLocalCallsRector --- .../Fixture/skip_union_mixed.php.inc | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_union_mixed.php.inc diff --git a/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_union_mixed.php.inc b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_union_mixed.php.inc new file mode 100644 index 00000000000..75783105856 --- /dev/null +++ b/rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_union_mixed.php.inc @@ -0,0 +1,33 @@ +compareArrays($orig, $new); + } + + private function compareArrays(array $array1, array $array2): void + { + foreach ($array1 as $key => $value1) { + $value2 = $array2[$key]; + + if (is_array($value1)) { + $this->compareArrays($array1[$key], $array2[$key]); + return; + } + + if ($value1 !== $value2) { + $this->diff[$key] = [ + 'existing' => $value1, + 'new' => $value2, + ]; + } + } + } +} \ No newline at end of file From 727f17acdffca35ca399935447a3b38db2c1ea0f Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sat, 27 Sep 2025 00:07:24 +0700 Subject: [PATCH 2/2] Fix --- src/NodeTypeResolver/PHPStan/Type/TypeFactory.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/NodeTypeResolver/PHPStan/Type/TypeFactory.php b/src/NodeTypeResolver/PHPStan/Type/TypeFactory.php index 67f344fa8cb..95fc0bb3598 100644 --- a/src/NodeTypeResolver/PHPStan/Type/TypeFactory.php +++ b/src/NodeTypeResolver/PHPStan/Type/TypeFactory.php @@ -64,6 +64,10 @@ public function uniquateTypes(array $types, bool $keepConstant = false): array $hasFalse = false; $hasTrue = false; foreach ($types as $type) { + if ($type instanceof MixedType) { + $type = new MixedType(); + } + $type = $this->normalizeObjectType($totalTypes, $type); $type = $this->normalizeBooleanType($hasFalse, $hasTrue, $type);