Files
swift-mirror/test/Inputs/clang-importer-sdk/usr/include/objc/objc.h
Jordan Rose 3e846134e1 [ClangImporter] Don't mirror a protocol's methods if they're in the superclass.
Right now we have a hack to mirror ObjC protocol methods into an imported
ObjC class, because Swift's lookup only looks into superclasses, not into
protocols (by default, anyway). This already isn't great because it's wrong
for @optional, but it was particularly bad if /two/ superclasses conformed
to the same protocol (directly or indirectly). Because the mirrored methods
weren't marked as overrides, the type checker would consider them both as
possibilities, leading to strange errors like this:

  <REPL Input>:1:1: error: ambiguous use of 'description'
  w.description()
  ^
  AppKit.NSWindow:268:8: note: found this candidate
    func description() -> String
         ^
  ObjectiveC.NSObject:72:8: note: found this candidate
    func description() -> String
         ^

Now, we check to see if a superclass conforms to a protocol already before
mirroring its methods into the current class or category.

<rdar://problem/16102321> and possibly also <rdar://problem/16038085>

Swift SVN r14189
2014-02-21 00:35:49 +00:00

128 lines
2.5 KiB
Objective-C

typedef unsigned long NSUInteger;
typedef long NSInteger;
@protocol NSObject
- description;
@end
@interface NSObject <NSObject>
+ alloc;
- init;
+ new;
- performSelector:(SEL)selector withObject:(id)obj;
- (Class)myClass;
+ description;
@end
@interface A : NSObject
- (int)method:(int)arg withDouble:(double)d;
+ (int)classMethod;
+ (int)classMethod:(int)arg;
- (int)counter;
@property int counter;
- (void)setCounter:(int)value;
- (int)informalProp;
- (int)informalMadeFormal;
- init;
@property int overriddenProp;
@end
@protocol BProto
- (int)method:(int)arg withFloat:(float)f;
- (int)otherMethod:(int)arg withFloat:(float)f;
@end
@protocol Cat1Proto
- cat1Method;
@end
@interface B : A <BProto>
- (int)method:(int)arg withFloat:(float)f;
+ (int)classMethod:(int)arg withInt:(int)i;
- (id<BProto>)getAsProto;
- (id<BProto, Cat1Proto>)getAsProtoWithCat;
- performAdd:(int)x withValue:(int)y withValue:(int)z withValue2:(int)w;
@property (readonly) int readCounter;
@property int informalMadeFormal;
@property int overriddenProp;
- initWithInt:(int)i;
- initWithInt:(int)i andDouble:(double)d;
- initWithDouble:(double)d1 :(double)d2;
- initBBB:(B*)b;
- initForWorldDomination;
- notAnInit __attribute__((objc_method_family(init), ns_returns_retained));
- (id)_initFoo;
- (void)anotherMethodOnB;
+ (void)instanceTakesObjectClassTakesFloat:(float)x;
- (void)instanceTakesObjectClassTakesFloat:(id)x;
@end
@interface A(Cat1) <Cat1Proto>
- method:(int)i onCat1:(double)d;
- cat1Method;
@end
@interface A()
- method:(int)i onExtA:(double)d;
@end
@interface B()
- method:(int)i onExtB:(double)d;
+ newWithA:(A*)a;
@end
@interface A(Subscripting)
- objectAtIndexedSubscript:(NSInteger)idx;
- (void)setObject:(id)object atIndexedSubscript:(NSInteger)idx;
- objectForKeyedSubscript:(id)key;
@end
@interface B(Subscripting)
- (void)setObject:(id)object forKeyedSubscript:(id)key;
@end
@protocol P2
- (void)p2Method;
- (id)initViaP2:(double)x second:(double)y;
@end
@interface B(P2) <P2>
@end
@interface NSDate : NSObject
- (signed char)isEqualToDate:(NSDate *)anotherDate;
@end
NSDate *swift_createDate(void);
@interface NSProxy
+ alloc;
@end
@interface AProxy : NSProxy
- initWithInt:(int)i;
@end
typedef signed char BOOL;
@interface A(BoolStuff)
- setEnabled:(BOOL)enabled;
@end
typedef struct objc_selector *SEL;
SEL sel_registerName(const char *str);
@interface AlmostSubscriptable
- (A*) objectForKeyedSubscript:(id)key;
- (void)setObject:(id)object forKeyedSubscript:(id)key;
@end