// 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.count = 100;

  ((P*)0).count = array.count;

  obj.PropertyReturnsPObj.count = array.count;

  obj.count = (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.count = 100;

  super.count = array.count;

  super.PropertyReturnsPObj.count = array.count;

  super.count = (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.count = 100;
  [some setCount : [some count]];
  qsome.count = qsome.count;
}
@end

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

@implementation rdar19140114
- (void) Meth {
  menuItem.state = NSOnState;
  menuItem.state = NSOnState;
  menuItem.state = ArrNSOnState[NSOnState];
  menuItem.state = NSOnState;
  menuItem.state = NSOnState;
  menuItem.state = NSOnState;
  menuItem.state = NSOnState;
}
@end
