]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaObjC/property-category-4.m
Vendor import of clang tags/RELEASE_33/final r183502 (effectively, 3.3
[FreeBSD/FreeBSD.git] / test / SemaObjC / property-category-4.m
1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
2
3 @interface IDELogNavigator
4 {
5   id selectedObjects;
6 }
7 @end
8
9 @interface IDELogNavigator (CAT)
10   @property (readwrite, retain) id selectedObjects; // expected-note {{property declared here}}
11   @property (readwrite, retain) id d_selectedObjects; // expected-note {{property declared here}}
12 @end
13
14 @implementation IDELogNavigator 
15 @synthesize selectedObjects = _selectedObjects; // expected-error {{property declared in category 'CAT' cannot be implemented in class implementation}}
16 @dynamic d_selectedObjects; // expected-error {{property declared in category 'CAT' cannot be implemented in class implementation}}
17 @end
18
19
20 // rdar://13713098
21 // Test1
22 @interface NSArray 
23 - (int)count;
24 @end
25
26 @protocol MyCountable
27 @property  (readonly) int count;
28 @end
29
30
31 @interface NSArray(Additions) <MyCountable>
32 @end
33
34 @implementation NSArray(Additions)
35 @end
36
37 // Test2
38 @protocol NSProtocol
39 - (int)count;
40 @end
41
42 @interface NSArray1 <NSProtocol>
43 @end
44
45 @interface NSArray1(Additions) <MyCountable>
46 @end
47
48 @implementation NSArray1(Additions)
49 @end
50
51 // Test3
52 @interface Super <NSProtocol>
53 @end
54
55 @interface NSArray2 : Super @end
56
57 @interface NSArray2(Additions) <MyCountable>
58 @end
59
60 @implementation NSArray2(Additions)
61 @end
62
63 // Test3
64 @interface Super1 <NSProtocol>
65 @property  (readonly) int count;
66 @end
67
68 @protocol MyCountable1
69 @end
70
71 @interface NSArray3 : Super1 <MyCountable1>
72 @end
73
74 @implementation NSArray3
75 @end
76
77 // Test4
78 @interface I
79 @property int d1;
80 @end
81
82 @interface I(CAT)
83 @property int d1;
84 @end
85
86 @implementation I(CAT)
87 @end
88
89 // Test5 
90 @interface C @end
91
92 @interface C (CAT)
93 - (int) p;
94 @end
95
96
97 @interface C (Category)
98 @property (readonly) int p;  // no warning for this property - a getter is declared in another category
99 @property (readonly) int p1; // expected-note {{property declared here}}
100 @property (readonly) int p2;  // no warning for this property - a getter is declared in this category
101 - (int) p2;
102 @end
103
104 @implementation C (Category)  // expected-warning {{property 'p1' requires method 'p1' to be defined - use @dynamic or provide a method implementation in this category}}
105 @end
106
107 // Test6
108 @protocol MyProtocol
109 @property (readonly) float  anotherFloat; // expected-note {{property declared here}}
110 @property (readonly) float  Float; // no warning for this property - a getter is declared in this protocol
111 - (float) Float;
112 @end
113
114 @interface MyObject 
115 { float anotherFloat; }
116 @end
117
118 @interface MyObject (CAT) <MyProtocol>
119 @end
120
121 @implementation MyObject (CAT) // expected-warning {{property 'anotherFloat' requires method 'anotherFloat' to be defined - use @dynamic or provide a method implementation in this category}}
122 @end
123