1// RUN: rm -rf %t
2// RUN: %clang_cc1 -fblocks -objcmt-migrate-readwrite-property -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
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 (weak) NSString *WeakProp;
25
26@property (strong) NSString *StrongProp;
27
28@property (strong) NSString *UnavailProp  __attribute__((unavailable));
29- (void) setUnavailProp  : (NSString *)Val;
30
31@property (strong) NSString *UnavailProp1  __attribute__((unavailable));
32
33@property (strong) NSString *UnavailProp2;
34- (void) setUnavailProp2  : (NSString *)Val  __attribute__((unavailable));
35
36@property (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 (strong) NSArray *names2;
52@property (strong) NSArray *names3;
53@property (strong) NSArray *names4;
54@property (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 (assign) id target;
61
62@property (assign) id dataSource;
63
64@property (assign) id xxxdelegateYYY;
65
66
67@property (strong) id MYtarget;
68
69@property (strong) id targetX;
70
71@property  int value;
72
73@property (getter=isContinuous) BOOL continuous;
74
75- (id) isAnObject;
76- (void)setAnObject : (id) object;
77
78@property (getter=isinValid, readonly) BOOL inValid;
79- (void) setInValid : (BOOL) arg;
80
81- (void) Nothing;
82@property (readonly) int Length;
83@property (readonly, strong) id object;
84+ (double) D;
85@property (readonly) void *JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER);
86@property (getter=isIgnoringInteractionEvents, readonly) BOOL ignoringInteractionEvents;
87
88@property (getter=getStringValue, strong) NSString *stringValue;
89@property (getter=getCounterValue, readonly) BOOL counterValue;
90@property (getter=getns_dixtionary, readonly, copy) NSDictionary *ns_dixtionary;
91
92- (BOOL)is3bar; // watch out
93- (NSString *)get3foo; // watch out
94
95@property (getter=getM, readonly) BOOL m;
96@property (getter=getMA, readonly) BOOL MA;
97@property (getter=getALL, readonly) BOOL ALL;
98@property (getter=getMANY, readonly) BOOL MANY;
99@property (getter=getSome, readonly) BOOL some;
100@end
101
102
103@interface NSInvocation(CAT)
104@property (assign) id target;
105
106@property (assign) id dataSource;
107
108@property (assign) id xxxdelegateYYY;
109
110
111@property (strong) id MYtarget;
112
113@property (strong) id targetX;
114
115@property  int value;
116
117@property (getter=isContinuous) BOOL continuous;
118
119- (id) isAnObject;
120- (void)setAnObject : (id) object;
121
122@property (getter=isinValid, readonly) BOOL inValid;
123- (void) setInValid : (BOOL) arg;
124
125- (void) Nothing;
126@property (readonly) int Length;
127@property (readonly, strong) id object;
128+ (double) D;
129
130- (BOOL)is3bar; // watch out
131- (NSString *)get3foo; // watch out
132
133@property (getter=getM, readonly) BOOL m;
134@property (getter=getMA, readonly) BOOL MA;
135@property (getter=getALL, readonly) BOOL ALL;
136@property (getter=getMANY, readonly) BOOL MANY;
137@property (getter=getSome, readonly) BOOL some;
138@end
139
140DEPRECATED
141@interface I_DEP
142- (BOOL) isinValid;
143- (void) setInValid : (BOOL) arg;
144@end
145
146@interface AnotherOne
147- (BOOL) isinValid DEPRECATED;
148- (void) setInValid : (BOOL) arg;
149- (id)MYtarget;
150- (void)setMYtarget: (id)target DEPRECATED;
151- (BOOL) getM DEPRECATED;
152
153- (id)xxxdelegateYYY DEPRECATED;
154- (void)setXxxdelegateYYY:(id)delegate DEPRECATED;
155@end
156
157// rdar://14987909
158#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0)))
159#define NORETURN __attribute__((noreturn))
160#define ALIGNED __attribute__((aligned(16)))
161
162@interface NSURL
163// Do not infer a property.
164@property (strong) NSURL *appStoreReceiptURL NS_AVAILABLE;
165- (void) setAppStoreReceiptURL : (NSURL *)object;
166
167@property (strong) NSURL *appStoreReceiptURLX NS_AVAILABLE;
168
169// Do not infer a property.
170@property (strong) NSURL *appStoreReceiptURLY ;
171- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE;
172
173@property (readonly, strong) id OkToInfer NS_AVAILABLE;
174
175// Do not infer a property.
176@property (strong) NSURL *appStoreReceiptURLZ ;
177- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE;
178
179// Do not infer a property.
180- (id) t1 NORETURN NS_AVAILABLE;
181- (void) setT1 : (id) arg NS_AVAILABLE;
182
183@property (strong) id method1 ALIGNED NS_AVAILABLE;
184
185- (NSURL *)init;  // No Change
186+ (id)alloc;      // No Change
187
188- (BOOL)is1stClass; // Not a valid property
189@property (getter=isClass, readonly) BOOL class;    // This is a valid property 'class' is not a keyword in ObjC
190- (BOOL)isDouble; // Not a valid property
191
192@end
193
194// rdar://15082818
195@class NSMutableDictionary;
196
197@interface NSArray
198@property (readonly, copy) id (^expressionBlock)(id, NSArray *, NSMutableDictionary *);
199@property (copy) id (^MyBlock)(id, NSArray *, NSMutableDictionary *);
200@property (readonly) id (*expressionFuncptr)(id, NSArray *, NSMutableDictionary *);
201@property  id (*MyFuncptr)(id, NSArray *, NSMutableDictionary *);
202@end
203