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 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);