diff --git a/src/Type/ObjectType.php b/src/Type/ObjectType.php index 2761a46d86..49a95678e4 100644 --- a/src/Type/ObjectType.php +++ b/src/Type/ObjectType.php @@ -696,7 +696,8 @@ public function getIterableKeyType(): Type } } - if ($this->isInstanceOf(Traversable::class)->yes() && !$this->isExtraOffsetAccessibleClass()->yes()) { + $extraOffsetAccessible = $this->isExtraOffsetAccessibleClass()->yes(); + if ($this->isInstanceOf(Traversable::class)->yes() && !$extraOffsetAccessible) { $isTraversable = true; $tKey = GenericTypeVariableResolver::getType($this, Traversable::class, 'TKey'); if ($tKey !== null) { @@ -712,6 +713,10 @@ public function getIterableKeyType(): Type )->getReturnType()); } + if ($extraOffsetAccessible) { + return new MixedType(true); + } + if ($isTraversable) { return new MixedType(); } @@ -732,7 +737,8 @@ public function getIterableValueType(): Type } } - if ($this->isInstanceOf(Traversable::class)->yes() && !$this->isExtraOffsetAccessibleClass()->yes()) { + $extraOffsetAccessible = $this->isExtraOffsetAccessibleClass()->yes(); + if ($this->isInstanceOf(Traversable::class)->yes() && !$extraOffsetAccessible) { $isTraversable = true; $tValue = GenericTypeVariableResolver::getType($this, Traversable::class, 'TValue'); if ($tValue !== null) { @@ -748,6 +754,10 @@ public function getIterableValueType(): Type )->getReturnType()); } + if ($extraOffsetAccessible) { + return new MixedType(true); + } + if ($isTraversable) { return new MixedType(); }