protected function getAncestorTypes(IType $type) { $ancestorTypes = [$type->getIdentifier() => $type]; if (!$type->hasParentType()) { return $ancestorTypes; } if ($type instanceof ICompositeType) { foreach ($type->getComposedTypes() as $composedType) { $ancestorTypes += $this->getAncestorTypes($composedType); } } else { $parentType = $type->getParentType(); $ancestorTypes[$parentType->getIdentifier()] = $parentType; $ancestorTypes += $this->getAncestorTypes($parentType); } return $ancestorTypes; }