diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-12-10 23:18:06 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-12-10 23:18:06 +0000 |
commit | 88b6898085e8b7d5a577eb0cfb16bf489842324c (patch) | |
tree | 6a0b1854422ef0cb9ac8f8ab031c9eddd467d53d | |
parent | eeb15653c61f4969a9f4e2343b6f58ae04c8ca3c (diff) | |
download | bcm5719-llvm-88b6898085e8b7d5a577eb0cfb16bf489842324c.tar.gz bcm5719-llvm-88b6898085e8b7d5a577eb0cfb16bf489842324c.zip |
ObjectiveC. Provide a property-dot syntax for fixit
when selector in objc_bridge_related attribute names
a property. // rdar://15517899
llvm-svn: 196984
-rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 28 | ||||
-rw-r--r-- | clang/test/FixIt/fixit-objc-bridge-related-property.m | 23 |
2 files changed, 43 insertions, 8 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index aeb934c3811..c73a0b13878 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -3467,16 +3467,28 @@ Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, else { // Implicit conversion from ObjC type to CF object is needed. if (InstanceMethod) { - // Provide a fixit: [ObjectExpr InstanceMethod]; - std::string ExpressionString = " "; - ExpressionString += InstanceMethod->getSelector().getAsString(); - ExpressionString += "]"; + std::string ExpressionString; SourceLocation SrcExprEndLoc = PP.getLocForEndOfToken(SrcExpr->getLocEnd()); + if (InstanceMethod->isPropertyAccessor()) + if (const ObjCPropertyDecl *PDecl = InstanceMethod->findPropertyDecl()) { + // fixit: ObjectExpr.propertyname when it is aproperty accessor. + ExpressionString = "."; + ExpressionString += PDecl->getNameAsString(); + Diag(Loc, diag::err_objc_bridged_related_known_method) + << SrcType << DestType << InstanceMethod->getSelector() << true + << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString); + } + if (ExpressionString.empty()) { + // Provide a fixit: [ObjectExpr InstanceMethod] + ExpressionString = " "; + ExpressionString += InstanceMethod->getSelector().getAsString(); + ExpressionString += "]"; - Diag(Loc, diag::err_objc_bridged_related_known_method) - << SrcType << DestType << InstanceMethod->getSelector() << true - << FixItHint::CreateInsertion(SrcExpr->getLocStart(), "[") - << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString); + Diag(Loc, diag::err_objc_bridged_related_known_method) + << SrcType << DestType << InstanceMethod->getSelector() << true + << FixItHint::CreateInsertion(SrcExpr->getLocStart(), "[") + << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString); + } } else Diag(Loc, diag::err_objc_bridged_related_unknown_method) diff --git a/clang/test/FixIt/fixit-objc-bridge-related-property.m b/clang/test/FixIt/fixit-objc-bridge-related-property.m new file mode 100644 index 00000000000..5b13645d49a --- /dev/null +++ b/clang/test/FixIt/fixit-objc-bridge-related-property.m @@ -0,0 +1,23 @@ +// RUN: not %clang_cc1 -triple x86_64-apple-darwin10 -fdiagnostics-parseable-fixits -x objective-c %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-arc -fdiagnostics-parseable-fixits -x objective-c %s 2>&1 | FileCheck %s +// RUN: not %clang_cc1 -triple x86_64-apple-darwin10 -fdiagnostics-parseable-fixits -x objective-c++ %s 2>&1 | FileCheck %s +// rdar://15517899 + +typedef struct __attribute__((objc_bridge_related(NSColor,colorWithCGColor:,CGColor))) CGColor *CGColorRef; + +@interface NSColor ++ (NSColor *)colorWithCGColor:(CGColorRef)cgColor; +@property CGColorRef CGColor; +@end + +@interface NSTextField +- (void)setBackgroundColor:(NSColor *)color; +- (NSColor *)backgroundColor; +@end + +CGColorRef Test(NSTextField *textField, CGColorRef newColor) { + newColor = textField.backgroundColor; + return textField.backgroundColor; +} +// CHECK:{19:38-19:38}:".CGColor" +// CHECK:{20:34-20:34}:".CGColor" |