private static function mergeClassishPair()

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,
    );
  }