1// RUN: %check_clang_tidy %s objc-super-self %t 2 3@interface NSObject 4- (instancetype)init; 5- (instancetype)self; 6@end 7 8@interface NSObjectDerivedClass : NSObject 9@end 10 11@implementation NSObjectDerivedClass 12 13- (instancetype)init { 14 return [super self]; 15// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious invocation of 'self' in initializer; did you mean to invoke a superclass initializer? [objc-super-self] 16// CHECK-FIXES: return [super init]; 17} 18 19- (instancetype)initWithObject:(NSObject *)obj { 20 self = [super self]; 21// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious invocation of 'self' in initializer; did you mean to invoke a superclass initializer? [objc-super-self] 22// CHECK-FIXES: self = [super init]; 23 if (self) { 24 // ... 25 } 26 return self; 27} 28 29#define INITIALIZE() [super self] 30 31- (instancetype)initWithObject:(NSObject *)objc a:(int)a { 32 return INITIALIZE(); 33// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious invocation of 'self' in initializer; did you mean to invoke a superclass initializer? [objc-super-self] 34// CHECK-FIXES: return INITIALIZE(); 35} 36 37#define INITIALIZER_IMPL() return [super self] 38 39- (instancetype)initWithObject:(NSObject *)objc b:(int)b { 40 INITIALIZER_IMPL(); 41// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: suspicious invocation of 'self' in initializer; did you mean to invoke a superclass initializer? [objc-super-self] 42// CHECK-FIXES: INITIALIZER_IMPL(); 43} 44 45#define INITIALIZER_METHOD self 46 47- (instancetype)initWithObject:(NSObject *)objc c:(int)c { 48 return [super INITIALIZER_METHOD]; 49// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious invocation of 'self' in initializer; did you mean to invoke a superclass initializer? [objc-super-self] 50// CHECK-FIXES: return [super INITIALIZER_METHOD]; 51} 52 53#define RECEIVER super 54 55- (instancetype)initWithObject:(NSObject *)objc d:(int)d { 56 return [RECEIVER self]; 57// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: suspicious invocation of 'self' in initializer; did you mean to invoke a superclass initializer? [objc-super-self] 58// CHECK-FIXES: return [RECEIVER self]; 59} 60 61- (instancetype)foo { 62 return [super self]; 63} 64 65- (instancetype)bar { 66 return [self self]; 67} 68 69@end 70 71@interface RootClass 72- (instancetype)init; 73- (instancetype)self; 74@end 75 76@interface NotNSObjectDerivedClass : RootClass 77@end 78 79@implementation NotNSObjectDerivedClass 80 81- (instancetype)init { 82 return [super self]; 83} 84 85@end 86 87