FileGenerator constructor

FileGenerator(
  1. FeatureSetDefaults editionDefaults,
  2. FileDescriptorProto descriptor,
  3. GenerationOptions options
)

Implementation

FileGenerator(
  FeatureSetDefaults editionDefaults,
  this.descriptor,
  this.options,
) : protoFileUri = Uri.file(descriptor.name),
    edition = _getEdition(descriptor),
    features = resolveFeatures(
      _getEditionDefaults(editionDefaults, _getEdition(descriptor)),
      descriptor.options.features,
    ) {
  if (protoFileUri.isAbsolute) {
    // protoc should never generate an import with an absolute path.
    throw 'FAILURE: Import with absolute path is not supported';
  }

  final declaredMixins = _getDeclaredMixins(descriptor);
  final defaultMixinName =
      descriptor.options.getExtension(Dart_options.defaultMixin) as String? ??
      '';
  final defaultMixin =
      declaredMixins[defaultMixinName] ?? findMixin(defaultMixinName);
  if (defaultMixin == null && defaultMixinName.isNotEmpty) {
    throw 'Option default_mixin on file ${descriptor.name}: Unknown mixin '
        '$defaultMixinName';
  }

  // Load and register all enum and message types.
  for (var i = 0; i < descriptor.enumType.length; i++) {
    enumGenerators.add(
      EnumGenerator.topLevel(
        descriptor.enumType[i],
        this,
        usedTopLevelNames,
        i,
      ),
    );
  }
  for (var i = 0; i < descriptor.messageType.length; i++) {
    messageGenerators.add(
      MessageGenerator.topLevel(
        descriptor.messageType[i],
        this,
        declaredMixins,
        defaultMixin,
        usedTopLevelNames,
        i,
      ),
    );
  }
  for (var i = 0; i < descriptor.extension.length; i++) {
    extensionGenerators.add(
      ExtensionGenerator.topLevel(
        descriptor.extension[i],
        this,
        usedExtensionNames,
        i,
      ),
    );
  }
  for (var i = 0; i < descriptor.service.length; i++) {
    final service = descriptor.service[i];
    if (options.useGrpc) {
      grpcGenerators.add(GrpcServiceGenerator(service, this, i));
    } else {
      final serviceGen = ServiceGenerator(
        service,
        this,
        usedTopLevelServiceNames,
      );
      serviceGenerators.add(serviceGen);
      clientApiGenerators.add(
        ClientApiGenerator(serviceGen, usedTopLevelNames, i),
      );
    }
  }
}