resolve method

void resolve(
  1. GenerationContext ctx
)

Implementation

void resolve(GenerationContext ctx) {
  if (_resolved) throw StateError('message already resolved');
  _resolved = true;

  final reserved = mixin?.findReservedNames() ?? const <String>[];
  final members = messageMemberNames(
    _descriptor,
    classname,
    _usedTopLevelNames,
    reserved: reserved,
    lowercaseGroupNames: false,
  );

  fieldList = <ProtobufField>[];
  for (final names in members.fieldNames) {
    final descriptor = names.descriptor;
    ProtobufField field;
    if (descriptor.hasOneofIndex() && !descriptor.proto3Optional) {
      field = ProtobufField.message(
        names,
        this,
        _oneofFeatures[descriptor.oneofIndex],
        ctx,
      );
      _oneofFields[field.descriptor.oneofIndex].add(field);
    } else {
      field = ProtobufField.message(names, this, features, ctx);
    }
    fieldList.add(field);
  }
  _oneofNames = members.oneofNames;

  for (final m in _messageGenerators) {
    m.resolve(ctx);
  }
  for (final x in _extensionGenerators) {
    x.resolve(ctx);
  }
}