nodeComparator = $nodeComparator;
}
/**
* @param array $typeNodes
* @return array
*/
public function unwrapNullableUnionTypes(array $typeNodes) : array
{
$unwrappedTypeNodes = [];
foreach ($typeNodes as $typeNode) {
if ($typeNode instanceof UnionType) {
$unwrappedTypeNodes = \array_merge($unwrappedTypeNodes, $this->unwrapNullableUnionTypes($typeNode->types));
} elseif ($typeNode instanceof NullableType) {
$unwrappedTypeNodes[] = $typeNode->type;
$unwrappedTypeNodes[] = new Identifier('null');
} elseif ($typeNode instanceof IntersectionType) {
$unwrappedTypeNodes = \array_merge($unwrappedTypeNodes, $this->unwrapNullableUnionTypes($typeNode->types));
} else {
$unwrappedTypeNodes[] = $typeNode;
}
}
return $this->uniquateNodes($unwrappedTypeNodes);
}
/**
* @template TNode as Node
*
* @param TNode[] $nodes
* @return TNode[]
*/
public function uniquateNodes(array $nodes) : array
{
$uniqueNodes = [];
foreach ($nodes as $node) {
$uniqueHash = $this->nodeComparator->printWithoutComments($node);
$uniqueNodes[$uniqueHash] = $node;
}
// reset keys from 0, for further compatibility
return \array_values($uniqueNodes);
}
}