FileGenerator constructor
FileGenerator(
- FileDescriptorProto descriptor,
- GenerationOptions options
Implementation
FileGenerator(this.descriptor, this.options)
: protoFileUri = Uri.file(descriptor.name),
syntax = descriptor.syntax == 'proto3'
? ProtoSyntax.proto3
: ProtoSyntax.proto2 {
if (protoFileUri.isAbsolute) {
// protoc should never generate an import with an absolute path.
throw 'FAILURE: Import with absolute path is not supported';
}
var declaredMixins = _getDeclaredMixins(descriptor);
var defaultMixinName =
descriptor.options.getExtension(Dart_options.defaultMixin) as String? ??
'';
var 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 service in descriptor.service) {
if (options.useGrpc) {
grpcGenerators.add(GrpcServiceGenerator(service, this));
} else {
var serviceGen =
ServiceGenerator(service, this, usedTopLevelServiceNames);
serviceGenerators.add(serviceGen);
clientApiGenerators
.add(ClientApiGenerator(serviceGen, usedTopLevelNames));
}
}
}