@interface Test

- (int)performAction:(int)action with:(int)value; // CHECK: rename [[@LINE]]:8 -> [[@LINE]]:21, [[@LINE]]:34 -> [[@LINE]]:38

@end

@implementation Test

- (int)performAction:(int)action
       with:(int)value { // CHECK: rename [[@LINE-1]]:8 -> [[@LINE-1]]:21, [[@LINE]]:8 -> [[@LINE]]:12
    return action + value;
}

+ (void)foo:(Test*)t {
    [t performAction: 2 with: 4]; // CHECK: rename [[@LINE]]:8 -> [[@LINE]]:21, [[@LINE]]:25 -> [[@LINE]]:29
    SEL s1 = @selector(performAction:
                       with:);    // CHECK-NOT: selector [[@LINE-1]]:24 -> [[@LINE-1]]:37, [[@LINE]]:24 -> [[@LINE]]:28
    SEL s2 = @selector(performAction:); // CHECK-NOT: selector [[@LINE]]
    SEL s3 = @selector(performAction);  // CHECK-NOT: selector [[@LINE]]
    // Not indexed
    [t performAction: 1 with: 2]; // CHECK-NOT: rename [[@LINE]]
}

@end

// RUN: clang-refactor-test rename-indexed-file -no-textual-matches -name=performAction:with -new-name=foo:bar -indexed-file=%s -indexed-at=3:8 -indexed-at=9:8 -indexed-at=objc-message:15:8 -indexed-symbol-kind=objc-im %s | FileCheck %s

@interface SemicolonIsExcluded
-(void)/*A_propA4_set_decl*/setPropA4X:(int)value;
@end
// CHECK2: rename [[@LINE-2]]:29 -> [[@LINE-2]]:39

// RUN: clang-refactor-test rename-indexed-file -no-textual-matches -name=setPropA4X: -new-name=foo -indexed-file=%s -indexed-at=29:29 -indexed-symbol-kind=objc-im %s -x objective-c | FileCheck --check-prefix=CHECK2 %s

// It should be possible to have the filename as one of the compilation arguments
// RUN: clang-refactor-test rename-indexed-file -no-textual-matches -ignore-filename-for-initiation-tu -name=performAction:with: -new-name=foo:bar: -indexed-file=%s -indexed-at=3:8 -indexed-at=9:8 -indexed-at=objc-message:15:8 -indexed-symbol-kind=objc-cm %s -c %s -Wall | FileCheck %s
// RUN: clang-refactor-test rename-indexed-file -no-textual-matches -ignore-filename-for-initiation-tu -name=performAction:with: -new-name=foo:bar: -indexed-file=%s -indexed-at=3:8 -indexed-at=9:8 -indexed-at=objc-message:15:8 -indexed-symbol-kind=objc-cm %s %s -fsyntax-only | FileCheck %s

// -gmodules should be stripped to avoid -fmodule-format=obj in CC1 arguments:
// RUN: clang-refactor-test rename-indexed-file -no-textual-matches -name=performAction:with: -new-name=foo:bar: -indexed-file=%s -indexed-at=3:8 -indexed-at=9:8 -indexed-at=objc-message:15:8 -indexed-symbol-kind=objc-cm %s -fmodules -gmodules | FileCheck %s

// These texual matches should be reported as comment or selector occurrences:
// CHECK3: rename [[@LINE-40]]:8 -> [[@LINE-40]]:21, [[@LINE-40]]:34 -> [[@LINE-40]]:38
// performAction
/* performAction: with: 2 performAction */
/*! performAction+1
// performAction with
!*/
/// Hello performAction with World
/// \c performAction.

// CHECK3: comment [[@LINE-8]]:4 -> [[@LINE-8]]:17
// CHECK3-NEXT: comment [[@LINE-8]]:4 -> [[@LINE-8]]:17
// CHECK3-NEXT: comment [[@LINE-9]]:27 -> [[@LINE-9]]:40
// CHECK3-NEXT: documentation [[@LINE-9]]:5 -> [[@LINE-9]]:18
// CHECK3-NEXT: documentation [[@LINE-9]]:4 -> [[@LINE-9]]:17
// CHECK3-NEXT: documentation [[@LINE-8]]:11 -> [[@LINE-8]]:24
// CHECK3-NEXT: documentation [[@LINE-8]]:8 -> [[@LINE-8]]:21

// "performAction:with:"
// 'performAction:'with:
// CHECK3-NEXT: comment [[@LINE-2]]:5 -> [[@LINE-2]]:18
// CHECK3-NEXT: comment [[@LINE-2]]:5 -> [[@LINE-2]]:18

// CHECK3-NEXT: selector [[@LINE+1]]:11 -> [[@LINE+1]]:24, [[@LINE+1]]:25 -> [[@LINE+1]]:29
@selector(performAction:with:);
// CHECK3-NEXT: selector [[@LINE+1]]:11 -> [[@LINE+1]]:24, [[@LINE+1]]:28 -> [[@LINE+1]]:32
@selector(performAction :  with );
// CHECK3-NEXT: selector [[@LINE+2]]:19 -> [[@LINE+2]]:32, [[@LINE+2]]:46 -> [[@LINE+2]]:50
SEL s = @selector(//comment
                  performAction: /*comment*/ with
                  );
// CHECK3-NEXT: selector [[@LINE+1]]:33 -> [[@LINE+1]]:46, [[@LINE+2]]:33 -> [[@LINE+2]]:37
void call = @selector(@selector(performAction:
                                with: ));

// CHECK3-NEXT: comment [[@LINE+1]]:55
// RUN: clang-refactor-test rename-indexed-file -name=performAction:with: -new-name=foo:bar -indexed-file=%s -indexed-at=objc-cm:3:8 %s | FileCheck --check-prefix=CHECK3 %s

// These ones shouldn't:
// performAction2 PERFORMACTION performActionWith
const char *test = "performAction:with:";

@selector(performAction: with ::)
@selector(performAction:)
@selector(performAction)
@selector(performAction with)
@selector(performAction:without:)
@selector(performAction:with:somethingElse:)
@selector(performAction:with "")
@selector("performAction:with:")
@selector(with: performAction:)
selector(performAction:with)
(performAction:with:)

// CHECK3-NOT: comment
// CHECK3-NOT: documentation
// CHECK3-NOT: selector

// It should be possible to find a selector in a file without any indexed occurrences:

// CHECK4: selector [[@LINE+1]]:11
@selector(nonIndexedSelector)
// CHECK4-NEXT: comment
// CHECK4-NOT: selector

// RUN: clang-refactor-test rename-indexed-file -indexed-symbol-kind=objc-im -name=nonIndexedSelector -new-name=test -indexed-file=%s %s | FileCheck --check-prefix=CHECK4 %s
// RUN: clang-refactor-test rename-indexed-file -indexed-symbol-kind=objc-cm -name=nonIndexedSelector -new-name=test -indexed-file=%s %s | FileCheck --check-prefix=CHECK4 %s

#define MACRO doStuff
#define MACRO2(x, y) doStuff:(x) with: (y)

@interface I
- (void)doStuff:(int)x with: y;
@end

@implementation I
- (void)MACRO:(int)x with: y {
  [self MACRO2(x, y)];
}
@end

// CHECK-MACRO: macro [[@LINE-5]]:9 -> [[@LINE-5]]:9
// CHECK-MACRO-NEXT: macro [[@LINE-5]]:9 -> [[@LINE-5]]:9
// CHECK-MACRO-NEXT: rename [[@LINE-11]]:9 -> [[@LINE-11]]:16, [[@LINE-11]]:24 -> [[@LINE-11]]:28
// CHECK-MACRO-NOT: macro

// RUN: clang-refactor-test rename-indexed-file -indexed-symbol-kind=objc-im -name=doStuff:with: -new-name=foo:bar -indexed-file=%s -indexed-at=114:9 -indexed-at=118:9 -indexed-at=119:9 %s | FileCheck --check-prefix=CHECK-MACRO %s
