1// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s 2 3@interface IDELogNavigator 4{ 5 id selectedObjects; 6} 7@end 8 9@interface IDELogNavigator (CAT) 10 @property (readwrite, retain) id selectedObjects; // expected-note {{property declared here}} 11 @property (readwrite, retain) id d_selectedObjects; // expected-note {{property declared here}} 12@end 13 14@implementation IDELogNavigator 15@synthesize selectedObjects = _selectedObjects; // expected-error {{property declared in category 'CAT' cannot be implemented in class implementation}} 16@dynamic d_selectedObjects; // expected-error {{property declared in category 'CAT' cannot be implemented in class implementation}} 17@end 18 19 20// rdar://13713098 21// Test1 22@interface NSArray 23- (int)count; 24@end 25 26@protocol MyCountable 27@property (readonly) int count; 28@end 29 30 31@interface NSArray(Additions) <MyCountable> 32@end 33 34@implementation NSArray(Additions) 35@end 36 37// Test2 38@protocol NSProtocol 39- (int)count; 40@end 41 42@interface NSArray1 <NSProtocol> 43@end 44 45@interface NSArray1(Additions) <MyCountable> 46@end 47 48@implementation NSArray1(Additions) 49@end 50 51// Test3 52@interface Super <NSProtocol> 53@end 54 55@interface NSArray2 : Super @end 56 57@interface NSArray2(Additions) <MyCountable> 58@end 59 60@implementation NSArray2(Additions) 61@end 62 63// Test3 64@interface Super1 <NSProtocol> 65@property (readonly) int count; 66@end 67 68@protocol MyCountable1 69@end 70 71@interface NSArray3 : Super1 <MyCountable1> 72@end 73 74@implementation NSArray3 75@end 76 77// Test4 78@interface I 79@property int d1; 80@end 81 82@interface I(CAT) 83@property int d1; 84@end 85 86@implementation I(CAT) 87@end 88 89// Test5 90@interface C @end 91 92@interface C (CAT) 93- (int) p; 94@end 95 96 97@interface C (Category) 98@property (readonly) int p; // no warning for this property - a getter is declared in another category 99@property (readonly) int p1; // expected-note {{property declared here}} 100@property (readonly) int p2; // no warning for this property - a getter is declared in this category 101- (int) p2; 102@end 103 104@implementation C (Category) // expected-warning {{property 'p1' requires method 'p1' to be defined - use @dynamic or provide a method implementation in this category}} 105@end 106 107// Test6 108@protocol MyProtocol 109@property (readonly) float anotherFloat; // expected-note {{property declared here}} 110@property (readonly) float Float; // no warning for this property - a getter is declared in this protocol 111- (float) Float; 112@end 113 114@interface MyObject 115{ float anotherFloat; } 116@end 117 118@interface MyObject (CAT) <MyProtocol> 119@end 120 121@implementation MyObject (CAT) // expected-warning {{property 'anotherFloat' requires method 'anotherFloat' to be defined - use @dynamic or provide a method implementation in this category}} 122@end 123 124