Skip to content

Commit c10aad0

Browse files
committed
Unsealed types awareness in more methods
1 parent 14e158e commit c10aad0

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

src/Type/Constant/ConstantArrayType.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,16 @@ public function getReferencedClasses(): array
244244
}
245245
}
246246

247+
if ($this->unsealed !== null) {
248+
[$unsealedKeyType, $unsealedValueType] = $this->unsealed;
249+
foreach ($unsealedKeyType->getReferencedClasses() as $referencedClass) {
250+
$referencedClasses[] = $referencedClass;
251+
}
252+
foreach ($unsealedValueType->getReferencedClasses() as $referencedClass) {
253+
$referencedClasses[] = $referencedClass;
254+
}
255+
}
256+
247257
return $referencedClasses;
248258
}
249259

@@ -851,6 +861,25 @@ public function equals(Type $type): bool
851861
return false;
852862
}
853863

864+
// Both `unsealed === null` and `unsealed === [explicitNever, explicitNever]`
865+
// mean "sealed", just from different code paths (pre-bleeding-edge vs.
866+
// fresh bleeding-edge builder). Treat them as equivalent here, only
867+
// comparing the actual extras when both sides have real ones.
868+
$thisIsSealed = $this->isUnsealed()->no();
869+
$otherIsSealed = $type->isUnsealed()->no();
870+
if ($thisIsSealed !== $otherIsSealed) {
871+
return false;
872+
}
873+
874+
if (!$thisIsSealed && $this->unsealed !== null && $type->unsealed !== null) {
875+
if (!$this->unsealed[0]->equals($type->unsealed[0])) {
876+
return false;
877+
}
878+
if (!$this->unsealed[1]->equals($type->unsealed[1])) {
879+
return false;
880+
}
881+
}
882+
854883
return true;
855884
}
856885

@@ -2152,6 +2181,16 @@ public function getReferencedTemplateTypes(TemplateTypeVariance $positionVarianc
21522181
}
21532182
}
21542183

2184+
if ($this->unsealed !== null) {
2185+
[$unsealedKeyType, $unsealedValueType] = $this->unsealed;
2186+
foreach ($unsealedKeyType->getReferencedTemplateTypes($variance) as $reference) {
2187+
$references[] = $reference;
2188+
}
2189+
foreach ($unsealedValueType->getReferencedTemplateTypes($variance) as $reference) {
2190+
$references[] = $reference;
2191+
}
2192+
}
2193+
21552194
return $references;
21562195
}
21572196

0 commit comments

Comments
 (0)