[ObjC] Internal helper for getting the unknown field data from a message

PiperOrigin-RevId: 655202619
diff --git a/objectivec/GPBMessage.m b/objectivec/GPBMessage.m
index 1761eab..b036769 100644
--- a/objectivec/GPBMessage.m
+++ b/objectivec/GPBMessage.m
@@ -3684,4 +3684,23 @@
   return expected;
 }
 
+NSData *GPBMessageUnknownFieldsData(GPBMessage *self) {
+  NSData *result = nil;
+  GPBUnknownFieldSet *unknownFields = self->unknownFields_;
+  if (unknownFields) {
+    if (self.descriptor.isWireFormat) {
+      NSMutableData *mutableData =
+          [NSMutableData dataWithLength:unknownFields.serializedSizeAsMessageSet];
+      GPBCodedOutputStream *output = [[GPBCodedOutputStream alloc] initWithData:mutableData];
+      [unknownFields writeAsMessageSetTo:output];
+      [output flush];
+      [output release];
+      result = mutableData;
+    } else {
+      result = [unknownFields data];
+    }
+  }
+  return result;
+}
+
 #pragma clang diagnostic pop
diff --git a/objectivec/GPBMessage_PackagePrivate.h b/objectivec/GPBMessage_PackagePrivate.h
index 65a1a7c..58649c4 100644
--- a/objectivec/GPBMessage_PackagePrivate.h
+++ b/objectivec/GPBMessage_PackagePrivate.h
@@ -81,4 +81,7 @@
 // autocreated reference to this message.
 void GPBClearMessageAutocreator(GPBMessage *self);
 
+// The data (or null) from the unknown fields of a message;
+NSData *GPBMessageUnknownFieldsData(GPBMessage *self);
+
 CF_EXTERN_C_END
diff --git a/objectivec/GPBUnknownFields.m b/objectivec/GPBUnknownFields.m
index f3073ad..836e249 100644
--- a/objectivec/GPBUnknownFields.m
+++ b/objectivec/GPBUnknownFields.m
@@ -14,6 +14,7 @@
 #import "GPBCodedOutputStream_PackagePrivate.h"
 #import "GPBDescriptor.h"
 #import "GPBMessage.h"
+#import "GPBMessage_PackagePrivate.h"
 #import "GPBUnknownField.h"
 #import "GPBUnknownFieldSet_PackagePrivate.h"
 #import "GPBUnknownField_PackagePrivate.h"
@@ -196,22 +197,8 @@
   self = [super init];
   if (self) {
     fields_ = [[NSMutableArray alloc] init];
-    // TODO: b/349146447 - Move off the legacy class and directly to the data once Message is
-    // updated.
-    GPBUnknownFieldSet *legacyUnknownFields = [message unknownFields];
-    if (legacyUnknownFields) {
-      NSData *data;
-      if (message.descriptor.isWireFormat) {
-        NSMutableData *mutableData =
-            [NSMutableData dataWithLength:legacyUnknownFields.serializedSizeAsMessageSet];
-        GPBCodedOutputStream *output = [[GPBCodedOutputStream alloc] initWithData:mutableData];
-        [legacyUnknownFields writeAsMessageSetTo:output];
-        [output flush];
-        [output release];
-        data = mutableData;
-      } else {
-        data = [legacyUnknownFields data];
-      }
+    NSData *data = GPBMessageUnknownFieldsData(message);
+    if (data) {
       GPBCodedInputStream *input = [[GPBCodedInputStream alloc] initWithData:data];
       // Parse until the end of the data (tag will be zero).
       if (!MergeFromInputStream(self, input, 0)) {