// RUN: rm -rf %t
// RUN: %clang_cc1 -objcmt-migrate-property-dot-syntax -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11
// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result
// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result

@class NSString;

// rdar://19140267
@protocol NSObject
@property (readonly, copy) NSString *description;
@end

// rdar://18498572
@interface NSObject <NSObject> @end

@interface P : NSObject
{
  P* obj;
  int i1, i2, i3;
}
@property int count;
@property (copy) P* PropertyReturnsPObj;
- (P*) MethodReturnsPObj;
@end

P* fun();

@implementation P
- (int) Meth : (P*)array {
  [obj setCount : 100];

  [(P*)0 setCount : [array count]];

  [[obj PropertyReturnsPObj] setCount : [array count]];

  [obj setCount : (i1+i2*i3 - 100)];

  return [obj count] -
         [(P*)0 count] + [array count] +
         [fun() count] - 
         [[obj PropertyReturnsPObj] count] +
         [self->obj count];
}

- (P*) MethodReturnsPObj { return 0; }

- (NSString *)description { return [super description]; }
@end

// rdar://19140267
@interface Sub : P
@end

@implementation Sub
- (int) Meth : (P*)array {
  [super setCount : 100];

  [super setCount : [array count]];

  [[super PropertyReturnsPObj] setCount : [array count]];

  [super setCount : (i1+i2*i3 - 100)];

  return [super count] -
         [(P*)0 count] + [array count] +
         [fun() count] -
         [[super PropertyReturnsPObj] count] +
         [self->obj count];
}
@end


@interface Rdar19038838
@property id newItem; // should be marked objc_method_family(none), but isn't.
@end

id testRdar19038838(Rdar19038838 *obj) {
  return [obj newItem];
}

// rdar://19381786
@interface rdar19381786 : NSObject
{
  rdar19381786* obj;
}
@property int count;
@end

@protocol PR 
@property int count;
@end

@implementation rdar19381786
-(void)test:(id)some : (id<PR>)qsome : (SEL)selsome
{
  [obj setCount : 100];
  [some setCount : [some count]];
  [qsome setCount : [qsome count]];
}
@end

// rdar://19140114
int NSOnState;
int ArrNSOnState[4];
@interface rdar19140114 : NSObject
{
  rdar19140114* menuItem;
}
@property int state;
@end

@implementation rdar19140114
- (void) Meth {
  [menuItem setState:NSOnState];
  [menuItem setState :NSOnState];
  [menuItem setState     :ArrNSOnState[NSOnState]];
  [menuItem setState : NSOnState];
  [menuItem setState:    NSOnState];
  [menuItem setState: NSOnState];
  [menuItem setState     :    NSOnState];
}
@end
