diff --git a/protobuf/CHANGELOG.md b/protobuf/CHANGELOG.md
index 186f726..32a41e6 100644
--- a/protobuf/CHANGELOG.md
+++ b/protobuf/CHANGELOG.md
@@ -25,9 +25,20 @@
   To migrate, use `PbMap.unmodifiable(map.keyFieldType, map.valueFieldType)`
   instead of `PbMap.unmodifiable(map)`. ([#902])
 
+* Messages deserialized from JSON now generate the unknown fields when
+  serialized as JSON.
+
+  Note that, as before, unknown fields in JSON messages are not stored in the
+  `unknownFields` of the message. They are only used by the JSON serializers to
+  support roundtripping.
+
+  ([#49], [#918])
+
 [#738]: https://github.com/google/protobuf.dart/issues/738
 [#896]: https://github.com/google/protobuf.dart/issues/896
 [#902]: https://github.com/google/protobuf.dart/issues/902
+[#49]: https://github.com/google/protobuf.dart/issues/49
+[#918]: https://github.com/google/protobuf.dart/pulls/918
 
 ## 3.1.0
 
diff --git a/protobuf/lib/meta.dart b/protobuf/lib/meta.dart
index 7f43263..9fe7dd0 100644
--- a/protobuf/lib/meta.dart
+++ b/protobuf/lib/meta.dart
@@ -56,6 +56,7 @@
   'writeToCodedBufferWriter',
   'writeToJson',
   'writeToJsonMap',
+  r'$_clearField',
   r'$_ensure',
   r'$_get',
   r'$_getI64',
@@ -72,6 +73,7 @@
   r'$_setBool',
   r'$_setBytes',
   r'$_setDouble',
+  r'$_setField',
   r'$_setFloat',
   r'$_setInt64',
   r'$_setSignedInt32',
diff --git a/protobuf/lib/src/protobuf/field_set.dart b/protobuf/lib/src/protobuf/field_set.dart
index 89930de..bd97991 100644
--- a/protobuf/lib/src/protobuf/field_set.dart
+++ b/protobuf/lib/src/protobuf/field_set.dart
@@ -33,6 +33,9 @@
   /// Contains all the unknown fields, or null if there aren't any.
   UnknownFieldSet? _unknownFields;
 
+  /// Contains unknown data for messages deserialized from json.
+  Map<String, dynamic>? _unknownJsonData;
+
   /// Encodes whether `this` has been frozen, and if so, also memoizes the
   /// hash code.
   ///
@@ -105,6 +108,7 @@
       if (_isReadOnly) return UnknownFieldSet.emptyUnknownFieldSet;
       _unknownFields = UnknownFieldSet();
     }
+    _unknownJsonData = null;
     return _unknownFields!;
   }
 
@@ -531,6 +535,8 @@
       if (_unknownFields != o._unknownFields) return false;
     }
 
+    // Ignore _unknownJsonData to preserve existing equality behavior.
+
     return true;
   }
 
@@ -597,6 +603,8 @@
     // Hash with unknown fields.
     hash = _HashUtils._combine(hash, _unknownFields?.hashCode ?? 0);
 
+    // Ignore _unknownJsonData to preserve existing hashing behavior.
+
     if (_isReadOnly) {
       _frozenState = hash;
     }
@@ -682,6 +690,11 @@
     } else {
       out.write(UnknownFieldSet().toString());
     }
+
+    final unknownJsonData = _unknownJsonData;
+    if (unknownJsonData != null) {
+      out.write(unknownJsonData.toString());
+    }
   }
 
   /// Merges the contents of the [other] into this message.
@@ -713,6 +726,15 @@
     if (otherUnknownFields != null) {
       _ensureUnknownFields().mergeFromUnknownFieldSet(otherUnknownFields);
     }
+
+    final otherUnknownJsonData = other._unknownJsonData;
+    if (otherUnknownJsonData != null) {
+      final newUnknownJsonData =
+          Map<String, dynamic>.from(_unknownJsonData ?? {});
+      otherUnknownJsonData
+          .forEach((key, value) => newUnknownJsonData[key] = value);
+      _unknownJsonData = newUnknownJsonData.isEmpty ? null : newUnknownJsonData;
+    }
   }
 
   void _mergeField(FieldInfo otherFi, fieldValue, {required bool isExtension}) {
@@ -868,6 +890,11 @@
       _ensureUnknownFields()._fields.addAll(originalUnknownFields._fields);
     }
 
+    final unknownJsonData = original._unknownJsonData;
+    if (unknownJsonData != null) {
+      _unknownJsonData = Map.from(unknownJsonData);
+    }
+
     _oneofCases?.addAll(original._oneofCases!);
   }
 }
diff --git a/protobuf/lib/src/protobuf/generated_message.dart b/protobuf/lib/src/protobuf/generated_message.dart
index d34dac4..5a0b51c 100644
--- a/protobuf/lib/src/protobuf/generated_message.dart
+++ b/protobuf/lib/src/protobuf/generated_message.dart
@@ -173,6 +173,10 @@
   }
 
   /// Serialize the message as the protobuf binary format.
+  ///
+  /// Unknown field data, data for which there is no metadata for the associated
+  /// field, will only be included if this message was deserialized from the
+  /// same wire format.
   Uint8List writeToBuffer() {
     final out = CodedBufferWriter();
     writeToCodedBufferWriter(out);
@@ -211,6 +215,10 @@
   /// Returns the JSON encoding of this message as a Dart [Map].
   ///
   /// The encoding is described in [GeneratedMessage.writeToJson].
+  ///
+  /// Unknown field data, data for which there is no metadata for the associated
+  /// field, will only be included if this message was deserialized from the
+  /// same wire format.
   Map<String, dynamic> writeToJsonMap() => _writeToJsonMap(_fieldSet);
 
   /// Returns a JSON string that encodes this message.
@@ -226,6 +234,10 @@
   /// represented as their integer value.
   ///
   /// For the proto3 JSON format use: [toProto3Json].
+  ///
+  /// Unknown field data, data for which there is no metadata for the associated
+  /// field, will only be included if this message was deserialized from the
+  /// same wire format.
   String writeToJson() => jsonEncode(writeToJsonMap());
 
   /// Returns an Object representing Proto3 JSON serialization of `this`.
@@ -241,6 +253,9 @@
   /// The [typeRegistry] is be used for encoding `Any` messages. If an `Any`
   /// message encoding a type not in [typeRegistry] is encountered, an
   /// error is thrown.
+  ///
+  /// Unknown field data, data for which there is no metadata for the associated
+  /// field, will not be included.
   Object? toProto3Json(
           {TypeRegistry typeRegistry = const TypeRegistry.empty()}) =>
       _writeToProto3Json(_fieldSet, typeRegistry);
@@ -509,6 +524,17 @@
   /// @nodoc
   void $_setInt64(int index, Int64 value) => _fieldSet._$set(index, value);
 
+  /// For generated code only. Separate from [setField] to distinguish
+  /// reflective accesses.
+  /// @nodoc
+  void $_setField(int tagNumber, Object value) =>
+      _fieldSet._setField(tagNumber, value);
+
+  /// For generated code only. Separate from [clearField] to distinguish
+  /// reflective accesses.
+  /// @nodoc
+  void $_clearField(int tagNumber) => _fieldSet._clearField(tagNumber);
+
   // Support for generating a read-only default singleton instance.
 
   static final Map<Function?, _SingletonMaker<GeneratedMessage>>
diff --git a/protobuf/lib/src/protobuf/json.dart b/protobuf/lib/src/protobuf/json.dart
index a59d2ca..1184fa6 100644
--- a/protobuf/lib/src/protobuf/json.dart
+++ b/protobuf/lib/src/protobuf/json.dart
@@ -89,6 +89,12 @@
       result['$tagNumber'] = convertToMap(value, fi.type);
     }
   }
+  final unknownJsonData = fs._unknownJsonData;
+  if (unknownJsonData != null) {
+    unknownJsonData.forEach((key, value) {
+      result[key] = value;
+    });
+  }
   return result;
 }
 
@@ -102,9 +108,11 @@
   for (final key in keys) {
     var fi = meta.byTagAsString[key];
     if (fi == null) {
-      if (registry == null) continue; // Unknown tag; skip
-      fi = registry.getExtension(fs._messageName, int.parse(key));
-      if (fi == null) continue; // Unknown tag; skip
+      fi = registry?.getExtension(fs._messageName, int.parse(key));
+      if (fi == null) {
+        (fs._unknownJsonData ??= {})[key] = json[key];
+        continue;
+      }
     }
     if (fi.isMapField) {
       _appendJsonMap(
diff --git a/protobuf/test/json_test.dart b/protobuf/test/json_test.dart
index e670038..11005d0 100644
--- a/protobuf/test/json_test.dart
+++ b/protobuf/test/json_test.dart
@@ -87,7 +87,7 @@
     checkJsonMap(m);
   });
 
-  test('testMergeFromJson', () {
+  test('testWriteToJsonMap', () {
     final t = T();
     t.mergeFromJson('''{"1": 123, "2": "hello"}''');
     checkMessage(t);
@@ -118,13 +118,21 @@
     final decoded = T()..mergeFromJsonMap(encoded);
     expect(decoded.int64, value);
   });
+
+  test('testJsonMapWithUnknown', () {
+    final m = example.writeToJsonMap();
+    m['9999'] = 'world';
+    final t = T()..mergeFromJsonMap(m);
+    checkJsonMap(t.writeToJsonMap(), unknownFields: {'9999': 'world'});
+  });
 }
 
-void checkJsonMap(Map m) {
-  expect(m.length, 3);
+void checkJsonMap(Map m, {Map<String, dynamic>? unknownFields}) {
+  expect(m.length, 3 + (unknownFields?.length ?? 0));
   expect(m['1'], 123);
   expect(m['2'], 'hello');
   expect(m['4'], [1, 2, 3]);
+  unknownFields?.forEach((k, v) => expect(m[k], v));
 }
 
 void checkMessage(T t) {
diff --git a/protoc_plugin/lib/src/generated/dart_options.pb.dart b/protoc_plugin/lib/src/generated/dart_options.pb.dart
index c1119da..f045820 100644
--- a/protoc_plugin/lib/src/generated/dart_options.pb.dart
+++ b/protoc_plugin/lib/src/generated/dart_options.pb.dart
@@ -82,7 +82,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   /// A URI pointing to the Dart library that defines the mixin.
   /// The generated Dart code will use this in an import statement.
@@ -96,7 +96,7 @@
   @$pb.TagNumber(2)
   $core.bool hasImportFrom() => $_has(1);
   @$pb.TagNumber(2)
-  void clearImportFrom() => clearField(2);
+  void clearImportFrom() => $_clearField(2);
 
   /// The name of another mixin to be applied ahead of this one.
   /// The generated class for the message will inherit from all mixins
@@ -111,7 +111,7 @@
   @$pb.TagNumber(3)
   $core.bool hasParent() => $_has(2);
   @$pb.TagNumber(3)
-  void clearParent() => clearField(3);
+  void clearParent() => $_clearField(3);
 }
 
 /// Defines additional Dart imports to be used with messages in this file.
diff --git a/protoc_plugin/lib/src/generated/descriptor.pb.dart b/protoc_plugin/lib/src/generated/descriptor.pb.dart
index 11ccb6f..d367d33 100644
--- a/protoc_plugin/lib/src/generated/descriptor.pb.dart
+++ b/protoc_plugin/lib/src/generated/descriptor.pb.dart
@@ -200,7 +200,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.String get package => $_getSZ(1);
@@ -212,7 +212,7 @@
   @$pb.TagNumber(2)
   $core.bool hasPackage() => $_has(1);
   @$pb.TagNumber(2)
-  void clearPackage() => clearField(2);
+  void clearPackage() => $_clearField(2);
 
   /// Names of files imported by this file.
   @$pb.TagNumber(3)
@@ -235,13 +235,13 @@
   FileOptions get options => $_getN(7);
   @$pb.TagNumber(8)
   set options(FileOptions v) {
-    setField(8, v);
+    $_setField(8, v);
   }
 
   @$pb.TagNumber(8)
   $core.bool hasOptions() => $_has(7);
   @$pb.TagNumber(8)
-  void clearOptions() => clearField(8);
+  void clearOptions() => $_clearField(8);
   @$pb.TagNumber(8)
   FileOptions ensureOptions() => $_ensure(7);
 
@@ -253,13 +253,13 @@
   SourceCodeInfo get sourceCodeInfo => $_getN(8);
   @$pb.TagNumber(9)
   set sourceCodeInfo(SourceCodeInfo v) {
-    setField(9, v);
+    $_setField(9, v);
   }
 
   @$pb.TagNumber(9)
   $core.bool hasSourceCodeInfo() => $_has(8);
   @$pb.TagNumber(9)
-  void clearSourceCodeInfo() => clearField(9);
+  void clearSourceCodeInfo() => $_clearField(9);
   @$pb.TagNumber(9)
   SourceCodeInfo ensureSourceCodeInfo() => $_ensure(8);
 
@@ -284,7 +284,7 @@
   @$pb.TagNumber(12)
   $core.bool hasSyntax() => $_has(11);
   @$pb.TagNumber(12)
-  void clearSyntax() => clearField(12);
+  void clearSyntax() => $_clearField(12);
 }
 
 class DescriptorProto_ExtensionRange extends $pb.GeneratedMessage {
@@ -360,7 +360,7 @@
   @$pb.TagNumber(1)
   $core.bool hasStart() => $_has(0);
   @$pb.TagNumber(1)
-  void clearStart() => clearField(1);
+  void clearStart() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.int get end => $_getIZ(1);
@@ -372,19 +372,19 @@
   @$pb.TagNumber(2)
   $core.bool hasEnd() => $_has(1);
   @$pb.TagNumber(2)
-  void clearEnd() => clearField(2);
+  void clearEnd() => $_clearField(2);
 
   @$pb.TagNumber(3)
   ExtensionRangeOptions get options => $_getN(2);
   @$pb.TagNumber(3)
   set options(ExtensionRangeOptions v) {
-    setField(3, v);
+    $_setField(3, v);
   }
 
   @$pb.TagNumber(3)
   $core.bool hasOptions() => $_has(2);
   @$pb.TagNumber(3)
-  void clearOptions() => clearField(3);
+  void clearOptions() => $_clearField(3);
   @$pb.TagNumber(3)
   ExtensionRangeOptions ensureOptions() => $_ensure(2);
 }
@@ -460,7 +460,7 @@
   @$pb.TagNumber(1)
   $core.bool hasStart() => $_has(0);
   @$pb.TagNumber(1)
-  void clearStart() => clearField(1);
+  void clearStart() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.int get end => $_getIZ(1);
@@ -472,7 +472,7 @@
   @$pb.TagNumber(2)
   $core.bool hasEnd() => $_has(1);
   @$pb.TagNumber(2)
-  void clearEnd() => clearField(2);
+  void clearEnd() => $_clearField(2);
 }
 
 /// Describes a message type.
@@ -594,7 +594,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.List<FieldDescriptorProto> get field => $_getList(1);
@@ -615,13 +615,13 @@
   MessageOptions get options => $_getN(6);
   @$pb.TagNumber(7)
   set options(MessageOptions v) {
-    setField(7, v);
+    $_setField(7, v);
   }
 
   @$pb.TagNumber(7)
   $core.bool hasOptions() => $_has(6);
   @$pb.TagNumber(7)
-  void clearOptions() => clearField(7);
+  void clearOptions() => $_clearField(7);
   @$pb.TagNumber(7)
   MessageOptions ensureOptions() => $_ensure(6);
 
@@ -814,7 +814,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   /// For extensions, this is the name of the type being extended.  It is
   /// resolved in the same manner as type_name.
@@ -828,7 +828,7 @@
   @$pb.TagNumber(2)
   $core.bool hasExtendee() => $_has(1);
   @$pb.TagNumber(2)
-  void clearExtendee() => clearField(2);
+  void clearExtendee() => $_clearField(2);
 
   @$pb.TagNumber(3)
   $core.int get number => $_getIZ(2);
@@ -840,19 +840,19 @@
   @$pb.TagNumber(3)
   $core.bool hasNumber() => $_has(2);
   @$pb.TagNumber(3)
-  void clearNumber() => clearField(3);
+  void clearNumber() => $_clearField(3);
 
   @$pb.TagNumber(4)
   FieldDescriptorProto_Label get label => $_getN(3);
   @$pb.TagNumber(4)
   set label(FieldDescriptorProto_Label v) {
-    setField(4, v);
+    $_setField(4, v);
   }
 
   @$pb.TagNumber(4)
   $core.bool hasLabel() => $_has(3);
   @$pb.TagNumber(4)
-  void clearLabel() => clearField(4);
+  void clearLabel() => $_clearField(4);
 
   /// If type_name is set, this need not be set.  If both this and type_name
   /// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
@@ -860,13 +860,13 @@
   FieldDescriptorProto_Type get type => $_getN(4);
   @$pb.TagNumber(5)
   set type(FieldDescriptorProto_Type v) {
-    setField(5, v);
+    $_setField(5, v);
   }
 
   @$pb.TagNumber(5)
   $core.bool hasType() => $_has(4);
   @$pb.TagNumber(5)
-  void clearType() => clearField(5);
+  void clearType() => $_clearField(5);
 
   /// For message and enum types, this is the name of the type.  If the name
   /// starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
@@ -883,7 +883,7 @@
   @$pb.TagNumber(6)
   $core.bool hasTypeName() => $_has(5);
   @$pb.TagNumber(6)
-  void clearTypeName() => clearField(6);
+  void clearTypeName() => $_clearField(6);
 
   /// For numeric types, contains the original text representation of the value.
   /// For booleans, "true" or "false".
@@ -900,19 +900,19 @@
   @$pb.TagNumber(7)
   $core.bool hasDefaultValue() => $_has(6);
   @$pb.TagNumber(7)
-  void clearDefaultValue() => clearField(7);
+  void clearDefaultValue() => $_clearField(7);
 
   @$pb.TagNumber(8)
   FieldOptions get options => $_getN(7);
   @$pb.TagNumber(8)
   set options(FieldOptions v) {
-    setField(8, v);
+    $_setField(8, v);
   }
 
   @$pb.TagNumber(8)
   $core.bool hasOptions() => $_has(7);
   @$pb.TagNumber(8)
-  void clearOptions() => clearField(8);
+  void clearOptions() => $_clearField(8);
   @$pb.TagNumber(8)
   FieldOptions ensureOptions() => $_ensure(7);
 
@@ -928,7 +928,7 @@
   @$pb.TagNumber(9)
   $core.bool hasOneofIndex() => $_has(8);
   @$pb.TagNumber(9)
-  void clearOneofIndex() => clearField(9);
+  void clearOneofIndex() => $_clearField(9);
 
   /// JSON name of this field. The value is set by protocol compiler. If the
   /// user has set a "json_name" option on this field, that option's value
@@ -944,7 +944,7 @@
   @$pb.TagNumber(10)
   $core.bool hasJsonName() => $_has(9);
   @$pb.TagNumber(10)
-  void clearJsonName() => clearField(10);
+  void clearJsonName() => $_clearField(10);
 
   ///  If true, this is a proto3 "optional". When a proto3 field is optional, it
   ///  tracks presence regardless of field type.
@@ -977,7 +977,7 @@
   @$pb.TagNumber(17)
   $core.bool hasProto3Optional() => $_has(10);
   @$pb.TagNumber(17)
-  void clearProto3Optional() => clearField(17);
+  void clearProto3Optional() => $_clearField(17);
 }
 
 /// Describes a oneof.
@@ -1046,19 +1046,19 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   @$pb.TagNumber(2)
   OneofOptions get options => $_getN(1);
   @$pb.TagNumber(2)
   set options(OneofOptions v) {
-    setField(2, v);
+    $_setField(2, v);
   }
 
   @$pb.TagNumber(2)
   $core.bool hasOptions() => $_has(1);
   @$pb.TagNumber(2)
-  void clearOptions() => clearField(2);
+  void clearOptions() => $_clearField(2);
   @$pb.TagNumber(2)
   OneofOptions ensureOptions() => $_ensure(1);
 }
@@ -1139,7 +1139,7 @@
   @$pb.TagNumber(1)
   $core.bool hasStart() => $_has(0);
   @$pb.TagNumber(1)
-  void clearStart() => clearField(1);
+  void clearStart() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.int get end => $_getIZ(1);
@@ -1151,7 +1151,7 @@
   @$pb.TagNumber(2)
   $core.bool hasEnd() => $_has(1);
   @$pb.TagNumber(2)
-  void clearEnd() => clearField(2);
+  void clearEnd() => $_clearField(2);
 }
 
 /// Describes an enum type.
@@ -1238,7 +1238,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.List<EnumValueDescriptorProto> get value => $_getList(1);
@@ -1247,13 +1247,13 @@
   EnumOptions get options => $_getN(2);
   @$pb.TagNumber(3)
   set options(EnumOptions v) {
-    setField(3, v);
+    $_setField(3, v);
   }
 
   @$pb.TagNumber(3)
   $core.bool hasOptions() => $_has(2);
   @$pb.TagNumber(3)
-  void clearOptions() => clearField(3);
+  void clearOptions() => $_clearField(3);
   @$pb.TagNumber(3)
   EnumOptions ensureOptions() => $_ensure(2);
 
@@ -1342,7 +1342,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.int get number => $_getIZ(1);
@@ -1354,19 +1354,19 @@
   @$pb.TagNumber(2)
   $core.bool hasNumber() => $_has(1);
   @$pb.TagNumber(2)
-  void clearNumber() => clearField(2);
+  void clearNumber() => $_clearField(2);
 
   @$pb.TagNumber(3)
   EnumValueOptions get options => $_getN(2);
   @$pb.TagNumber(3)
   set options(EnumValueOptions v) {
-    setField(3, v);
+    $_setField(3, v);
   }
 
   @$pb.TagNumber(3)
   $core.bool hasOptions() => $_has(2);
   @$pb.TagNumber(3)
-  void clearOptions() => clearField(3);
+  void clearOptions() => $_clearField(3);
   @$pb.TagNumber(3)
   EnumValueOptions ensureOptions() => $_ensure(2);
 }
@@ -1445,7 +1445,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.List<MethodDescriptorProto> get method => $_getList(1);
@@ -1454,13 +1454,13 @@
   ServiceOptions get options => $_getN(2);
   @$pb.TagNumber(3)
   set options(ServiceOptions v) {
-    setField(3, v);
+    $_setField(3, v);
   }
 
   @$pb.TagNumber(3)
   $core.bool hasOptions() => $_has(2);
   @$pb.TagNumber(3)
-  void clearOptions() => clearField(3);
+  void clearOptions() => $_clearField(3);
   @$pb.TagNumber(3)
   ServiceOptions ensureOptions() => $_ensure(2);
 }
@@ -1552,7 +1552,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   /// Input and output type names.  These are resolved in the same way as
   /// FieldDescriptorProto.type_name, but must refer to a message type.
@@ -1566,7 +1566,7 @@
   @$pb.TagNumber(2)
   $core.bool hasInputType() => $_has(1);
   @$pb.TagNumber(2)
-  void clearInputType() => clearField(2);
+  void clearInputType() => $_clearField(2);
 
   @$pb.TagNumber(3)
   $core.String get outputType => $_getSZ(2);
@@ -1578,19 +1578,19 @@
   @$pb.TagNumber(3)
   $core.bool hasOutputType() => $_has(2);
   @$pb.TagNumber(3)
-  void clearOutputType() => clearField(3);
+  void clearOutputType() => $_clearField(3);
 
   @$pb.TagNumber(4)
   MethodOptions get options => $_getN(3);
   @$pb.TagNumber(4)
   set options(MethodOptions v) {
-    setField(4, v);
+    $_setField(4, v);
   }
 
   @$pb.TagNumber(4)
   $core.bool hasOptions() => $_has(3);
   @$pb.TagNumber(4)
-  void clearOptions() => clearField(4);
+  void clearOptions() => $_clearField(4);
   @$pb.TagNumber(4)
   MethodOptions ensureOptions() => $_ensure(3);
 
@@ -1605,7 +1605,7 @@
   @$pb.TagNumber(5)
   $core.bool hasClientStreaming() => $_has(4);
   @$pb.TagNumber(5)
-  void clearClientStreaming() => clearField(5);
+  void clearClientStreaming() => $_clearField(5);
 
   /// Identifies if server streams multiple server messages
   @$pb.TagNumber(6)
@@ -1618,7 +1618,7 @@
   @$pb.TagNumber(6)
   $core.bool hasServerStreaming() => $_has(5);
   @$pb.TagNumber(6)
-  void clearServerStreaming() => clearField(6);
+  void clearServerStreaming() => $_clearField(6);
 }
 
 class FileOptions extends $pb.GeneratedMessage {
@@ -1793,7 +1793,7 @@
   @$pb.TagNumber(1)
   $core.bool hasJavaPackage() => $_has(0);
   @$pb.TagNumber(1)
-  void clearJavaPackage() => clearField(1);
+  void clearJavaPackage() => $_clearField(1);
 
   /// If set, all the classes from the .proto file are wrapped in a single
   /// outer class with the given name.  This applies to both Proto1
@@ -1810,19 +1810,19 @@
   @$pb.TagNumber(8)
   $core.bool hasJavaOuterClassname() => $_has(1);
   @$pb.TagNumber(8)
-  void clearJavaOuterClassname() => clearField(8);
+  void clearJavaOuterClassname() => $_clearField(8);
 
   @$pb.TagNumber(9)
   FileOptions_OptimizeMode get optimizeFor => $_getN(2);
   @$pb.TagNumber(9)
   set optimizeFor(FileOptions_OptimizeMode v) {
-    setField(9, v);
+    $_setField(9, v);
   }
 
   @$pb.TagNumber(9)
   $core.bool hasOptimizeFor() => $_has(2);
   @$pb.TagNumber(9)
-  void clearOptimizeFor() => clearField(9);
+  void clearOptimizeFor() => $_clearField(9);
 
   /// If set true, then the Java code generator will generate a separate .java
   /// file for each top-level message, enum, and service defined in the .proto
@@ -1840,7 +1840,7 @@
   @$pb.TagNumber(10)
   $core.bool hasJavaMultipleFiles() => $_has(3);
   @$pb.TagNumber(10)
-  void clearJavaMultipleFiles() => clearField(10);
+  void clearJavaMultipleFiles() => $_clearField(10);
 
   /// Sets the Go package where structs generated from this .proto will be
   /// placed. If omitted, the Go package will be derived from the following:
@@ -1857,7 +1857,7 @@
   @$pb.TagNumber(11)
   $core.bool hasGoPackage() => $_has(4);
   @$pb.TagNumber(11)
-  void clearGoPackage() => clearField(11);
+  void clearGoPackage() => $_clearField(11);
 
   ///  Should generic services be generated in each language?  "Generic" services
   ///  are not specific to any particular RPC system.  They are generated by the
@@ -1879,7 +1879,7 @@
   @$pb.TagNumber(16)
   $core.bool hasCcGenericServices() => $_has(5);
   @$pb.TagNumber(16)
-  void clearCcGenericServices() => clearField(16);
+  void clearCcGenericServices() => $_clearField(16);
 
   @$pb.TagNumber(17)
   $core.bool get javaGenericServices => $_getBF(6);
@@ -1891,7 +1891,7 @@
   @$pb.TagNumber(17)
   $core.bool hasJavaGenericServices() => $_has(6);
   @$pb.TagNumber(17)
-  void clearJavaGenericServices() => clearField(17);
+  void clearJavaGenericServices() => $_clearField(17);
 
   @$pb.TagNumber(18)
   $core.bool get pyGenericServices => $_getBF(7);
@@ -1903,7 +1903,7 @@
   @$pb.TagNumber(18)
   $core.bool hasPyGenericServices() => $_has(7);
   @$pb.TagNumber(18)
-  void clearPyGenericServices() => clearField(18);
+  void clearPyGenericServices() => $_clearField(18);
 
   /// This option does nothing.
   @$core.Deprecated('This field is deprecated.')
@@ -1920,7 +1920,7 @@
   $core.bool hasJavaGenerateEqualsAndHash() => $_has(8);
   @$core.Deprecated('This field is deprecated.')
   @$pb.TagNumber(20)
-  void clearJavaGenerateEqualsAndHash() => clearField(20);
+  void clearJavaGenerateEqualsAndHash() => $_clearField(20);
 
   /// Is this file deprecated?
   /// Depending on the target platform, this can emit Deprecated annotations
@@ -1936,7 +1936,7 @@
   @$pb.TagNumber(23)
   $core.bool hasDeprecated() => $_has(9);
   @$pb.TagNumber(23)
-  void clearDeprecated() => clearField(23);
+  void clearDeprecated() => $_clearField(23);
 
   /// If set true, then the Java2 code generator will generate code that
   /// throws an exception whenever an attempt is made to assign a non-UTF-8
@@ -1954,7 +1954,7 @@
   @$pb.TagNumber(27)
   $core.bool hasJavaStringCheckUtf8() => $_has(10);
   @$pb.TagNumber(27)
-  void clearJavaStringCheckUtf8() => clearField(27);
+  void clearJavaStringCheckUtf8() => $_clearField(27);
 
   /// Enables the use of arenas for the proto messages in this file. This applies
   /// only to generated classes for C++.
@@ -1968,7 +1968,7 @@
   @$pb.TagNumber(31)
   $core.bool hasCcEnableArenas() => $_has(11);
   @$pb.TagNumber(31)
-  void clearCcEnableArenas() => clearField(31);
+  void clearCcEnableArenas() => $_clearField(31);
 
   /// Sets the objective c class prefix which is prepended to all objective c
   /// generated classes from this .proto. There is no default.
@@ -1982,7 +1982,7 @@
   @$pb.TagNumber(36)
   $core.bool hasObjcClassPrefix() => $_has(12);
   @$pb.TagNumber(36)
-  void clearObjcClassPrefix() => clearField(36);
+  void clearObjcClassPrefix() => $_clearField(36);
 
   /// Namespace for generated classes; defaults to the package.
   @$pb.TagNumber(37)
@@ -1995,7 +1995,7 @@
   @$pb.TagNumber(37)
   $core.bool hasCsharpNamespace() => $_has(13);
   @$pb.TagNumber(37)
-  void clearCsharpNamespace() => clearField(37);
+  void clearCsharpNamespace() => $_clearField(37);
 
   /// By default Swift generators will take the proto package and CamelCase it
   /// replacing '.' with underscore and use that to prefix the types/symbols
@@ -2011,7 +2011,7 @@
   @$pb.TagNumber(39)
   $core.bool hasSwiftPrefix() => $_has(14);
   @$pb.TagNumber(39)
-  void clearSwiftPrefix() => clearField(39);
+  void clearSwiftPrefix() => $_clearField(39);
 
   /// Sets the php class prefix which is prepended to all php generated classes
   /// from this .proto. Default is empty.
@@ -2025,7 +2025,7 @@
   @$pb.TagNumber(40)
   $core.bool hasPhpClassPrefix() => $_has(15);
   @$pb.TagNumber(40)
-  void clearPhpClassPrefix() => clearField(40);
+  void clearPhpClassPrefix() => $_clearField(40);
 
   /// Use this option to change the namespace of php generated classes. Default
   /// is empty. When this option is empty, the package name will be used for
@@ -2040,7 +2040,7 @@
   @$pb.TagNumber(41)
   $core.bool hasPhpNamespace() => $_has(16);
   @$pb.TagNumber(41)
-  void clearPhpNamespace() => clearField(41);
+  void clearPhpNamespace() => $_clearField(41);
 
   @$pb.TagNumber(42)
   $core.bool get phpGenericServices => $_getBF(17);
@@ -2052,7 +2052,7 @@
   @$pb.TagNumber(42)
   $core.bool hasPhpGenericServices() => $_has(17);
   @$pb.TagNumber(42)
-  void clearPhpGenericServices() => clearField(42);
+  void clearPhpGenericServices() => $_clearField(42);
 
   /// Use this option to change the namespace of php generated metadata classes.
   /// Default is empty. When this option is empty, the proto file name will be
@@ -2067,7 +2067,7 @@
   @$pb.TagNumber(44)
   $core.bool hasPhpMetadataNamespace() => $_has(18);
   @$pb.TagNumber(44)
-  void clearPhpMetadataNamespace() => clearField(44);
+  void clearPhpMetadataNamespace() => $_clearField(44);
 
   /// Use this option to change the package of ruby generated classes. Default
   /// is empty. When this option is not set, the package name will be used for
@@ -2082,7 +2082,7 @@
   @$pb.TagNumber(45)
   $core.bool hasRubyPackage() => $_has(19);
   @$pb.TagNumber(45)
-  void clearRubyPackage() => clearField(45);
+  void clearRubyPackage() => $_clearField(45);
 
   /// The parser stores options it doesn't recognize here.
   /// See the documentation for the "Options" section above.
@@ -2189,7 +2189,7 @@
   @$pb.TagNumber(1)
   $core.bool hasMessageSetWireFormat() => $_has(0);
   @$pb.TagNumber(1)
-  void clearMessageSetWireFormat() => clearField(1);
+  void clearMessageSetWireFormat() => $_clearField(1);
 
   /// Disables the generation of the standard "descriptor()" accessor, which can
   /// conflict with a field of the same name.  This is meant to make migration
@@ -2204,7 +2204,7 @@
   @$pb.TagNumber(2)
   $core.bool hasNoStandardDescriptorAccessor() => $_has(1);
   @$pb.TagNumber(2)
-  void clearNoStandardDescriptorAccessor() => clearField(2);
+  void clearNoStandardDescriptorAccessor() => $_clearField(2);
 
   /// Is this message deprecated?
   /// Depending on the target platform, this can emit Deprecated annotations
@@ -2220,7 +2220,7 @@
   @$pb.TagNumber(3)
   $core.bool hasDeprecated() => $_has(2);
   @$pb.TagNumber(3)
-  void clearDeprecated() => clearField(3);
+  void clearDeprecated() => $_clearField(3);
 
   ///  Whether the message is an automatically generated map entry type for the
   ///  maps field.
@@ -2253,7 +2253,7 @@
   @$pb.TagNumber(7)
   $core.bool hasMapEntry() => $_has(3);
   @$pb.TagNumber(7)
-  void clearMapEntry() => clearField(7);
+  void clearMapEntry() => $_clearField(7);
 
   /// The parser stores options it doesn't recognize here. See above.
   @$pb.TagNumber(999)
@@ -2357,13 +2357,13 @@
   FieldOptions_CType get ctype => $_getN(0);
   @$pb.TagNumber(1)
   set ctype(FieldOptions_CType v) {
-    setField(1, v);
+    $_setField(1, v);
   }
 
   @$pb.TagNumber(1)
   $core.bool hasCtype() => $_has(0);
   @$pb.TagNumber(1)
-  void clearCtype() => clearField(1);
+  void clearCtype() => $_clearField(1);
 
   /// The packed option can be enabled for repeated primitive fields to enable
   /// a more efficient representation on the wire. Rather than repeatedly
@@ -2380,7 +2380,7 @@
   @$pb.TagNumber(2)
   $core.bool hasPacked() => $_has(1);
   @$pb.TagNumber(2)
-  void clearPacked() => clearField(2);
+  void clearPacked() => $_clearField(2);
 
   /// Is this field deprecated?
   /// Depending on the target platform, this can emit Deprecated annotations
@@ -2396,7 +2396,7 @@
   @$pb.TagNumber(3)
   $core.bool hasDeprecated() => $_has(2);
   @$pb.TagNumber(3)
-  void clearDeprecated() => clearField(3);
+  void clearDeprecated() => $_clearField(3);
 
   ///  Should this field be parsed lazily?  Lazy applies only to message-type
   ///  fields.  It means that when the outer message is initially parsed, the
@@ -2436,7 +2436,7 @@
   @$pb.TagNumber(5)
   $core.bool hasLazy() => $_has(3);
   @$pb.TagNumber(5)
-  void clearLazy() => clearField(5);
+  void clearLazy() => $_clearField(5);
 
   ///  The jstype option determines the JavaScript type used for values of the
   ///  field.  The option is permitted only for 64 bit integral and fixed types
@@ -2453,13 +2453,13 @@
   FieldOptions_JSType get jstype => $_getN(4);
   @$pb.TagNumber(6)
   set jstype(FieldOptions_JSType v) {
-    setField(6, v);
+    $_setField(6, v);
   }
 
   @$pb.TagNumber(6)
   $core.bool hasJstype() => $_has(4);
   @$pb.TagNumber(6)
-  void clearJstype() => clearField(6);
+  void clearJstype() => $_clearField(6);
 
   /// For Google-internal migration only. Do not use.
   @$pb.TagNumber(10)
@@ -2472,7 +2472,7 @@
   @$pb.TagNumber(10)
   $core.bool hasWeak() => $_has(5);
   @$pb.TagNumber(10)
-  void clearWeak() => clearField(10);
+  void clearWeak() => $_clearField(10);
 
   /// The parser stores options it doesn't recognize here. See above.
   @$pb.TagNumber(999)
@@ -2607,7 +2607,7 @@
   @$pb.TagNumber(2)
   $core.bool hasAllowAlias() => $_has(0);
   @$pb.TagNumber(2)
-  void clearAllowAlias() => clearField(2);
+  void clearAllowAlias() => $_clearField(2);
 
   /// Is this enum deprecated?
   /// Depending on the target platform, this can emit Deprecated annotations
@@ -2623,7 +2623,7 @@
   @$pb.TagNumber(3)
   $core.bool hasDeprecated() => $_has(1);
   @$pb.TagNumber(3)
-  void clearDeprecated() => clearField(3);
+  void clearDeprecated() => $_clearField(3);
 
   /// The parser stores options it doesn't recognize here. See above.
   @$pb.TagNumber(999)
@@ -2700,7 +2700,7 @@
   @$pb.TagNumber(1)
   $core.bool hasDeprecated() => $_has(0);
   @$pb.TagNumber(1)
-  void clearDeprecated() => clearField(1);
+  void clearDeprecated() => $_clearField(1);
 
   /// The parser stores options it doesn't recognize here. See above.
   @$pb.TagNumber(999)
@@ -2777,7 +2777,7 @@
   @$pb.TagNumber(33)
   $core.bool hasDeprecated() => $_has(0);
   @$pb.TagNumber(33)
-  void clearDeprecated() => clearField(33);
+  void clearDeprecated() => $_clearField(33);
 
   /// The parser stores options it doesn't recognize here. See above.
   @$pb.TagNumber(999)
@@ -2863,19 +2863,19 @@
   @$pb.TagNumber(33)
   $core.bool hasDeprecated() => $_has(0);
   @$pb.TagNumber(33)
-  void clearDeprecated() => clearField(33);
+  void clearDeprecated() => $_clearField(33);
 
   @$pb.TagNumber(34)
   MethodOptions_IdempotencyLevel get idempotencyLevel => $_getN(1);
   @$pb.TagNumber(34)
   set idempotencyLevel(MethodOptions_IdempotencyLevel v) {
-    setField(34, v);
+    $_setField(34, v);
   }
 
   @$pb.TagNumber(34)
   $core.bool hasIdempotencyLevel() => $_has(1);
   @$pb.TagNumber(34)
-  void clearIdempotencyLevel() => clearField(34);
+  void clearIdempotencyLevel() => $_clearField(34);
 
   /// The parser stores options it doesn't recognize here. See above.
   @$pb.TagNumber(999)
@@ -2955,7 +2955,7 @@
   @$pb.TagNumber(1)
   $core.bool hasNamePart() => $_has(0);
   @$pb.TagNumber(1)
-  void clearNamePart() => clearField(1);
+  void clearNamePart() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.bool get isExtension => $_getBF(1);
@@ -2967,7 +2967,7 @@
   @$pb.TagNumber(2)
   $core.bool hasIsExtension() => $_has(1);
   @$pb.TagNumber(2)
-  void clearIsExtension() => clearField(2);
+  void clearIsExtension() => $_clearField(2);
 }
 
 /// A message representing a option the parser does not recognize. This only
@@ -3075,7 +3075,7 @@
   @$pb.TagNumber(3)
   $core.bool hasIdentifierValue() => $_has(1);
   @$pb.TagNumber(3)
-  void clearIdentifierValue() => clearField(3);
+  void clearIdentifierValue() => $_clearField(3);
 
   @$pb.TagNumber(4)
   $fixnum.Int64 get positiveIntValue => $_getI64(2);
@@ -3087,7 +3087,7 @@
   @$pb.TagNumber(4)
   $core.bool hasPositiveIntValue() => $_has(2);
   @$pb.TagNumber(4)
-  void clearPositiveIntValue() => clearField(4);
+  void clearPositiveIntValue() => $_clearField(4);
 
   @$pb.TagNumber(5)
   $fixnum.Int64 get negativeIntValue => $_getI64(3);
@@ -3099,7 +3099,7 @@
   @$pb.TagNumber(5)
   $core.bool hasNegativeIntValue() => $_has(3);
   @$pb.TagNumber(5)
-  void clearNegativeIntValue() => clearField(5);
+  void clearNegativeIntValue() => $_clearField(5);
 
   @$pb.TagNumber(6)
   $core.double get doubleValue => $_getN(4);
@@ -3111,7 +3111,7 @@
   @$pb.TagNumber(6)
   $core.bool hasDoubleValue() => $_has(4);
   @$pb.TagNumber(6)
-  void clearDoubleValue() => clearField(6);
+  void clearDoubleValue() => $_clearField(6);
 
   @$pb.TagNumber(7)
   $core.List<$core.int> get stringValue => $_getN(5);
@@ -3123,7 +3123,7 @@
   @$pb.TagNumber(7)
   $core.bool hasStringValue() => $_has(5);
   @$pb.TagNumber(7)
-  void clearStringValue() => clearField(7);
+  void clearStringValue() => $_clearField(7);
 
   @$pb.TagNumber(8)
   $core.String get aggregateValue => $_getSZ(6);
@@ -3135,7 +3135,7 @@
   @$pb.TagNumber(8)
   $core.bool hasAggregateValue() => $_has(6);
   @$pb.TagNumber(8)
-  void clearAggregateValue() => clearField(8);
+  void clearAggregateValue() => $_clearField(8);
 }
 
 class SourceCodeInfo_Location extends $pb.GeneratedMessage {
@@ -3300,7 +3300,7 @@
   @$pb.TagNumber(3)
   $core.bool hasLeadingComments() => $_has(2);
   @$pb.TagNumber(3)
-  void clearLeadingComments() => clearField(3);
+  void clearLeadingComments() => $_clearField(3);
 
   @$pb.TagNumber(4)
   $core.String get trailingComments => $_getSZ(3);
@@ -3312,7 +3312,7 @@
   @$pb.TagNumber(4)
   $core.bool hasTrailingComments() => $_has(3);
   @$pb.TagNumber(4)
-  void clearTrailingComments() => clearField(4);
+  void clearTrailingComments() => $_clearField(4);
 
   @$pb.TagNumber(6)
   $core.List<$core.String> get leadingDetachedComments => $_getList(4);
@@ -3502,7 +3502,7 @@
   @$pb.TagNumber(2)
   $core.bool hasSourceFile() => $_has(1);
   @$pb.TagNumber(2)
-  void clearSourceFile() => clearField(2);
+  void clearSourceFile() => $_clearField(2);
 
   /// Identifies the starting offset in bytes in the generated code
   /// that relates to the identified object.
@@ -3516,7 +3516,7 @@
   @$pb.TagNumber(3)
   $core.bool hasBegin() => $_has(2);
   @$pb.TagNumber(3)
-  void clearBegin() => clearField(3);
+  void clearBegin() => $_clearField(3);
 
   /// Identifies the ending offset in bytes in the generated code that
   /// relates to the identified offset. The end offset should be one past
@@ -3531,7 +3531,7 @@
   @$pb.TagNumber(4)
   $core.bool hasEnd() => $_has(3);
   @$pb.TagNumber(4)
-  void clearEnd() => clearField(4);
+  void clearEnd() => $_clearField(4);
 }
 
 /// Describes the relationship between generated code and its original source
diff --git a/protoc_plugin/lib/src/generated/plugin.pb.dart b/protoc_plugin/lib/src/generated/plugin.pb.dart
index f05dbe1..bad2418 100644
--- a/protoc_plugin/lib/src/generated/plugin.pb.dart
+++ b/protoc_plugin/lib/src/generated/plugin.pb.dart
@@ -91,7 +91,7 @@
   @$pb.TagNumber(1)
   $core.bool hasMajor() => $_has(0);
   @$pb.TagNumber(1)
-  void clearMajor() => clearField(1);
+  void clearMajor() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.int get minor => $_getIZ(1);
@@ -103,7 +103,7 @@
   @$pb.TagNumber(2)
   $core.bool hasMinor() => $_has(1);
   @$pb.TagNumber(2)
-  void clearMinor() => clearField(2);
+  void clearMinor() => $_clearField(2);
 
   @$pb.TagNumber(3)
   $core.int get patch => $_getIZ(2);
@@ -115,7 +115,7 @@
   @$pb.TagNumber(3)
   $core.bool hasPatch() => $_has(2);
   @$pb.TagNumber(3)
-  void clearPatch() => clearField(3);
+  void clearPatch() => $_clearField(3);
 
   /// A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
   /// be empty for mainline stable releases.
@@ -129,7 +129,7 @@
   @$pb.TagNumber(4)
   $core.bool hasSuffix() => $_has(3);
   @$pb.TagNumber(4)
-  void clearSuffix() => clearField(4);
+  void clearSuffix() => $_clearField(4);
 }
 
 /// An encoded CodeGeneratorRequest is written to the plugin's stdin.
@@ -217,20 +217,20 @@
   @$pb.TagNumber(2)
   $core.bool hasParameter() => $_has(1);
   @$pb.TagNumber(2)
-  void clearParameter() => clearField(2);
+  void clearParameter() => $_clearField(2);
 
   /// The version number of protocol compiler.
   @$pb.TagNumber(3)
   Version get compilerVersion => $_getN(2);
   @$pb.TagNumber(3)
   set compilerVersion(Version v) {
-    setField(3, v);
+    $_setField(3, v);
   }
 
   @$pb.TagNumber(3)
   $core.bool hasCompilerVersion() => $_has(2);
   @$pb.TagNumber(3)
-  void clearCompilerVersion() => clearField(3);
+  void clearCompilerVersion() => $_clearField(3);
   @$pb.TagNumber(3)
   Version ensureCompilerVersion() => $_ensure(2);
 
@@ -342,7 +342,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 
   ///  If non-empty, indicates that the named file should already exist, and the
   ///  content here is to be inserted into that file at a defined insertion
@@ -391,7 +391,7 @@
   @$pb.TagNumber(2)
   $core.bool hasInsertionPoint() => $_has(1);
   @$pb.TagNumber(2)
-  void clearInsertionPoint() => clearField(2);
+  void clearInsertionPoint() => $_clearField(2);
 
   /// The file contents.
   @$pb.TagNumber(15)
@@ -404,7 +404,7 @@
   @$pb.TagNumber(15)
   $core.bool hasContent() => $_has(2);
   @$pb.TagNumber(15)
-  void clearContent() => clearField(15);
+  void clearContent() => $_clearField(15);
 
   /// Information describing the file content being inserted. If an insertion
   /// point is used, this information will be appropriately offset and inserted
@@ -413,13 +413,13 @@
   $0.GeneratedCodeInfo get generatedCodeInfo => $_getN(3);
   @$pb.TagNumber(16)
   set generatedCodeInfo($0.GeneratedCodeInfo v) {
-    setField(16, v);
+    $_setField(16, v);
   }
 
   @$pb.TagNumber(16)
   $core.bool hasGeneratedCodeInfo() => $_has(3);
   @$pb.TagNumber(16)
-  void clearGeneratedCodeInfo() => clearField(16);
+  void clearGeneratedCodeInfo() => $_clearField(16);
   @$pb.TagNumber(16)
   $0.GeneratedCodeInfo ensureGeneratedCodeInfo() => $_ensure(3);
 }
@@ -508,7 +508,7 @@
   @$pb.TagNumber(1)
   $core.bool hasError() => $_has(0);
   @$pb.TagNumber(1)
-  void clearError() => clearField(1);
+  void clearError() => $_clearField(1);
 
   /// A bitmask of supported features that the code generator supports.
   /// This is a bitwise "or" of values from the Feature enum.
@@ -522,7 +522,7 @@
   @$pb.TagNumber(2)
   $core.bool hasSupportedFeatures() => $_has(1);
   @$pb.TagNumber(2)
-  void clearSupportedFeatures() => clearField(2);
+  void clearSupportedFeatures() => $_clearField(2);
 
   @$pb.TagNumber(15)
   $core.List<CodeGeneratorResponse_File> get file => $_getList(2);
diff --git a/protoc_plugin/lib/src/message_generator.dart b/protoc_plugin/lib/src/message_generator.dart
index ee6e099..b3020c8 100644
--- a/protoc_plugin/lib/src/message_generator.dart
+++ b/protoc_plugin/lib/src/message_generator.dart
@@ -535,7 +535,7 @@
     out.println('${oneof.oneofEnumName} ${oneof.whichOneofMethodName}() '
         '=> ${oneof.byTagMapName}[\$_whichOneof(${oneof.index})]!;');
     out.println('void ${oneof.clearMethodName}() '
-        '=> clearField(\$_whichOneof(${oneof.index}));');
+        '=> \$_clearField(\$_whichOneof(${oneof.index}));');
   }
 
   void generateFieldAccessorsMutators(
@@ -597,7 +597,7 @@
         out.printlnAnnotated(
             'set ${names.fieldName}'
             '($fieldTypeString v) { '
-            'setField(${field.number}, v);'
+            '\$_setField(${field.number}, v);'
             ' }',
             [
               NamedLocation(
@@ -625,7 +625,7 @@
       _emitIndexAnnotation(field.number, out);
       out.printlnAnnotated(
           'void ${names.clearMethodName}() =>'
-          ' clearField(${field.number});',
+          ' \$_clearField(${field.number});',
           [
             NamedLocation(
                 name: names.clearMethodName!,
diff --git a/protoc_plugin/test/goldens/deprecations b/protoc_plugin/test/goldens/deprecations
index 9a03a71..97e98f7 100644
--- a/protoc_plugin/test/goldens/deprecations
+++ b/protoc_plugin/test/goldens/deprecations
@@ -73,7 +73,7 @@
   $core.bool hasName() => $_has(0);
   @$core.Deprecated('This field is deprecated.')
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 }
 
 class HelloReply extends $pb.GeneratedMessage {
@@ -124,7 +124,7 @@
   @$pb.TagNumber(1)
   $core.bool hasMessage() => $_has(0);
   @$pb.TagNumber(1)
-  void clearMessage() => clearField(1);
+  void clearMessage() => $_clearField(1);
 }
 
 @$core.Deprecated('This service is deprecated')
diff --git a/protoc_plugin/test/goldens/doc_comments b/protoc_plugin/test/goldens/doc_comments
index e7964ee..9460bcd 100644
--- a/protoc_plugin/test/goldens/doc_comments
+++ b/protoc_plugin/test/goldens/doc_comments
@@ -70,7 +70,7 @@
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
-  void clearName() => clearField(1);
+  void clearName() => $_clearField(1);
 }
 
 class HelloReply extends $pb.GeneratedMessage {
@@ -121,7 +121,7 @@
   @$pb.TagNumber(1)
   $core.bool hasMessage() => $_has(0);
   @$pb.TagNumber(1)
-  void clearMessage() => clearField(1);
+  void clearMessage() => $_clearField(1);
 }
 
 /// This is a service.
diff --git a/protoc_plugin/test/goldens/imports.pb b/protoc_plugin/test/goldens/imports.pb
index 0f8f891..288535a 100644
--- a/protoc_plugin/test/goldens/imports.pb
+++ b/protoc_plugin/test/goldens/imports.pb
@@ -55,33 +55,33 @@
   @$pb.TagNumber(1)
   M get m => $_getN(0);
   @$pb.TagNumber(1)
-  set m(M v) { setField(1, v); }
+  set m(M v) { $_setField(1, v); }
   @$pb.TagNumber(1)
   $core.bool hasM() => $_has(0);
   @$pb.TagNumber(1)
-  void clearM() => clearField(1);
+  void clearM() => $_clearField(1);
   @$pb.TagNumber(1)
   M ensureM() => $_ensure(0);
 
   @$pb.TagNumber(2)
   $1.M get m1 => $_getN(1);
   @$pb.TagNumber(2)
-  set m1($1.M v) { setField(2, v); }
+  set m1($1.M v) { $_setField(2, v); }
   @$pb.TagNumber(2)
   $core.bool hasM1() => $_has(1);
   @$pb.TagNumber(2)
-  void clearM1() => clearField(2);
+  void clearM1() => $_clearField(2);
   @$pb.TagNumber(2)
   $1.M ensureM1() => $_ensure(1);
 
   @$pb.TagNumber(3)
   $2.M get m2 => $_getN(2);
   @$pb.TagNumber(3)
-  set m2($2.M v) { setField(3, v); }
+  set m2($2.M v) { $_setField(3, v); }
   @$pb.TagNumber(3)
   $core.bool hasM2() => $_has(2);
   @$pb.TagNumber(3)
-  void clearM2() => clearField(3);
+  void clearM2() => $_clearField(3);
   @$pb.TagNumber(3)
   $2.M ensureM2() => $_ensure(2);
 }
diff --git a/protoc_plugin/test/goldens/int64.pb b/protoc_plugin/test/goldens/int64.pb
index 047e012..64040ad 100644
--- a/protoc_plugin/test/goldens/int64.pb
+++ b/protoc_plugin/test/goldens/int64.pb
@@ -55,7 +55,7 @@
   @$pb.TagNumber(1)
   $core.bool hasValue() => $_has(0);
   @$pb.TagNumber(1)
-  void clearValue() => clearField(1);
+  void clearValue() => $_clearField(1);
 }
 
 
diff --git a/protoc_plugin/test/goldens/messageGenerator b/protoc_plugin/test/goldens/messageGenerator
index b4c504d..5eab020 100644
--- a/protoc_plugin/test/goldens/messageGenerator
+++ b/protoc_plugin/test/goldens/messageGenerator
@@ -39,16 +39,16 @@
   @$pb.TagNumber(1)
   $core.bool hasNumber() => $_has(0);
   @$pb.TagNumber(1)
-  void clearNumber() => clearField(1);
+  void clearNumber() => $_clearField(1);
 
   @$pb.TagNumber(2)
   PhoneNumber_PhoneType get type => $_getN(1);
   @$pb.TagNumber(2)
-  set type(PhoneNumber_PhoneType v) { setField(2, v); }
+  set type(PhoneNumber_PhoneType v) { $_setField(2, v); }
   @$pb.TagNumber(2)
   $core.bool hasType() => $_has(1);
   @$pb.TagNumber(2)
-  void clearType() => clearField(2);
+  void clearType() => $_clearField(2);
 
   @$pb.TagNumber(3)
   $core.String get name => $_getS(2, '\$');
@@ -57,7 +57,7 @@
   @$pb.TagNumber(3)
   $core.bool hasName() => $_has(2);
   @$pb.TagNumber(3)
-  void clearName() => clearField(3);
+  void clearName() => $_clearField(3);
 
   @$core.Deprecated('This field is deprecated.')
   @$pb.TagNumber(4)
@@ -70,7 +70,7 @@
   $core.bool hasDeprecatedField() => $_has(3);
   @$core.Deprecated('This field is deprecated.')
   @$pb.TagNumber(4)
-  void clearDeprecatedField() => clearField(4);
+  void clearDeprecatedField() => $_clearField(4);
 }
 
 
diff --git a/protoc_plugin/test/goldens/messageGenerator.meta b/protoc_plugin/test/goldens/messageGenerator.meta
index 090ca15..c398f60 100644
--- a/protoc_plugin/test/goldens/messageGenerator.meta
+++ b/protoc_plugin/test/goldens/messageGenerator.meta
@@ -54,8 +54,8 @@
   path: 2
   path: 0
   sourceFile: 
-  begin: 2263
-  end: 2267
+  begin: 2265
+  end: 2269
 }
 annotation: {
   path: 4
@@ -63,8 +63,8 @@
   path: 2
   path: 0
   sourceFile: 
-  begin: 2308
-  end: 2312
+  begin: 2310
+  end: 2314
 }
 annotation: {
   path: 4
@@ -72,8 +72,8 @@
   path: 2
   path: 0
   sourceFile: 
-  begin: 2391
-  end: 2398
+  begin: 2395
+  end: 2402
 }
 annotation: {
   path: 4
@@ -81,8 +81,8 @@
   path: 2
   path: 0
   sourceFile: 
-  begin: 2441
-  end: 2450
+  begin: 2445
+  end: 2454
 }
 annotation: {
   path: 4
@@ -90,8 +90,8 @@
   path: 2
   path: 2
   sourceFile: 
-  begin: 2511
-  end: 2515
+  begin: 2517
+  end: 2521
 }
 annotation: {
   path: 4
@@ -99,8 +99,8 @@
   path: 2
   path: 2
   sourceFile: 
-  begin: 2562
-  end: 2566
+  begin: 2568
+  end: 2572
 }
 annotation: {
   path: 4
@@ -108,8 +108,8 @@
   path: 2
   path: 2
   sourceFile: 
-  begin: 2639
-  end: 2646
+  begin: 2645
+  end: 2652
 }
 annotation: {
   path: 4
@@ -117,8 +117,8 @@
   path: 2
   path: 2
   sourceFile: 
-  begin: 2689
-  end: 2698
+  begin: 2695
+  end: 2704
 }
 annotation: {
   path: 4
@@ -126,8 +126,8 @@
   path: 2
   path: 3
   sourceFile: 
-  begin: 2808
-  end: 2823
+  begin: 2816
+  end: 2831
 }
 annotation: {
   path: 4
@@ -135,8 +135,8 @@
   path: 2
   path: 3
   sourceFile: 
-  begin: 2914
-  end: 2929
+  begin: 2922
+  end: 2937
 }
 annotation: {
   path: 4
@@ -144,8 +144,8 @@
   path: 2
   path: 3
   sourceFile: 
-  begin: 3051
-  end: 3069
+  begin: 3059
+  end: 3077
 }
 annotation: {
   path: 4
@@ -153,6 +153,6 @@
   path: 2
   path: 3
   sourceFile: 
-  begin: 3161
-  end: 3181
+  begin: 3169
+  end: 3189
 }
diff --git a/protoc_plugin/test/goldens/oneMessage.pb b/protoc_plugin/test/goldens/oneMessage.pb
index 984bc61..c5212f9 100644
--- a/protoc_plugin/test/goldens/oneMessage.pb
+++ b/protoc_plugin/test/goldens/oneMessage.pb
@@ -55,7 +55,7 @@
   @$pb.TagNumber(1)
   $core.bool hasNumber() => $_has(0);
   @$pb.TagNumber(1)
-  void clearNumber() => clearField(1);
+  void clearNumber() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.int get type => $_getIZ(1);
@@ -64,7 +64,7 @@
   @$pb.TagNumber(2)
   $core.bool hasType() => $_has(1);
   @$pb.TagNumber(2)
-  void clearType() => clearField(2);
+  void clearType() => $_clearField(2);
 
   @$pb.TagNumber(3)
   $core.String get name => $_getS(2, '\$');
@@ -73,7 +73,7 @@
   @$pb.TagNumber(3)
   $core.bool hasName() => $_has(2);
   @$pb.TagNumber(3)
-  void clearName() => clearField(3);
+  void clearName() => $_clearField(3);
 }
 
 
diff --git a/protoc_plugin/test/goldens/oneMessage.pb.meta b/protoc_plugin/test/goldens/oneMessage.pb.meta
index 9e1a0e9..20dfc3c 100644
--- a/protoc_plugin/test/goldens/oneMessage.pb.meta
+++ b/protoc_plugin/test/goldens/oneMessage.pb.meta
@@ -54,8 +54,8 @@
   path: 2
   path: 1
   sourceFile: test
-  begin: 2576
-  end: 2580
+  begin: 2578
+  end: 2582
 }
 annotation: {
   path: 4
@@ -63,8 +63,8 @@
   path: 2
   path: 1
   sourceFile: test
-  begin: 2622
-  end: 2626
+  begin: 2624
+  end: 2628
 }
 annotation: {
   path: 4
@@ -72,8 +72,8 @@
   path: 2
   path: 1
   sourceFile: test
-  begin: 2701
-  end: 2708
+  begin: 2703
+  end: 2710
 }
 annotation: {
   path: 4
@@ -81,8 +81,8 @@
   path: 2
   path: 1
   sourceFile: test
-  begin: 2751
-  end: 2760
+  begin: 2753
+  end: 2762
 }
 annotation: {
   path: 4
@@ -90,8 +90,8 @@
   path: 2
   path: 2
   sourceFile: test
-  begin: 2821
-  end: 2825
+  begin: 2825
+  end: 2829
 }
 annotation: {
   path: 4
@@ -99,8 +99,8 @@
   path: 2
   path: 2
   sourceFile: test
-  begin: 2872
-  end: 2876
+  begin: 2876
+  end: 2880
 }
 annotation: {
   path: 4
@@ -108,8 +108,8 @@
   path: 2
   path: 2
   sourceFile: test
-  begin: 2949
-  end: 2956
+  begin: 2953
+  end: 2960
 }
 annotation: {
   path: 4
@@ -117,6 +117,6 @@
   path: 2
   path: 2
   sourceFile: test
-  begin: 2999
-  end: 3008
+  begin: 3003
+  end: 3012
 }
