1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
|
// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
@interface NSString @end
@interface NSObject @end
@interface SynthItAll
@property int howMany;
@property (retain) NSString* what;
@end
@implementation SynthItAll
#if !__has_feature(objc_default_synthesize_properties)
@synthesize howMany, what;
#endif
@end
@interface SynthSetter : NSObject
@property (nonatomic) int howMany; // REM: nonatomic to avoid warnings about only implementing one of the pair
@property (nonatomic, retain) NSString* what;
@end
@implementation SynthSetter
#if !__has_feature(objc_default_synthesize_properties)
@synthesize howMany, what;
#endif
- (int) howMany {
return self.howMany;
}
// - (void) setHowMany: (int) value
- (NSString*) what {
return self.what;
}
// - (void) setWhat: (NSString*) value
@end
@interface SynthGetter : NSObject
@property (nonatomic) int howMany; // REM: nonatomic to avoid warnings about only implementing one of the pair
@property (nonatomic, retain) NSString* what;
@end
@implementation SynthGetter
#if !__has_feature(objc_default_synthesize_properties)
@synthesize howMany, what;
#endif
// - (int) howMany
- (void) setHowMany: (int) value {
self.howMany = value;
}
// - (NSString*) what
- (void) setWhat: (NSString*) value {
if (self.what != value) {
}
}
@end
@interface SynthNone : NSObject
@property int howMany;
@property (retain) NSString* what;
@end
@implementation SynthNone
#if !__has_feature(objc_default_synthesize_properties)
@synthesize howMany, what; // REM: Redundant anyway
#endif
- (int) howMany {
return self.howMany;
}
- (void) setHowMany: (int) value {
self.howMany = value;
}
- (NSString*) what {
return self.what;
}
- (void) setWhat: (NSString*) value {
if (self.what != value) {
}
}
@end
@protocol TopProtocol
@property (readonly) id myString;
@end
@interface TopClass <TopProtocol>
{
id myString;
}
@end
@interface SubClass : TopClass <TopProtocol>
@end
@implementation SubClass @end
// rdar://7920807
@interface C @end
@interface C (Category)
@property int p; // expected-note 2 {{property declared here}}
@end
@implementation C (Category) // expected-warning {{property 'p' requires method 'p' to be defined}} \
// expected-warning {{property 'p' requires method 'setP:' to be defined}}
@end
// Don't complain if a property is already @synthesized by usr.
@interface D
{
}
@property int PROP;
@end
@implementation D
- (int) Meth { return self.PROP; }
#if __has_feature(objc_default_synthesize_properties)
@synthesize PROP=IVAR;
#endif
@end
// rdar://10567333
@protocol MyProtocol
@property (nonatomic, strong) NSString *requiredString; // expected-note {{property declared here}}
@optional
@property (nonatomic, strong) NSString *optionalString;
@end
@interface MyClass <MyProtocol>
@end
@implementation MyClass // expected-warning {{auto property synthesis will not synthesize property 'requiredString' declared in protocol 'MyProtocol'}}
@end // expected-note {{add a '@synthesize' directive}}
// rdar://18152478
@protocol NSObject @end
@protocol TMSourceManagerDelegate<NSObject>
@end
@protocol TMSourceManager <NSObject>
@property (nonatomic, assign) id <TMSourceManagerDelegate> delegate;
@end
@interface TMSourceManager
@property (nonatomic, assign) id <TMSourceManagerDelegate> delegate;
@end
@protocol TMTimeZoneManager <TMSourceManager>
@end
@interface TimeZoneManager : TMSourceManager <TMTimeZoneManager>
@end
@implementation TimeZoneManager
@end
// rdar://18179833
@protocol BaseProt
@property (assign) id prot;
@end
@interface Base<BaseProt>
@end
@interface I : Base<BaseProt>
@end
@implementation I
@end
|