Copy oneof state when doing copyWith() (#262)
diff --git a/protobuf/lib/src/protobuf/field_set.dart b/protobuf/lib/src/protobuf/field_set.dart
index 1b76048..97071c6 100644
--- a/protobuf/lib/src/protobuf/field_set.dart
+++ b/protobuf/lib/src/protobuf/field_set.dart
@@ -797,5 +797,7 @@
if (original._hasUnknownFields) {
_ensureUnknownFields()._fields?.addAll(original._unknownFields._fields);
}
+
+ _oneofCases?.addAll(original._oneofCases);
}
}
diff --git a/protoc_plugin/CHANGELOG.md b/protoc_plugin/CHANGELOG.md
index d4f4014..843e395 100644
--- a/protoc_plugin/CHANGELOG.md
+++ b/protoc_plugin/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 17.0.3
+
+* Fix: Copy oneof state when doing `copyWith()`.
+
## 17.0.2
* Fix: Avoiding argument_type_not_assignable and return_of_invalid_type lint warnings.
diff --git a/protoc_plugin/pubspec.yaml b/protoc_plugin/pubspec.yaml
index 44d3c58..8656ed5 100644
--- a/protoc_plugin/pubspec.yaml
+++ b/protoc_plugin/pubspec.yaml
@@ -1,5 +1,5 @@
name: protoc_plugin
-version: 17.0.2
+version: 17.0.3
author: Dart Team <misc@dartlang.org>
description: Protoc compiler plugin to generate Dart code
homepage: https://github.com/dart-lang/protobuf
diff --git a/protoc_plugin/test/oneof_test.dart b/protoc_plugin/test/oneof_test.dart
index 42a3041..d59a1cb 100644
--- a/protoc_plugin/test/oneof_test.dart
+++ b/protoc_plugin/test/oneof_test.dart
@@ -160,6 +160,17 @@
expect(foo.hasGreen(), true);
expect(foo.green, 'g');
});
+
+ test('copyWith preserves oneof state', () {
+ Foo foo = Foo();
+ expectOneofNotSet(foo);
+ Foo copy1 = foo.copyWith((_) {});
+ expectOneofNotSet(copy1);
+ foo..first = 'oneof';
+ expectFirstSet(foo);
+ Foo copy2 = foo.copyWith((_) {});
+ expectFirstSet(copy2);
+ });
}
void expectSecondSet(Foo foo) {