// RUN: clang-refactor extract -selection=test:%s %s -- 2>&1 | grep -v CHECK | FileCheck %s

@interface HasProperty

@property (strong) HasProperty *item;

- (HasProperty *)implicitProp;

- (void)setImplicitSetter:(HasProperty *)value;

@end

@implementation HasProperty

- (void)allowGetterExtraction {
  /*range allow_getter=->+0:42*/self.item;
  /*range allow_imp_getter=->+0:54*/self.implicitProp;
}
// CHECK: 1 'allow_getter' results:
// CHECK:      extracted() {
// CHECK-NEXT: return self.item;{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: - (void)allowGetterExtraction {
// CHECK-NEXT: extracted();

// CHECK: 1 'allow_imp_getter' results:
// CHECK:      extracted() {
// CHECK-NEXT: return self.implicitProp;{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: - (void)allowGetterExtraction {
// CHECK-NEXT: self.item;
// CHECK-NEXT: extracted();

- (void)prohibitSetterExtraction {
  /*range prohibit_setter=->+0:45*/self.item = 0;
  /*range prohibit_setter=->+0:55*/self.implicitSetter = 0;
}
// CHECK: 2 'prohibit_setter' results:
// CHECK: the selected expression can't be extracted

@end
