aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objective-c
diff options
context:
space:
mode:
authorGravatar Muxi Yan <mxyan@google.com>2018-12-07 16:01:23 -0800
committerGravatar Muxi Yan <mxyan@google.com>2018-12-07 16:01:23 -0800
commitdf21aab3a6af360cff29a5164f9728ba646d35ab (patch)
tree31b4ad23e2fbcf7964ea4036cc87e440d7990492 /src/objective-c
parent92db5fc72488f9d62b81ee311a79832df787f3ef (diff)
nullability annotation
Diffstat (limited to 'src/objective-c')
-rw-r--r--src/objective-c/GRPCClient/GRPCCall.m2
-rw-r--r--src/objective-c/ProtoRPC/ProtoRPC.h18
-rw-r--r--src/objective-c/ProtoRPC/ProtoRPC.m3
-rw-r--r--src/objective-c/ProtoRPC/ProtoService.h34
-rw-r--r--src/objective-c/ProtoRPC/ProtoService.m7
-rw-r--r--src/objective-c/tests/GRPCClientTests.m3
6 files changed, 38 insertions, 29 deletions
diff --git a/src/objective-c/GRPCClient/GRPCCall.m b/src/objective-c/GRPCClient/GRPCCall.m
index 18f79311a6..cfd0de1a8a 100644
--- a/src/objective-c/GRPCClient/GRPCCall.m
+++ b/src/objective-c/GRPCClient/GRPCCall.m
@@ -485,7 +485,7 @@ const char *kCFStreamVarName = "grpc_cfstream";
requestsWriter:(GRXWriter *)requestWriter
callOptions:(GRPCCallOptions *)callOptions {
// Purposely using pointer rather than length ([host length] == 0) for backwards compatibility.
- NSAssert(host != nil && path != nil, @"Neither host nor path can be nil.");
+ NSAssert(host.length != 0 && path.length != 0, @"Neither host nor path can be nil.");
NSAssert(safety <= GRPCCallSafetyCacheableRequest, @"Invalid call safety value.");
NSAssert(requestWriter.state == GRXWriterStateNotStarted,
@"The requests writer can't be already started.");
diff --git a/src/objective-c/ProtoRPC/ProtoRPC.h b/src/objective-c/ProtoRPC/ProtoRPC.h
index 2e0400a323..e6ba1f66ca 100644
--- a/src/objective-c/ProtoRPC/ProtoRPC.h
+++ b/src/objective-c/ProtoRPC/ProtoRPC.h
@@ -70,11 +70,11 @@ NS_ASSUME_NONNULL_BEGIN
* Users should not use this initializer directly. Call objects will be created, initialized, and
* returned to users by methods of the generated service.
*/
-- (instancetype)initWithRequestOptions:(GRPCRequestOptions *)requestOptions
- message:(GPBMessage *)message
- responseHandler:(id<GRPCProtoResponseHandler>)handler
- callOptions:(nullable GRPCCallOptions *)callOptions
- responseClass:(Class)responseClass NS_DESIGNATED_INITIALIZER;
+- (nullable instancetype)initWithRequestOptions:(GRPCRequestOptions *)requestOptions
+ message:(GPBMessage *)message
+ responseHandler:(id<GRPCProtoResponseHandler>)handler
+ callOptions:(nullable GRPCCallOptions *)callOptions
+ responseClass:(Class)responseClass NS_DESIGNATED_INITIALIZER;
/**
* Start the call. This function must only be called once for each instance.
@@ -101,10 +101,10 @@ NS_ASSUME_NONNULL_BEGIN
* Users should not use this initializer directly. Call objects will be created, initialized, and
* returned to users by methods of the generated service.
*/
-- (instancetype)initWithRequestOptions:(GRPCRequestOptions *)requestOptions
- responseHandler:(id<GRPCProtoResponseHandler>)handler
- callOptions:(nullable GRPCCallOptions *)callOptions
- responseClass:(Class)responseClass NS_DESIGNATED_INITIALIZER;
+- (nullable instancetype)initWithRequestOptions:(GRPCRequestOptions *)requestOptions
+ responseHandler:(id<GRPCProtoResponseHandler>)handler
+ callOptions:(nullable GRPCCallOptions *)callOptions
+ responseClass:(Class)responseClass NS_DESIGNATED_INITIALIZER;
/**
* Start the call. This function must only be called once for each instance.
diff --git a/src/objective-c/ProtoRPC/ProtoRPC.m b/src/objective-c/ProtoRPC/ProtoRPC.m
index 92d7fce33c..15b0f681ce 100644
--- a/src/objective-c/ProtoRPC/ProtoRPC.m
+++ b/src/objective-c/ProtoRPC/ProtoRPC.m
@@ -57,6 +57,9 @@ static NSError *ErrorForBadProto(id proto, Class expectedClass, NSError *parsing
responseClass:(Class)responseClass {
NSAssert(message != nil, @"message cannot be empty.");
NSAssert(responseClass != nil, @"responseClass cannot be empty.");
+ if (message == nil || responseClass == nil) {
+ return nil;
+ }
if ((self = [super init])) {
_call = [[GRPCStreamingProtoCall alloc] initWithRequestOptions:requestOptions
responseHandler:handler
diff --git a/src/objective-c/ProtoRPC/ProtoService.h b/src/objective-c/ProtoRPC/ProtoService.h
index 2105de78a3..70423ee9de 100644
--- a/src/objective-c/ProtoRPC/ProtoService.h
+++ b/src/objective-c/ProtoRPC/ProtoService.h
@@ -27,33 +27,35 @@
@class GRPCStreamingProtoCall;
@protocol GRPCProtoResponseCallbacks;
+NS_ASSUME_NONNULL_BEGIN
+
__attribute__((deprecated("Please use GRPCProtoService."))) @interface ProtoService
: NSObject
-
- (instancetype)initWithHost : (NSString *)host packageName
+ (nullable instancetype)initWithHost : (NSString *)host packageName
: (NSString *)packageName serviceName : (NSString *)serviceName callOptions
- : (GRPCCallOptions *)callOptions NS_DESIGNATED_INITIALIZER;
+ : (nullable GRPCCallOptions *)callOptions NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithHost:(NSString *)host
packageName:(NSString *)packageName
serviceName:(NSString *)serviceName;
-- (GRPCProtoCall *)RPCToMethod:(NSString *)method
- requestsWriter:(GRXWriter *)requestsWriter
- responseClass:(Class)responseClass
- responsesWriteable:(id<GRXWriteable>)responsesWriteable;
+- (nullable GRPCProtoCall *)RPCToMethod:(NSString *)method
+ requestsWriter:(GRXWriter *)requestsWriter
+ responseClass:(Class)responseClass
+ responsesWriteable:(id<GRXWriteable>)responsesWriteable;
-- (GRPCUnaryProtoCall *)RPCToMethod:(NSString *)method
- message:(id)message
- responseHandler:(id<GRPCProtoResponseCallbacks>)handler
- callOptions:(GRPCCallOptions *)callOptions
- responseClass:(Class)responseClass;
+- (nullable GRPCUnaryProtoCall *)RPCToMethod:(NSString *)method
+ message:(id)message
+ responseHandler:(id<GRPCProtoResponseCallbacks>)handler
+ callOptions:(nullable GRPCCallOptions *)callOptions
+ responseClass:(Class)responseClass;
-- (GRPCStreamingProtoCall *)RPCToMethod:(NSString *)method
- responseHandler:(id<GRPCProtoResponseCallbacks>)handler
- callOptions:(GRPCCallOptions *)callOptions
- responseClass:(Class)responseClass;
+- (nullable GRPCStreamingProtoCall *)RPCToMethod:(NSString *)method
+ responseHandler:(id<GRPCProtoResponseCallbacks>)handler
+ callOptions:(nullable GRPCCallOptions *)callOptions
+ responseClass:(Class)responseClass;
@end
@@ -67,3 +69,5 @@ __attribute__((deprecated("Please use GRPCProtoService."))) @interface ProtoServ
#pragma clang diagnostic pop
@end
+
+ NS_ASSUME_NONNULL_END
diff --git a/src/objective-c/ProtoRPC/ProtoService.m b/src/objective-c/ProtoRPC/ProtoService.m
index 6df502fb0c..3d998bfaeb 100644
--- a/src/objective-c/ProtoRPC/ProtoService.m
+++ b/src/objective-c/ProtoRPC/ProtoService.m
@@ -44,9 +44,10 @@
packageName:(NSString *)packageName
serviceName:(NSString *)serviceName
callOptions:(GRPCCallOptions *)callOptions {
- if (!host || !serviceName) {
- [NSException raise:NSInvalidArgumentException
- format:@"Neither host nor serviceName can be nil."];
+ NSAssert(host.length != 0 && packageName.length != 0 && serviceName.length != 0,
+ @"Invalid parameter.");
+ if (host.length == 0 || packageName.length == 0 || serviceName.length == 0) {
+ return nil;
}
if ((self = [super init])) {
_host = [host copy];
diff --git a/src/objective-c/tests/GRPCClientTests.m b/src/objective-c/tests/GRPCClientTests.m
index 2cfdd1a003..b16720557f 100644
--- a/src/objective-c/tests/GRPCClientTests.m
+++ b/src/objective-c/tests/GRPCClientTests.m
@@ -362,9 +362,10 @@ static GRPCProtoMethod *kFullDuplexCallMethod;
// TODO(makarandd): Move to a different file that contains only unit tests
- (void)testExceptions {
+ GRXWriter *writer = [GRXWriter writerWithValue:[NSData data]];
// Try to set parameters to nil for GRPCCall. This should cause an exception
@try {
- (void)[[GRPCCall alloc] initWithHost:nil path:nil requestsWriter:nil];
+ (void)[[GRPCCall alloc] initWithHost:@"" path:@"" requestsWriter:writer];
XCTFail(@"Did not receive an exception when parameters are nil");
} @catch (NSException *theException) {
NSLog(@"Received exception as expected: %@", theException.name);