From e3b00511099838e22f59827bfb7c72e27fcc22fa Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Tue, 21 Feb 2023 11:45:16 -0800 Subject: [PATCH] [ObjC] mark mergeFromData:extensionRegistry: as deprecated. Since it really isn't safe in Swift, point folks at the new api that uses errors. PiperOrigin-RevId: 511262228 --- objectivec/GPBMessage.h | 4 +++- objectivec/GPBMessage.m | 3 +++ objectivec/Tests/GPBMessageTests.m | 6 +++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/objectivec/GPBMessage.h b/objectivec/GPBMessage.h index 690bf0390aeb..ae2dd71eecbb 100644 --- a/objectivec/GPBMessage.h +++ b/objectivec/GPBMessage.h @@ -276,7 +276,9 @@ CF_EXTERN_C_END * unsuccessful. **/ - (void)mergeFromData:(NSData *)data - extensionRegistry:(nullable id)extensionRegistry; + extensionRegistry:(nullable id)extensionRegistry + __attribute__((deprecated( + "Use -mergeFromData:extensionRegistry:error: instead, especaily if calling from Swift."))); /** * Parses the given data as this message's class, and merges those values into diff --git a/objectivec/GPBMessage.m b/objectivec/GPBMessage.m index 0793c9030d6c..c287af7c8a34 100644 --- a/objectivec/GPBMessage.m +++ b/objectivec/GPBMessage.m @@ -3261,7 +3261,10 @@ - (instancetype)initWithCoder:(NSCoder *)aDecoder { if (self) { NSData *data = [aDecoder decodeObjectOfClass:[NSData class] forKey:kGPBDataCoderKey]; if (data.length) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [self mergeFromData:data extensionRegistry:nil]; +#pragma clang diagnostic pop } } return self; diff --git a/objectivec/Tests/GPBMessageTests.m b/objectivec/Tests/GPBMessageTests.m index 6a1d48beda4b..2e595f6aa1ae 100644 --- a/objectivec/Tests/GPBMessageTests.m +++ b/objectivec/Tests/GPBMessageTests.m @@ -224,7 +224,11 @@ - (void)testMergeFromWithExtensions { result = [self mergeExtensionsDestination]; NSData *data = [[self mergeExtensionsSource] data]; XCTAssertNotNil(data); - [result mergeFromData:data extensionRegistry:[UnittestRoot extensionRegistry]]; + NSError *error = nil; + XCTAssertTrue([result mergeFromData:data + extensionRegistry:[UnittestRoot extensionRegistry] + error:&error]); + XCTAssertNil(error); resultData = [result data]; XCTAssertEqualObjects(resultData, mergeResultData); XCTAssertEqualObjects(result, [self mergeExtensionsResult]);