in src/api-gen/DataMerger.php [602:658]
private static function mergeClassishPair(
ScannedClassish $a,
ScannedDefinition $b,
): ScannedClassish {
$b = $b as ScannedClassish;
$name = self::mergeNames($a->getName(), $b->getName());
$agc = C\count($a->getGenericTypes());
$bgc = C\count($b->getGenericTypes());
invariant(
$agc === 0 || $bgc === 0 || $agc === $bgc,
'%s has differing numbers of generics',
$name,
);
if ($a is ScannedClass) {
$class = ScannedClass::class;
} else if ($a is ScannedInterface) {
$class = ScannedInterface::class;
} else if ($a is ScannedTrait) {
$class = ScannedTrait::class;
} else {
invariant_violation("Don't know how to handle class %s", \get_class($a));
}
return new $class(
$a->getASTx(),
$name,
$a->getContext(),
self::mergeAttributes($a->getAttributes(), $b->getAttributes()),
self::mergeDocComments($a->getDocComment(), $b->getDocComment()),
self::mergeDefinitionListsByName($a->getMethods(), $b->getMethods()),
self::mergeDefinitionListsByName(
$a->getProperties(),
$b->getProperties(),
),
self::mergeDefinitionListsByName($a->getConstants(), $b->getConstants()),
self::mergeDefinitionListsByName(
$a->getTypeConstants(),
$b->getTypeConstants(),
),
self::mergeGenerics($a->getGenericTypes(), $b->getGenericTypes()),
self::mergeTypehintPair(
$a->getParentClassInfo(),
$b->getParentClassInfo(),
),
self::mergeTypehintLists($a->getInterfaceInfo(), $b->getInterfaceInfo()),
self::mergeTypehintLists($a->getTraitInfo(), $b->getTraitInfo()),
($a->isAbstract() || $b->isAbstract())
? AbstractnessToken::IS_ABSTRACT
: AbstractnessToken::NOT_ABSTRACT,
($a->isFinal() || $b->isFinal())
? FinalityToken::IS_FINAL
: FinalityToken::NOT_FINAL,
);
}