FileGenerator constructor
FileGenerator(
- FeatureSetDefaults editionDefaults,
- FileDescriptorProto descriptor,
- 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),
);
}
}
}