Home | History | Annotate | Download | only in SemaObjC
      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 
    124