1// RUN: rm -rf %t
2// RUN: %clang_cc1 -fblocks -objcmt-migrate-readwrite-property -objcmt-migrate-readonly-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11
3// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result
4// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result
5
6#define WEBKIT_OBJC_METHOD_ANNOTATION(ANNOTATION) ANNOTATION
7#define WEAK_IMPORT_ATTRIBUTE __attribute__((objc_arc_weak_reference_unavailable))
8#define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER
9#define DEPRECATED  __attribute__((deprecated)) 
10
11typedef char BOOL;
12@class NSString;
13@protocol NSCopying @end
14
15@interface NSObject <NSCopying>
16@end
17
18@interface NSDictionary : NSObject
19@end
20
21@interface I : NSObject {
22  int ivarVal;
23}
24- (void) setWeakProp : (NSString *__weak)Val;
25- (NSString *__weak) WeakProp;
26
27- (NSString *) StrongProp;
28- (void) setStrongProp : (NSString *)Val;
29
30- (NSString *) UnavailProp  __attribute__((unavailable));
31- (void) setUnavailProp  : (NSString *)Val;
32
33- (NSString *) UnavailProp1  __attribute__((unavailable));
34- (void) setUnavailProp1  : (NSString *)Val  __attribute__((unavailable));
35
36- (NSString *) UnavailProp2;
37- (void) setUnavailProp2  : (NSString *)Val  __attribute__((unavailable));
38
39- (NSDictionary*) undoAction;
40- (void) setUndoAction: (NSDictionary*)Arg;
41@end
42
43@implementation I
44@end
45
46@class NSArray;
47
48@interface MyClass2  {
49@private
50    NSArray *_names1;
51    NSArray *_names2;
52    NSArray *_names3;
53    NSArray *_names4;
54}
55- (void)setNames1:(NSArray *)names;
56- (void)setNames4:(__strong NSArray *)names;
57- (void)setNames3:(__strong NSArray *)names;
58- (void)setNames2:(NSArray *)names;
59- (NSArray *) names2;
60- (NSArray *)names3;
61- (__strong NSArray *)names4;
62- (NSArray *) names1;
63@end
64
65// Properties that contain the name "delegate" or "dataSource",
66// or have exact name "target" have unsafe_unretained attribute.
67@interface NSInvocation 
68- (id)target;
69- (void)setTarget:(id)target;
70
71- (id) dataSource;
72
73// rdar://15509831
74- (id)delegate;
75
76- (id)xxxdelegateYYY;
77- (void)setXxxdelegateYYY:(id)delegate;
78
79- (void)setDataSource:(id)source;
80
81- (id)MYtarget;
82- (void)setMYtarget: (id)target;
83
84- (id)targetX;
85- (void)setTargetX: (id)t;
86 
87- (int)value;
88- (void)setValue: (int)val;
89
90-(BOOL) isContinuous;
91-(void) setContinuous:(BOOL)value;
92
93- (id) isAnObject;
94- (void)setAnObject : (id) object;
95
96- (BOOL) isinValid;
97- (void) setInValid : (BOOL) arg;
98
99- (void) Nothing;
100- (int) Length;
101- (id) object;
102+ (double) D;
103- (void *)JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER);
104- (BOOL)isIgnoringInteractionEvents;
105
106- (NSString *)getStringValue;
107- (BOOL)getCounterValue;
108- (void)setStringValue:(NSString *)stringValue AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER;
109- (NSDictionary *)getns_dixtionary;
110
111- (BOOL)is3bar; // watch out
112- (NSString *)get3foo; // watch out
113
114- (BOOL) getM;
115- (BOOL) getMA;
116- (BOOL) getALL;
117- (BOOL) getMANY;
118- (BOOL) getSome;
119@end
120
121
122@interface NSInvocation(CAT)
123- (id)target;
124- (void)setTarget:(id)target;
125
126- (id) dataSource;
127
128- (id)xxxdelegateYYY;
129- (void)setXxxdelegateYYY:(id)delegate;
130
131- (void)setDataSource:(id)source;
132
133- (id)MYtarget;
134- (void)setMYtarget: (id)target;
135
136- (id)targetX;
137- (void)setTargetX: (id)t;
138
139- (int)value;
140- (void)setValue: (int)val;
141
142-(BOOL) isContinuous;
143-(void) setContinuous:(BOOL)value;
144
145- (id) isAnObject;
146- (void)setAnObject : (id) object;
147
148- (BOOL) isinValid;
149- (void) setInValid : (BOOL) arg;
150
151- (void) Nothing;
152- (int) Length;
153- (id) object;
154+ (double) D;
155
156- (BOOL)is3bar; // watch out
157- (NSString *)get3foo; // watch out
158
159- (BOOL) getM;
160- (BOOL) getMA;
161- (BOOL) getALL;
162- (BOOL) getMANY;
163- (BOOL) getSome;
164@end
165
166DEPRECATED
167@interface I_DEP
168- (BOOL) isinValid;
169- (void) setInValid : (BOOL) arg;
170@end
171
172@interface AnotherOne
173- (BOOL) isinValid DEPRECATED;
174- (void) setInValid : (BOOL) arg;
175- (id)MYtarget;
176- (void)setMYtarget: (id)target DEPRECATED;
177- (BOOL) getM DEPRECATED;
178
179- (id)xxxdelegateYYY DEPRECATED;
180- (void)setXxxdelegateYYY:(id)delegate DEPRECATED;
181@end
182
183// rdar://14987909
184#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0)))
185#define NORETURN __attribute__((noreturn))
186#define ALIGNED __attribute__((aligned(16)))
187
188@interface NSURL
189// Do not infer a property.
190- (NSURL *)appStoreReceiptURL NS_AVAILABLE;
191- (void) setAppStoreReceiptURL : (NSURL *)object;
192
193- (NSURL *)appStoreReceiptURLX NS_AVAILABLE;
194- (void) setAppStoreReceiptURLX : (NSURL *)object NS_AVAILABLE;
195
196// Do not infer a property.
197- (NSURL *)appStoreReceiptURLY ;
198- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE;
199
200- (id)OkToInfer NS_AVAILABLE;
201
202// Do not infer a property.
203- (NSURL *)appStoreReceiptURLZ ;
204- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE;
205
206// Do not infer a property.
207- (id) t1 NORETURN NS_AVAILABLE;
208- (void) setT1 : (id) arg NS_AVAILABLE;
209
210- (id)method1 ALIGNED NS_AVAILABLE;
211- (void) setMethod1 : (id) object NS_AVAILABLE ALIGNED;
212
213- (NSURL *)init;  // No Change
214+ (id)alloc;      // No Change
215
216- (BOOL)is1stClass; // Not a valid property
217- (BOOL)isClass;    // This is a valid property 'class' is not a keyword in ObjC
218- (BOOL)isDouble; // Not a valid property
219
220@end
221
222// rdar://15082818
223@class NSMutableDictionary;
224
225@interface NSArray
226- (id (^)(id, NSArray *, NSMutableDictionary *)) expressionBlock;
227- (id (^)(id, NSArray *, NSMutableDictionary *)) MyBlock;
228- (void) setMyBlock : (id (^)(id, NSArray *, NSMutableDictionary *)) bl;
229- (id (*)(id, NSArray *, NSMutableDictionary *)) expressionFuncptr;
230- (id (*)(id, NSArray *, NSMutableDictionary *)) MyFuncptr;
231- (void) setMyFuncptr : (id (*)(id, NSArray *, NSMutableDictionary *)) bl;
232@end
233
234// rdar://15231241
235@interface rdar15231241
236@property (nonatomic, readonly) double Ddelegate;
237@property (nonatomic, readonly) float Fdelegate;
238@property (nonatomic, readonly) int Idelegate;
239@property (nonatomic, readonly) BOOL Bdelegate;
240@end
241