ObjectiveC migrator. delegate property must be

inferred as 'assign', not 'assign' and 'strong'.
// rdar://15509831

llvm-svn: 195368
This commit is contained in:
Fariborz Jahanian 2013-11-21 17:49:34 +00:00
parent cf4143b55e
commit d9aef7883d
3 changed files with 13 additions and 7 deletions

View File

@ -343,12 +343,9 @@ static void rewriteToObjCProperty(const ObjCMethodDecl *Getter,
PropertyString += PropertyNameString;
}
// Property with no setter may be suggested as a 'readonly' property.
if (!Setter) {
if (!Setter)
append_attr(PropertyString, "readonly", LParenAdded);
QualType ResType = Context.getCanonicalType(Getter->getResultType());
if (const char *MemoryManagementAttr = PropertyMemoryAttribute(Context, ResType))
append_attr(PropertyString, MemoryManagementAttr, LParenAdded);
}
// Short circuit 'delegate' properties that contain the name "delegate" or
// "dataSource", or have exact name "target" to have 'assign' attribute.
@ -358,8 +355,11 @@ static void rewriteToObjCProperty(const ObjCMethodDecl *Getter,
QualType QT = Getter->getResultType();
if (!QT->isRealType())
append_attr(PropertyString, "assign", LParenAdded);
}
else if (Setter) {
} else if (!Setter) {
QualType ResType = Context.getCanonicalType(Getter->getResultType());
if (const char *MemoryManagementAttr = PropertyMemoryAttribute(Context, ResType))
append_attr(PropertyString, MemoryManagementAttr, LParenAdded);
} else {
const ParmVarDecl *argDecl = *Setter->param_begin();
QualType ArgType = Context.getCanonicalType(argDecl->getType());
if (const char *MemoryManagementAttr = PropertyMemoryAttribute(Context, ArgType))

View File

@ -70,6 +70,9 @@ typedef char BOOL;
- (id) dataSource;
// rdar://15509831
- (id)delegate;
- (id)xxxdelegateYYY;
- (void)setXxxdelegateYYY:(id)delegate;

View File

@ -61,6 +61,9 @@ typedef char BOOL;
@property (nonatomic, assign) id dataSource;
// rdar://15509831
@property (nonatomic, readonly, assign) id delegate;
@property (nonatomic, assign) id xxxdelegateYYY;