done() || ! $stream->next() instanceof OpeningBracketToken) { return new ClassStringType(); } $stream->forward(); if ($stream->done()) { throw new ClassStringMissingSubType(); } $type = $stream->read(); if ($stream->done() || ! $stream->forward() instanceof ClosingBracketToken) { throw new ClassStringClosingBracketMissing($type); } $types = $type instanceof UnionType ? $type->types() : [$type]; return ClassStringType::from($types); } public function symbol(): string { return 'class-string'; } }