/**
* @param Context $context
* The context in which the structural element lives
*
* @param string $name,
* The name of the typed structural element
*
* @param UnionType $type,
* A '|' delimited set of types satisfied by this
* typed structural element.
*
* @param int $flags,
* The flags property contains node specific flags. It is
* always defined, but for most nodes it is always zero.
* ast\kind_uses_flags() can be used to determine whether
* a certain kind has a meaningful flags value.
*
* @param FullyQualifiedClassName $fqsen
* A fully qualified name for this class
*
* @param Type|null $parent_type
* @param FullyQualifiedClassName[]|null $interface_fqsen_list
* @param FullyQualifiedClassName[]|null $trait_fqsen_list
*/
public function __construct(Context $context, string $name, UnionType $type, int $flags, FullyQualifiedClassName $fqsen, Type $parent_type = null, array $interface_fqsen_list = [], array $trait_fqsen_list = [])
{
parent::__construct($context, $name, $type, $flags, $fqsen);
$this->parent_type = $parent_type;
$this->interface_fqsen_list = $interface_fqsen_list;
$this->trait_fqsen_list = $trait_fqsen_list;
$this->setInternalScope(new ClassScope($context->getScope(), $fqsen));
}