generate method

void generate(
  1. IndentingWriter out
)

Implementation

void generate(IndentingWriter out) {
  if (!_resolved) throw StateError('resolve not called');

  var name = _extensionName;
  final conditionalName = configurationDependent(
      'protobuf.omit_field_names', quoted(_extensionName));
  var type = _field.baseType;
  var dartType = type.getDartType(fileGen!);
  final conditionalExtendedName = configurationDependent(
      'protobuf.omit_message_names', quoted(_extendedFullName));

  String invocation;
  var positionals = <String>[];
  positionals.add(conditionalExtendedName);
  positionals.add(conditionalName);
  positionals.add('${_field.number}');
  positionals.add(_field.typeConstant);

  var named = <String, String?>{};
  named['protoName'] = _field.quotedProtoName;
  if (_field.isRepeated) {
    invocation = '$protobufImportPrefix.Extension<$dartType>.repeated';
    named['check'] =
        '$protobufImportPrefix.getCheckFunction(${_field.typeConstant})';
    if (type.isMessage || type.isGroup) {
      named['subBuilder'] = '$dartType.create';
    } else if (type.isEnum) {
      named['valueOf'] = '$dartType.valueOf';
      named['enumValues'] = '$dartType.values';
    }
  } else {
    invocation = '$protobufImportPrefix.Extension<$dartType>';
    named['defaultOrMaker'] = _field.generateDefaultFunction();
    if (type.isMessage || type.isGroup) {
      named['subBuilder'] = '$dartType.create';
    } else if (type.isEnum) {
      var dartEnum = type.getDartType(fileGen!);
      named['valueOf'] = '$dartEnum.valueOf';
      named['enumValues'] = '$dartEnum.values';
    }
  }
  var fieldDefinition = 'static final ';
  out.printAnnotated(
      '$fieldDefinition$name = '
      '$invocation(${ProtobufField._formatArguments(positionals, named)});\n',
      [
        NamedLocation(
            name: name,
            fieldPathSegment: List.from(fieldPath),
            start: fieldDefinition.length)
      ]);
}