blob: f0ed85233b74d7f689976894a01aaf26b58a4c64 [file] [log] [blame]
// XFAIL: *
// TODO: Remove or cut it down to one symbol rename.
@interface I1
@property int p1; // CHECK1: rename [[@LINE]]:15 -> [[@LINE]]:17
@property (readwrite, nonatomic) int p2; // CHECK2: rename [[@LINE]]:38 -> [[@LINE]]:40
@end
// RUN: clang-refactor-test rename-initiate -at=%s:3:15 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:4:38 -new-name=foo %s | FileCheck --check-prefix=CHECK2 %s
@implementation I1
- (void)foo:(I1 *)other {
self.p2 = // CHECK2: rename [[@LINE]]:8 -> [[@LINE]]:10
self.p1; // CHECK1: rename [[@LINE]]:18 -> [[@LINE]]:20
(void)other.p1; // CHECK1: rename [[@LINE]]:15 -> [[@LINE]]:17
}
@end
// RUN: clang-refactor-test rename-initiate -at=%s:14:8 -new-name=foo %s | FileCheck --check-prefix=CHECK2 %s
// RUN: clang-refactor-test rename-initiate -at=%s:15:18 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:16:15 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
@implementation I1 (gettersAndSetters)
- (void)foo2:(I1 *)other {
int x = [self p1]; // CHECK1: rename [[@LINE]]:17 -> [[@LINE]]:19
[self setP1: x]; // CHECK1: rename "setFoo" [[@LINE]]:9 -> [[@LINE]]:14
[other setP2: // CHECK2: rename "setFoo" [[@LINE]]:10 -> [[@LINE]]:15
[other p2]]; // CHECK2: rename [[@LINE]]:12 -> [[@LINE]]:14
}
@end
// RUN: clang-refactor-test rename-initiate -at=%s:28:17 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:29:9 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:30:10 -new-name=foo %s | FileCheck --check-prefix=CHECK2 %s
// RUN: clang-refactor-test rename-initiate -at=%s:31:12 -new-name=foo %s | FileCheck --check-prefix=CHECK2 %s
@interface I2
@property int noImplementation; // CHECK3: rename [[@LINE]]:15 -> [[@LINE]]:31
@end
void noImplementationGetterSetters(I2 *object) {
object.noImplementation = 2; // CHECK3: rename [[@LINE]]:10 -> [[@LINE]]:26
int x = object.noImplementation; // CHECK3: rename [[@LINE]]:18 -> [[@LINE]]:34
[object setNoImplementation: x]; // CHECK3: rename "setFoo" [[@LINE]]:11 -> [[@LINE]]:30
(void)[object noImplementation]; // CHECK3: rename [[@LINE]]:17 -> [[@LINE]]:33
}
// RUN: clang-refactor-test rename-initiate -at=%s:43:15 -new-name=foo %s | FileCheck --check-prefix=CHECK3 %s
// RUN: clang-refactor-test rename-initiate -at=%s:48:10 -new-name=foo %s | FileCheck --check-prefix=CHECK3 %s
// RUN: clang-refactor-test rename-initiate -at=%s:49:18 -new-name=foo %s | FileCheck --check-prefix=CHECK3 %s
// RUN: clang-refactor-test rename-initiate -at=%s:50:11 -new-name=foo %s | FileCheck --check-prefix=CHECK3 %s
// RUN: clang-refactor-test rename-initiate -at=%s:51:17 -new-name=foo %s | FileCheck --check-prefix=CHECK3 %s
@interface I3
@property (readonly) int noSetter; // CHECK4: rename [[@LINE]]:26 -> [[@LINE]]:34
@end
void noPropertySetter(I3 *object) {
(void)object.noSetter; // CHECK4: rename [[@LINE]]:16 -> [[@LINE]]:24
object.noSetter = 2; // CHECK4-NOT: rename [[@LINE]]
(void)[object noSetter]; // CHECK4: rename [[@LINE]]:17 -> [[@LINE]]:25
[object setNoSetter: 2]; // CHECK4-NOT: rename "setFoo" [[@LINE]]
}
// RUN: clang-refactor-test rename-initiate -at=%s:62:26 -new-name=foo %s | FileCheck --check-prefix=CHECK4 %s
// RUN: clang-refactor-test rename-initiate -at=%s:67:16 -new-name=foo %s | FileCheck --check-prefix=CHECK4 %s
// RUN: clang-refactor-test rename-initiate -at=%s:69:17 -new-name=foo %s | FileCheck --check-prefix=CHECK4 %s
@interface PropertyOverrides1: I1
- (int)p1; // CHECK1: rename [[@LINE]]:8 -> [[@LINE]]:10
- (void)setP1:(int)x; // CHECK1: rename "setFoo" [[@LINE]]:9 -> [[@LINE]]:14
- (int)p2; // CHECK2: rename [[@LINE]]:8 -> [[@LINE]]:10
@end
@implementation PropertyOverrides1 {
I1 *object;
}
- (int)p1 { // CHECK1: rename [[@LINE]]:8 -> [[@LINE]]:10
return [super p1]; // CHECK1: rename [[@LINE]]:17 -> [[@LINE]]:19
}
- (void)setP1:(int)x { // CHECK1: rename "setFoo" [[@LINE]]:9 -> [[@LINE]]:14
[object setP1: x]; // CHECK1: rename "setFoo" [[@LINE]]:11 -> [[@LINE]]:16
[super setP1: x]; // CHECK1: rename "setFoo" [[@LINE]]:10 -> [[@LINE]]:15
}
- (int)p2 { // CHECK2: rename [[@LINE]]:8 -> [[@LINE]]:10
return super.p2; // CHECK2: rename [[@LINE]]:16 -> [[@LINE]]:18
}
@end
// RUN: clang-refactor-test rename-initiate -at=%s:79:8 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:80:9 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:89:8 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:90:17 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:92:9 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:93:11 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:94:10 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:81:8 -new-name=foo %s | FileCheck --check-prefix=CHECK2 %s
// RUN: clang-refactor-test rename-initiate -at=%s:96:8 -new-name=foo %s | FileCheck --check-prefix=CHECK2 %s
// RUN: clang-refactor-test rename-initiate -at=%s:97:16 -new-name=foo %s | FileCheck --check-prefix=CHECK2 %s
@interface PropertyOverrides2: I3
- (int)noSetter; // CHECK4: rename [[@LINE]]:8 -> [[@LINE]]:16
- (void)setNoSetter:(int)x; // CHECK4-NOT: rename "setFoo" [[@LINE]]
@end
void getterOnlyOverrideWithoutImplementation(PropertyOverrides2 *object) {
(void)object.noSetter; // CHECK4: rename [[@LINE]]:16 -> [[@LINE]]:24
int _ = [object noSetter]; // CHECK4: rename [[@LINE]]:19 -> [[@LINE]]:27
}
// RUN: clang-refactor-test rename-initiate -at=%s:115:8 -new-name=foo %s | FileCheck --check-prefix=CHECK4 %s
// RUN: clang-refactor-test rename-initiate -at=%s:121:16 -new-name=foo %s | FileCheck --check-prefix=CHECK4 %s
// RUN: clang-refactor-test rename-initiate -at=%s:122:19 -new-name=foo %s | FileCheck --check-prefix=CHECK4 %s
@interface MismatchedPropertyOverrides: I1
- (void)p1; // CHECK1: rename [[@LINE]]:9 -> [[@LINE]]:11
@end
// RUN: clang-refactor-test rename-initiate -at=%s:131:9 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
@interface ExplicitlyNamedGetterSetters1
@property (getter=getP3) int p3; // CHECK5: rename [[@LINE]]:30 -> [[@LINE]]:32
// CHECK5GET: rename [[@LINE-1]]:19 -> [[@LINE-1]]:24
@property (getter=a, setter=b:) int p4; // CHECK6: rename [[@LINE]]:37 -> [[@LINE]]:39
// CHECK6GET: rename [[@LINE-1]]:19 -> [[@LINE-1]]:20
// CHECK6SET: rename [[@LINE-2]]:29 -> [[@LINE-2]]:30
@property (readonly, getter=local) bool isLocal; // CHECK7: rename [[@LINE]]:41 -> [[@LINE]]:48
// CHECK7GET: rename [[@LINE-1]]:29 -> [[@LINE-1]]:34
@end
@implementation ExplicitlyNamedGetterSetters1
- (void)foo:(ExplicitlyNamedGetterSetters *)other {
self.p3 = 2; // CHECK5: rename [[@LINE]]:8 -> [[@LINE]]:10
[self p3]; // CHECK5-NOT: rename [[@LINE]]
[self setP3: // CHECK5: rename "setFoo" [[@LINE]]:9 -> [[@LINE]]:14
[other getP3]]; // CHECK5-NOT: rename [[@LINE]]
// CHECK5GET: rename [[@LINE-1]]:12 -> [[@LINE-1]]:17
self.p4 = 3; // CHECK6: rename [[@LINE]]:8 -> [[@LINE]]:10
[self p4]; // CHECK6-NOT: rename [[@LINE]]
[self setP4: 2]; // CHECK6-NOT: rename "setFoo" [[@LINE]]
[self b: // CHECK6-NOT: rename "setFoo" [[@LINE]]
// CHECK6SET: rename [[@LINE-1]]:9 -> [[@LINE-1]]:10
[other a]]; // CHECK6-NOT: rename [[@LINE]]
// CHECK6GET: rename [[@LINE-1]]:12 -> [[@LINE-1]]:13
(void)self.isLocal; // CHECK7: rename [[@LINE]]:14 -> [[@LINE]]:21
[self isLocal]; // CHECK7-NOT: rename [[@LINE]]
[other local]; // CHECK7-NOT: rename [[@LINE]]
// CHECK7GET: rename [[@LINE-1]]:10 -> [[@LINE-1]]:15
}
@end
// RUN: clang-refactor-test rename-initiate -at=%s:139:30 -new-name=foo %s | FileCheck --check-prefix=CHECK5 %s
// RUN: clang-refactor-test rename-initiate -at=%s:151:8 -new-name=foo %s | FileCheck --check-prefix=CHECK5 %s
// RUN: clang-refactor-test rename-initiate -at=%s:153:9 -new-name=foo %s | FileCheck --check-prefix=CHECK5 %s
// RUN: clang-refactor-test rename-initiate -at=%s:141:37 -new-name=foo %s | FileCheck --check-prefix=CHECK6 %s
// RUN: clang-refactor-test rename-initiate -at=%s:157:8 -new-name=foo %s | FileCheck --check-prefix=CHECK6 %s
// RUN: clang-refactor-test rename-initiate -at=%s:144:41 -new-name=foo %s | FileCheck --check-prefix=CHECK7 %s
// RUN: clang-refactor-test rename-initiate -at=%s:165:14 -new-name=foo %s | FileCheck --check-prefix=CHECK7 %s
// RUN: clang-refactor-test rename-initiate -at=%s:139:19 -new-name=foo %s | FileCheck --check-prefix=CHECK5GET %s
// RUN: clang-refactor-test rename-initiate -at=%s:154:12 -new-name=foo %s | FileCheck --check-prefix=CHECK5GET %s
// RUN: clang-refactor-test rename-initiate -at=%s:141:19 -new-name=foo %s | FileCheck --check-prefix=CHECK6GET %s
// RUN: clang-refactor-test rename-initiate -at=%s:162:12 -new-name=foo %s | FileCheck --check-prefix=CHECK6GET %s
// RUN: clang-refactor-test rename-initiate -at=%s:141:29 -new-name=foo %s | FileCheck --check-prefix=CHECK6SET %s
// RUN: clang-refactor-test rename-initiate -at=%s:160:9 -new-name=foo %s | FileCheck --check-prefix=CHECK6SET %s
// RUN: clang-refactor-test rename-initiate -at=%s:144:29 -new-name=foo %s | FileCheck --check-prefix=CHECK7GET %s
// RUN: clang-refactor-test rename-initiate -at=%s:167:10 -new-name=foo %s | FileCheck --check-prefix=CHECK7GET %s
void ivars1(I1 *object) {
object->_p1 = 2; // CHECK1: rename "_foo" [[@LINE]]:11 -> [[@LINE]]:14
object->_p2 = // CHECK2: rename "_foo" [[@LINE]]:11 -> [[@LINE]]:14
object->_p1; // CHECK1: rename "_foo" [[@LINE]]:25 -> [[@LINE]]:28
}
void ivars2(ExplicitlyNamedGetterSetters1 *object) {
object->_p3 = // CHECK5: rename "_foo" [[@LINE]]:11 -> [[@LINE]]:14
object->_p4; // CHECK6: rename "_foo" [[@LINE]]:25 -> [[@LINE]]:28
object->_isLocal = 0; // CHECK7: rename "_foo" [[@LINE]]:11 -> [[@LINE]]:19
}
void ivarsNoImplementation(I2 *object) {
object->_noImplementation = 4; // CHECK2-NOT: rename "_foo" [[@LINE]]
}
// RUN: clang-refactor-test rename-initiate -at=%s:195:11 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:197:25 -new-name=foo %s | FileCheck --check-prefix=CHECK1 %s
// RUN: clang-refactor-test rename-initiate -at=%s:196:11 -new-name=foo %s | FileCheck --check-prefix=CHECK2 %s
// RUN: clang-refactor-test rename-initiate -at=%s:201:11 -new-name=foo %s | FileCheck --check-prefix=CHECK5 %s
// RUN: clang-refactor-test rename-initiate -at=%s:202:25 -new-name=foo %s | FileCheck --check-prefix=CHECK6 %s
// RUN: clang-refactor-test rename-initiate -at=%s:203:11 -new-name=foo %s | FileCheck --check-prefix=CHECK7 %s
@interface ExplicitIVars
@property int p5; // CHECK8: rename [[@LINE]]:15 -> [[@LINE]]:17
@property(readonly) int p6; // CHECK9: rename [[@LINE]]:25 -> [[@LINE]]:27
@end
@implementation ExplicitIVars {
int _p5; // CHECK8: rename "_foo" [[@LINE]]:7 -> [[@LINE]]:10
int _p6; // CHECK9: rename "_foo" [[@LINE]]:7 -> [[@LINE]]:10
}
- (void)foo:(ExplicitIVars *)other {
_p5 = // CHECK8: rename "_foo" [[@LINE]]:3 -> [[@LINE]]:6
other->_p6; // CHECK9: rename "_foo" [[@LINE]]:16 -> [[@LINE]]:19
other->_p6 = // CHECK9: rename "_foo" [[@LINE]]:10 -> [[@LINE]]:13
_p5; // CHECK8: rename "_foo" [[@LINE]]:16 -> [[@LINE]]:19
self.p5 = // CHECK8: rename [[@LINE]]:8 -> [[@LINE]]:10
other.p6; // CHECK9: rename [[@LINE]]:18 -> [[@LINE]]:20
}
@end
// RUN: clang-refactor-test rename-initiate -at=%s:220:15 -new-name=foo %s | FileCheck --check-prefix=CHECK8 %s
// RUN: clang-refactor-test rename-initiate -at=%s:226:7 -new-name=foo %s | FileCheck --check-prefix=CHECK8 %s
// RUN: clang-refactor-test rename-initiate -at=%s:231:3 -new-name=foo %s | FileCheck --check-prefix=CHECK8 %s
// RUN: clang-refactor-test rename-initiate -at=%s:234:16 -new-name=foo %s | FileCheck --check-prefix=CHECK8 %s
// RUN: clang-refactor-test rename-initiate -at=%s:235:8 -new-name=foo %s | FileCheck --check-prefix=CHECK8 %s
// RUN: clang-refactor-test rename-initiate -at=%s:221:25 -new-name=foo %s | FileCheck --check-prefix=CHECK9 %s
// RUN: clang-refactor-test rename-initiate -at=%s:227:7 -new-name=foo %s | FileCheck --check-prefix=CHECK9 %s
// RUN: clang-refactor-test rename-initiate -at=%s:232:16 -new-name=foo %s | FileCheck --check-prefix=CHECK9 %s
// RUN: clang-refactor-test rename-initiate -at=%s:233:10 -new-name=foo %s | FileCheck --check-prefix=CHECK9 %s
// RUN: clang-refactor-test rename-initiate -at=%s:236:18 -new-name=foo %s | FileCheck --check-prefix=CHECK9 %s
@interface ExplicitIVarsInInterface {
int _p7; // CHECK10: rename "_foo" [[@LINE]]:7 -> [[@LINE]]:10
@public
int _p8; // CHECK11: rename "_foo" [[@LINE]]:7 -> [[@LINE]]:10
}
@property int p7; // CHECK10: rename [[@LINE]]:15 -> [[@LINE]]:17
@property int p8; // CHECK11: rename [[@LINE]]:15 -> [[@LINE]]:17
@end
@implementation ExplicitIVarsInInterface
@end
void explicitIVarsInInterface(ExplicitIVarsInInterface* object) {
object->_p7 = // CHECK10: rename "_foo" [[@LINE]]:11 -> [[@LINE]]:14
object->_p8; // CHECK11: rename "_foo" [[@LINE]]:25 -> [[@LINE]]:28
}
// RUN: clang-refactor-test rename-initiate -at=%s:254:7 -new-name=foo %s | FileCheck --check-prefix=CHECK10 %s
// RUN: clang-refactor-test rename-initiate -at=%s:259:15 -new-name=foo %s | FileCheck --check-prefix=CHECK10 %s
// RUN: clang-refactor-test rename-initiate -at=%s:268:11 -new-name=foo %s | FileCheck --check-prefix=CHECK10 %s
// RUN: clang-refactor-test rename-initiate -at=%s:256:7 -new-name=foo %s | FileCheck --check-prefix=CHECK11 %s
// RUN: clang-refactor-test rename-initiate -at=%s:260:15 -new-name=foo %s | FileCheck --check-prefix=CHECK11 %s
// RUN: clang-refactor-test rename-initiate -at=%s:269:25 -new-name=foo %s | FileCheck --check-prefix=CHECK11 %s
@interface GetterSetterDefinedInInterfaceOnly
@property int p9; // CHECK12: rename [[@LINE]]:15 -> [[@LINE]]:17
@end
@implementation GetterSetterDefinedInInterfaceOnly
- (int)p9 { return 0; } // CHECK12: rename [[@LINE]]:8 -> [[@LINE]]:10
- (void)setP9:(int)x { } // CHECK12: rename "setFoo" [[@LINE]]:9 -> [[@LINE]]:14
@end
// RUN: clang-refactor-test rename-initiate -at=%s:288:8 -new-name=foo %s | FileCheck --check-prefix=CHECK12 %s
// RUN: clang-refactor-test rename-initiate -at=%s:289:9 -new-name=foo %s | FileCheck --check-prefix=CHECK12 %s
void matchingGetterSetterSelector() {
@selector(p1); // CHECK1: selector [[@LINE]]:13 -> [[@LINE]]:15
@selector(setP1:); // CHECK1: selector "setFoo" [[@LINE]]:13 -> [[@LINE]]:18
@selector(setP1); // CHECK1-NOT: selector "setFoo" [[@LINE]]
}