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