1*67e74705SXin Li@protocol NSObject 2*67e74705SXin Li@end 3*67e74705SXin Li 4*67e74705SXin Li@interface NSObject 5*67e74705SXin Li@end 6*67e74705SXin Li 7*67e74705SXin Li@interface Test<T : id, U : NSObject *> : NSObject 8*67e74705SXin Li{ 9*67e74705SXin Li@public 10*67e74705SXin Li U myVar; 11*67e74705SXin Li} 12*67e74705SXin Li-(U)getit:(T)val; 13*67e74705SXin Li-(void)apply:(void(^)(T, U))block; 14*67e74705SXin Li-(void)apply2:(void(^_Nonnull)(T, U))block; 15*67e74705SXin Li 16*67e74705SXin Li@property (strong) T prop; 17*67e74705SXin Li@end 18*67e74705SXin Li 19*67e74705SXin Li@interface MyClsA : NSObject 20*67e74705SXin Li@end 21*67e74705SXin Li@interface MyClsB : NSObject 22*67e74705SXin Li@end 23*67e74705SXin Li 24*67e74705SXin Livoid test1(Test<MyClsA*, MyClsB*> *obj) { 25*67e74705SXin Li [obj ]; 26*67e74705SXin Li obj.; 27*67e74705SXin Li obj->; 28*67e74705SXin Li} 29*67e74705SXin Li 30*67e74705SXin Livoid test2(Test *obj) { 31*67e74705SXin Li [obj ]; 32*67e74705SXin Li obj.; 33*67e74705SXin Li obj->; 34*67e74705SXin Li} 35*67e74705SXin Li 36*67e74705SXin Li@implementation Test 37*67e74705SXin Li-(id)getit:(id)val {} 38*67e74705SXin Li@end 39*67e74705SXin Li 40*67e74705SXin Livoid test3() { 41*67e74705SXin Li Test<> t; 42*67e74705SXin Li NSObject<> n; 43*67e74705SXin Li} 44*67e74705SXin Li 45*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:25:8 %s | FileCheck -check-prefix=CHECK-CC0 %s 46*67e74705SXin Li// CHECK-CC0: ObjCInstanceMethodDecl:{ResultType void}{TypedText apply2:}{Placeholder ^(MyClsA *, MyClsB *)block} (35) 47*67e74705SXin Li// CHECK-CC0: ObjCInstanceMethodDecl:{ResultType void}{TypedText apply:}{Placeholder ^(MyClsA *, MyClsB *)block} (35) 48*67e74705SXin Li// CHECK-CC0: ObjCInstanceMethodDecl:{ResultType MyClsB *}{TypedText getit:}{Placeholder (MyClsA *)} (35) 49*67e74705SXin Li 50*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:26:7 %s | FileCheck -check-prefix=CHECK-CC1 %s 51*67e74705SXin Li// CHECK-CC1: ObjCPropertyDecl:{ResultType MyClsA *}{TypedText prop} (35) 52*67e74705SXin Li 53*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:27:8 %s | FileCheck -check-prefix=CHECK-CC2 %s 54*67e74705SXin Li// CHECK-CC2: ObjCIvarDecl:{ResultType MyClsB *}{TypedText myVar} (35) 55*67e74705SXin Li 56*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:31:8 %s | FileCheck -check-prefix=CHECK-CC3 %s 57*67e74705SXin Li// CHECK-CC3: ObjCInstanceMethodDecl:{ResultType void}{TypedText apply2:}{Placeholder ^(id, NSObject *)block} (35) 58*67e74705SXin Li// CHECK-CC3: ObjCInstanceMethodDecl:{ResultType void}{TypedText apply:}{Placeholder ^(id, NSObject *)block} (35) 59*67e74705SXin Li// CHECK-CC3: ObjCInstanceMethodDecl:{ResultType __kindof NSObject *}{TypedText getit:}{Placeholder (id)} (35) 60*67e74705SXin Li 61*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:32:7 %s | FileCheck -check-prefix=CHECK-CC4 %s 62*67e74705SXin Li// CHECK-CC4: ObjCPropertyDecl:{ResultType id}{TypedText prop} (35) 63*67e74705SXin Li 64*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:33:8 %s | FileCheck -check-prefix=CHECK-CC5 %s 65*67e74705SXin Li// CHECK-CC5: ObjCIvarDecl:{ResultType __kindof NSObject *}{TypedText myVar} (35) 66*67e74705SXin Li 67*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:37:2 %s | FileCheck -check-prefix=CHECK-CC6 %s 68*67e74705SXin Li// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text void}{RightParen )}{TypedText apply2}{TypedText :}{LeftParen (}{Text void (^)(id, NSObject *)}{RightParen )}{Text block} (40) 69*67e74705SXin Li// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text void}{RightParen )}{TypedText apply}{TypedText :}{LeftParen (}{Text void (^)(id, NSObject *)}{RightParen )}{Text block} (40) 70*67e74705SXin Li// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text NSObject *}{RightParen )}{TypedText getit}{TypedText :}{LeftParen (}{Text id}{RightParen )}{Text val} (40) 71*67e74705SXin Li// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen )}{TypedText prop} (40) 72*67e74705SXin Li 73*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:41:8 %s | FileCheck -check-prefix=CHECK-CC7 %s 74*67e74705SXin Li// CHECK-CC7: ObjCInterfaceDecl:{TypedText MyClsA} 75*67e74705SXin Li// RUN: c-index-test -code-completion-at=%s:42:12 %s > %t.out 76*67e74705SXin Li// RUN: FileCheck -input-file=%t.out -check-prefix=CHECK-CC8 %s 77*67e74705SXin Li// RUN: FileCheck -input-file=%t.out -check-prefix=CHECK-CC9 %s 78*67e74705SXin Li// CHECK-CC8: ObjCProtocolDecl:{TypedText NSObject} 79*67e74705SXin Li// CHECK-CC9-NOT: ObjCInterfaceDecl:{TypedText MyClsA} 80