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@property (nonatomic, weak) NSString *WeakProp;
25
26@property (nonatomic, strong) NSString *StrongProp;
27
28@property (nonatomic, strong) NSString *UnavailProp  __attribute__((unavailable));
29- (void) setUnavailProp  : (NSString *)Val;
30
31@property (nonatomic, strong) NSString *UnavailProp1  __attribute__((unavailable));
32
33@property (nonatomic, strong) NSString *UnavailProp2;
34- (void) setUnavailProp2  : (NSString *)Val  __attribute__((unavailable));
35
36@property (nonatomic, copy) NSDictionary *undoAction;
37@end
38
39@implementation I
40@end
41
42@class NSArray;
43
44@interface MyClass2  {
45@private
46    NSArray *_names1;
47    NSArray *_names2;
48    NSArray *_names3;
49    NSArray *_names4;
50}
51@property (nonatomic, strong) NSArray *names2;
52@property (nonatomic, strong) NSArray *names3;
53@property (nonatomic, strong) NSArray *names4;
54@property (nonatomic, strong) NSArray *names1;
55@end
56
57// Properties that contain the name "delegate" or "dataSource",
58// or have exact name "target" have unsafe_unretained attribute.
59@interface NSInvocation
60@property (nonatomic, assign) id target;
61
62@property (nonatomic, assign) id dataSource;
63
64// rdar://15509831
65@property (nonatomic, readonly, assign) id delegate;
66
67@property (nonatomic, assign) id xxxdelegateYYY;
68
69
70@property (nonatomic, strong) id MYtarget;
71
72@property (nonatomic, strong) id targetX;
73
74@property (nonatomic) int value;
75
76@property (nonatomic, getter=isContinuous) BOOL continuous;
77
78- (id) isAnObject;
79- (void)setAnObject : (id) object;
80
81@property (nonatomic, getter=isinValid, readonly) BOOL inValid;
82- (void) setInValid : (BOOL) arg;
83
84- (void) Nothing;
85@property (nonatomic, readonly) int Length;
86@property (nonatomic, readonly, strong) id object;
87+ (double) D;
88@property (nonatomic, readonly) void *JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER);
89@property (nonatomic, getter=isIgnoringInteractionEvents, readonly) BOOL ignoringInteractionEvents;
90
91@property (nonatomic, getter=getStringValue, strong) NSString *stringValue;
92@property (nonatomic, getter=getCounterValue, readonly) BOOL counterValue;
93@property (nonatomic, getter=getns_dixtionary, readonly, copy) NSDictionary *ns_dixtionary;
94
95- (BOOL)is3bar; // watch out
96- (NSString *)get3foo; // watch out
97
98@property (nonatomic, getter=getM, readonly) BOOL m;
99@property (nonatomic, getter=getMA, readonly) BOOL MA;
100@property (nonatomic, getter=getALL, readonly) BOOL ALL;
101@property (nonatomic, getter=getMANY, readonly) BOOL MANY;
102@property (nonatomic, getter=getSome, readonly) BOOL some;
103@end
104
105
106@interface NSInvocation(CAT)
107@property (nonatomic, assign) id target;
108
109@property (nonatomic, assign) id dataSource;
110
111@property (nonatomic, assign) id xxxdelegateYYY;
112
113
114@property (nonatomic, strong) id MYtarget;
115
116@property (nonatomic, strong) id targetX;
117
118@property (nonatomic) int value;
119
120@property (nonatomic, getter=isContinuous) BOOL continuous;
121
122- (id) isAnObject;
123- (void)setAnObject : (id) object;
124
125@property (nonatomic, getter=isinValid, readonly) BOOL inValid;
126- (void) setInValid : (BOOL) arg;
127
128- (void) Nothing;
129@property (nonatomic, readonly) int Length;
130@property (nonatomic, readonly, strong) id object;
131+ (double) D;
132
133- (BOOL)is3bar; // watch out
134- (NSString *)get3foo; // watch out
135
136@property (nonatomic, getter=getM, readonly) BOOL m;
137@property (nonatomic, getter=getMA, readonly) BOOL MA;
138@property (nonatomic, getter=getALL, readonly) BOOL ALL;
139@property (nonatomic, getter=getMANY, readonly) BOOL MANY;
140@property (nonatomic, getter=getSome, readonly) BOOL some;
141@end
142
143DEPRECATED
144@interface I_DEP
145- (BOOL) isinValid;
146- (void) setInValid : (BOOL) arg;
147@end
148
149@interface AnotherOne
150- (BOOL) isinValid DEPRECATED;
151- (void) setInValid : (BOOL) arg;
152- (id)MYtarget;
153- (void)setMYtarget: (id)target DEPRECATED;
154- (BOOL) getM DEPRECATED;
155
156- (id)xxxdelegateYYY DEPRECATED;
157- (void)setXxxdelegateYYY:(id)delegate DEPRECATED;
158@end
159
160// rdar://14987909
161#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0)))
162#define NORETURN __attribute__((noreturn))
163#define ALIGNED __attribute__((aligned(16)))
164
165@interface NSURL
166// Do not infer a property.
167@property (nonatomic, strong) NSURL *appStoreReceiptURL NS_AVAILABLE;
168- (void) setAppStoreReceiptURL : (NSURL *)object;
169
170@property (nonatomic, strong) NSURL *appStoreReceiptURLX NS_AVAILABLE;
171
172// Do not infer a property.
173@property (nonatomic, strong) NSURL *appStoreReceiptURLY ;
174- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE;
175
176@property (nonatomic, readonly, strong) id OkToInfer NS_AVAILABLE;
177
178// Do not infer a property.
179@property (nonatomic, strong) NSURL *appStoreReceiptURLZ ;
180- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE;
181
182// Do not infer a property.
183- (id) t1 NORETURN NS_AVAILABLE;
184- (void) setT1 : (id) arg NS_AVAILABLE;
185
186@property (nonatomic, strong) id method1 ALIGNED NS_AVAILABLE;
187
188- (NSURL *)init;  // No Change
189+ (id)alloc;      // No Change
190
191- (BOOL)is1stClass; // Not a valid property
192@property (nonatomic, getter=isClass, readonly) BOOL class;    // This is a valid property 'class' is not a keyword in ObjC
193- (BOOL)isDouble; // Not a valid property
194
195@end
196
197// rdar://15082818
198@class NSMutableDictionary;
199
200@interface NSArray
201@property (nonatomic, readonly, copy) id (^expressionBlock)(id, NSArray *, NSMutableDictionary *);
202@property (nonatomic, copy) id (^MyBlock)(id, NSArray *, NSMutableDictionary *);
203@property (nonatomic, readonly) id (*expressionFuncptr)(id, NSArray *, NSMutableDictionary *);
204@property (nonatomic) id (*MyFuncptr)(id, NSArray *, NSMutableDictionary *);
205@end
206
207// rdar://15231241
208@interface rdar15231241
209@property (nonatomic, readonly) double Ddelegate;
210@property (nonatomic, readonly) float Fdelegate;
211@property (nonatomic, readonly) int Idelegate;
212@property (nonatomic, readonly) BOOL Bdelegate;
213@end
214
215// rdar://19372798
216@protocol NSObject @end
217@protocol MyProtocol <NSObject>
218@property (nonatomic, readonly, strong) id readonlyProperty;
219@property (nonatomic, strong) id readWriteProperty;
220@end
221