155385fe3e723cd675001e45f42d61adde6b7f075Douglas Gregor/* Note: the RUN lines are near the end of the file, since line/column
255385fe3e723cd675001e45f42d61adde6b7f075Douglas Gregor   matter for this test. */
395ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor
495ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor@protocol MyProtocol
595ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor@property float ProtoProp;
695ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor@end
795ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor
895ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor@interface Super {
995ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor  int SuperIVar;
1095ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor}
1195ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor@end
1295ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor@interface Int : Super<MyProtocol>
1395ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor{
1495ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor  int IVar;
1595ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor}
1695ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor
1795ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor@property int prop1;
1895ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor@end
1995ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor
2095ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregorvoid test_props(Int* ptr) {
2195ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor  ptr.prop1 = 0;
2295ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor  ptr->IVar = 0;
2395ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor}
2495ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor
254b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor@interface Sub : Int
264b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor@property int myProp;
274b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor
284b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor- (int)myProp;
294b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor- (int)myOtherPropLikeThing;
304b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor- (int)myOtherNonPropThing:(int)value;
314b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor@end
324b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor
334b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregorint test_more_props(Sub *s) {
344b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor  return s.myOtherPropLikeThing;
354b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor}
364b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor
37f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor@interface Other
38f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor@property Sub *sub;
39f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor@end
40f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor
41f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregorint test_two_levels(Other *other) {
42f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor  return other.sub.myProp;
43f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor}
44f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor
4595ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor// RUN: c-index-test -code-completion-at=%s:21:7 %s | FileCheck -check-prefix=CHECK-CC1 %s
46ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC1: ObjCPropertyDecl:{ResultType int}{TypedText prop1}
47ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC1: ObjCPropertyDecl:{ResultType float}{TypedText ProtoProp}
48e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC1: Completion contexts:
49e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC1-NEXT: Objective-C property access
50e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC1-NEXT: Container Kind: ObjCInterfaceDecl
51e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC1-NEXT: Container is complete
52e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC1-NEXT: Container USR: c:objc(cs)Int
5395ac6556a5dfc504491103c37f9aa05b303d2729Douglas Gregor// RUN: c-index-test -code-completion-at=%s:22:8 %s | FileCheck -check-prefix=CHECK-CC2 %s
548ec904c151abf7ed0dc911258574a904ed97ff15Douglas Gregor// CHECK-CC2: ObjCIvarDecl:{ResultType int}{TypedText IVar} (35)
558ec904c151abf7ed0dc911258574a904ed97ff15Douglas Gregor// CHECK-CC2: ObjCIvarDecl:{ResultType int}{TypedText SuperIVar} (37)
56e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC2: Completion contexts:
57e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC2-NEXT: Arrow member access
58e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC2-NEXT: Container Kind: ObjCInterfaceDecl
59e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC2-NEXT: Container is complete
60e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC2-NEXT: Container USR: c:objc(cs)Int
614b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor// RUN: c-index-test -code-completion-at=%s:34:12 %s | FileCheck -check-prefix=CHECK-CC3 %s
624b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor// CHECK-CC3: ObjCInstanceMethodDecl:{ResultType int}{TypedText myOtherPropLikeThing} (37)
634b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor// CHECK-CC3: ObjCPropertyDecl:{ResultType int}{TypedText myProp} (35)
644b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor// CHECK-CC3: ObjCPropertyDecl:{ResultType int}{TypedText prop1} (35)
654b81cde48b8b56c219e8d665884f5f33139b5ecaDouglas Gregor// CHECK-CC3: ObjCPropertyDecl:{ResultType float}{TypedText ProtoProp} (35)
66e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC3: Completion contexts:
67e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC3-NEXT: Objective-C property access
68e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC3-NEXT: Container Kind: ObjCInterfaceDecl
69e081a61bb0dc546fd623bf259435d17c9a4ea0d5Douglas Gregor// CHECK-CC3-NEXT: Container is complete
70f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor// CHECK-CC3-NEXT: Container USR: c:objc(cs)Sub
71f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor
72f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor// RUN: c-index-test -code-completion-at=%s:42:20 %s | FileCheck -check-prefix=CHECK-CC4 %s
73f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor// CHECK-CC4: ObjCInstanceMethodDecl:{ResultType int}{TypedText myOtherPropLikeThing} (37)
74f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor// CHECK-CC4-NEXT: ObjCPropertyDecl:{ResultType int}{TypedText myProp} (35)
75f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor// CHECK-CC4-NEXT: ObjCPropertyDecl:{ResultType int}{TypedText prop1} (35)
76f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor// CHECK-CC4-NEXT: ObjCPropertyDecl:{ResultType float}{TypedText ProtoProp} (35)
77f5cd27d7eef3fd4021545dd76a1faf7152fda344Douglas Gregor
78