mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
ObjC classes which have only factory and convenience initializers cannot allow their convenience inits to be inherited. To provide these classes with a reliable opt-out, tweak support for @_hasMissingDesignatedInitializers so that it affects ObjC classes even if they’re in the same module as one another. Fixes rdar://48511013.
270 lines
6.8 KiB
Objective-C
270 lines
6.8 KiB
Objective-C
@import Foundation;
|
|
|
|
__attribute__((objc_root_class))
|
|
@interface Base
|
|
- (instancetype)returnMyself;
|
|
@end
|
|
|
|
|
|
@interface PropertyAndMethodCollisionBase
|
|
- (void)object:(id)obj doSomething:(SEL)selector;
|
|
+ (void)classRef:(id)obj doSomething:(SEL)selector;
|
|
@end
|
|
|
|
@interface PropertyAndMethodCollision : PropertyAndMethodCollisionBase
|
|
@property id object;
|
|
@property (class) id classRef;
|
|
@end
|
|
|
|
@interface PropertyAndMethodReverseCollisionBase
|
|
@property id object;
|
|
@property (class) id classRef;
|
|
@end
|
|
|
|
@interface PropertyAndMethodReverseCollision : PropertyAndMethodReverseCollisionBase
|
|
- (void)object:(id)obj doSomething:(SEL)selector;
|
|
+ (void)classRef:(id)obj doSomething:(SEL)selector;
|
|
@end
|
|
|
|
@interface PropertyAndMethodCollisionInOneClass
|
|
- (void)object;
|
|
+ (void)classRef;
|
|
@property (getter=getObject) id object;
|
|
@property (class,getter=getClassRef) id classRef;
|
|
@end
|
|
|
|
@interface PropertyAndMethodReverseCollisionInOneClass
|
|
@property (getter=getObject) id object;
|
|
@property (class,getter=getClassRef) id classRef;
|
|
- (void)object;
|
|
+ (void)classRef;
|
|
@end
|
|
|
|
@protocol PropertyProto
|
|
@property id protoProp;
|
|
@property(readonly) id protoPropRO;
|
|
@property(class) id protoClassProp;
|
|
@property(class, readonly) id protoClassPropRO;
|
|
@end
|
|
|
|
@interface PropertyAndMethodCollision () <PropertyProto>
|
|
- (id)protoProp;
|
|
- (id)protoPropRO;
|
|
+ (id)protoClassProp;
|
|
+ (id)protoClassPropRO;
|
|
@end
|
|
|
|
|
|
@interface SubscriptAndProperty : NSObject
|
|
@property (readonly) int x;
|
|
- (id)objectAtIndexedSubscript:(int)i;
|
|
@end
|
|
|
|
@interface SubscriptAndProperty ()
|
|
@property int x;
|
|
- (void)setObject:(id)obj atIndexedSubscript:(int)i;
|
|
@end
|
|
|
|
|
|
@protocol SubscriptAndPropertyProto <NSObject>
|
|
@property(readonly) int x;
|
|
- (id)objectAtIndexedSubscript:(int)i;
|
|
@end
|
|
|
|
@interface SubscriptAndPropertyWithProto : NSObject
|
|
@end
|
|
|
|
@interface SubscriptAndPropertyWithProto (AdoptTheProtocol) <SubscriptAndPropertyProto>
|
|
@end
|
|
|
|
@interface SubscriptAndPropertyWithProto (DeclareTheSetters)
|
|
@property int x;
|
|
- (void)setObject:(id)obj atIndexedSubscript:(int)i;
|
|
@end
|
|
|
|
@protocol ProtoOrClass
|
|
@property int thisIsTheProto;
|
|
@end
|
|
|
|
|
|
#pragma mark Constant global properties
|
|
|
|
extern const int MAX;
|
|
extern NSString * const SomeImageName;
|
|
extern NSNumber * const SomeNumber;
|
|
|
|
|
|
__weak id globalWeakVar;
|
|
|
|
@protocol Incomplete
|
|
- (id)getObject;
|
|
- (id)getObjectFromVarArgs:(id)first, ...;
|
|
@end
|
|
|
|
@protocol IncompleteOptional
|
|
@optional
|
|
- (id)getObject;
|
|
- (id)getObjectFromVarArgs:(id)first, ...;
|
|
@end
|
|
|
|
@interface StrangeSelectors
|
|
- (void)foo:(int)a bar:(int)b :(int)c;
|
|
+ (void)cStyle:(int)a, int b, int c;
|
|
+ (StrangeSelectors *):(int)x; // factory-method-like
|
|
+ (StrangeSelectors *):(int)x b:(int)y __attribute__((swift_name("init(a:b:)")));
|
|
- (void):(int)x;
|
|
- (void):(int)x :(int)y __attribute__((swift_name("empty(_:_:)")));
|
|
@end
|
|
|
|
@interface DeprecatedFactoryMethod
|
|
+ (instancetype)deprecatedFactoryMethod __attribute__((deprecated("use something newer")));
|
|
@end
|
|
|
|
|
|
@interface RepeatedMembers : NSObject
|
|
- (void)repeatedMethod;
|
|
- (void)anotherMethod;
|
|
- (void)repeatedMethod __attribute__((deprecated("use something newer")));
|
|
@end
|
|
|
|
// rdar://problem/19726164
|
|
@protocol FooDelegate <NSObject>
|
|
@property (nonatomic, assign, readonly, getter=isStarted) BOOL started;
|
|
@end
|
|
|
|
// rdar://problem/18847642
|
|
@interface NonNullDefaultInit
|
|
-(nonnull instancetype)init;
|
|
@end
|
|
|
|
@interface NonNullDefaultInitSub : NonNullDefaultInit
|
|
+ (null_unspecified instancetype)sub;
|
|
@end
|
|
|
|
@interface SomeCell : NSObject
|
|
-(instancetype)initString:(NSString *)string;
|
|
@property (nonatomic,readonly,getter=isEnabled) BOOL enabled;
|
|
@end
|
|
|
|
@interface DesignatedInitRoot : NSObject
|
|
- (instancetype)init __attribute__((objc_designated_initializer));
|
|
@end
|
|
|
|
@interface DesignatedInitBase : DesignatedInitRoot
|
|
- (instancetype)initWithInt:(NSInteger)value __attribute__((objc_designated_initializer));
|
|
@end
|
|
|
|
@interface DesignatedInitWithClassExtension : DesignatedInitRoot
|
|
- (instancetype)initWithInt:(NSInteger)value __attribute__((objc_designated_initializer));
|
|
- (instancetype)initWithConvenienceInt:(NSInteger)value;
|
|
@end
|
|
@interface DesignatedInitWithClassExtension ()
|
|
- (instancetype)initWithFloat:(float)value __attribute__((objc_designated_initializer));
|
|
@end
|
|
|
|
@interface DesignatedInitWithClassExtensionInAnotherModule : DesignatedInitRoot
|
|
- (instancetype)initWithInt:(NSInteger)value __attribute__((objc_designated_initializer));
|
|
- (instancetype)initWithConvenienceInt:(NSInteger)value;
|
|
@end
|
|
|
|
|
|
@protocol ExplicitSetterProto
|
|
@property (readonly) id foo;
|
|
- (void)setFoo:(id)foo;
|
|
@end
|
|
|
|
@protocol OptionalSetterProto
|
|
@property (readonly) id bar;
|
|
@optional
|
|
- (void)setBar:(id)bar;
|
|
@end
|
|
|
|
|
|
typedef NSObject <NSCopying> *CopyableNSObject;
|
|
typedef SomeCell <NSCopying> *CopyableSomeCell;
|
|
|
|
|
|
@interface Printing : NSObject
|
|
- (void)print;
|
|
- (void)print:(id)thing;
|
|
- (void)print:(id)thing options:(id)options;
|
|
|
|
+ (void)print;
|
|
+ (void)print:(id)thing;
|
|
+ (void)print:(id)thing options:(id)options;
|
|
@end
|
|
|
|
|
|
@interface FailBase : NSObject
|
|
- (nullable instancetype)initWithValue:(NSInteger)val error:(NSError **)error;
|
|
+ (BOOL)processValueAndReturnError:(NSError **)error;
|
|
@end
|
|
|
|
@interface CallbackBase : NSObject
|
|
- (void)performWithHandler:(void(^ _Nonnull)(void))handler;
|
|
- (void)performWithOptHandler:(void(^ _Nullable)(void))handler;
|
|
- (void)performWithNonescapingHandler:(void(__attribute__((noescape)) ^ _Nonnull)(void))handler;
|
|
- (void)performWithOptNonescapingHandler:(void(__attribute__((noescape)) ^ _Nullable)(void))handler;
|
|
@end
|
|
|
|
@interface SelectorSplittingAccessors : NSObject
|
|
// Note the custom setter name here; this is important.
|
|
@property (setter=takeFooForBar:) BOOL fooForBar;
|
|
@end
|
|
|
|
@interface InstancetypeAccessor : NSObject
|
|
@property (class, readonly) InstancetypeAccessor *prop;
|
|
+ (instancetype)prop;
|
|
@end
|
|
|
|
typedef NSArray<NSString *> *NSStringArray;
|
|
|
|
@interface BridgedTypedefs : NSObject
|
|
@property (readonly,nonnull) NSArray<NSStringArray> *arrayOfArrayOfStrings;
|
|
@end
|
|
|
|
typedef NSString * _Nonnull (*FPTypedef)(NSString * _Nonnull);
|
|
extern FPTypedef _Nonnull getFP(void);
|
|
|
|
|
|
#if !__has_feature(objc_arc_fields)
|
|
# error "Your Clang is not new enough"
|
|
#endif
|
|
struct NonTrivialToCopy {
|
|
__strong id field;
|
|
};
|
|
|
|
struct NonTrivialToCopyWrapper {
|
|
struct NonTrivialToCopy inner;
|
|
};
|
|
|
|
struct TrivialToCopy {
|
|
__unsafe_unretained id field;
|
|
};
|
|
|
|
@interface OverrideInExtensionBase : NSObject
|
|
- (void)method;
|
|
- (void)accessWarning;
|
|
@end
|
|
|
|
@interface OverrideInExtensionSub : OverrideInExtensionBase
|
|
@end
|
|
|
|
@interface SuperclassWithDesignatedInitInCategory
|
|
@end
|
|
|
|
@interface SubclassWithSwiftPrivateDesignatedInit : SuperclassWithDesignatedInitInCategory
|
|
-(instancetype) initWithI:(NSInteger)i __attribute__((objc_designated_initializer));
|
|
@end
|
|
|
|
@interface SuperclassWithDesignatedInitInCategory ()
|
|
-(instancetype) initWithI:(NSInteger)i __attribute__((objc_designated_initializer));
|
|
@end
|
|
|
|
__attribute__((swift_attr("@_hasMissingDesignatedInitializers")))
|
|
@interface NoConvenienceInitInheritanceBase : NSObject
|
|
@end
|
|
|
|
@interface NoConvenienceInitInheritance : NoConvenienceInitInheritanceBase
|
|
@end
|