r196984 - ObjectiveC. Provide a property-dot syntax for fixit

Fariborz Jahanian fjahanian at apple.com
Tue Dec 10 15:18:06 PST 2013


Author: fjahanian
Date: Tue Dec 10 17:18:06 2013
New Revision: 196984

URL: http://llvm.org/viewvc/llvm-project?rev=196984&view=rev
Log:
ObjectiveC. Provide a property-dot syntax for fixit
when selector in objc_bridge_related attribute names
a property. // rdar://15517899

Added:
    cfe/trunk/test/FixIt/fixit-objc-bridge-related-property.m
Modified:
    cfe/trunk/lib/Sema/SemaExprObjC.cpp

Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=196984&r1=196983&r2=196984&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Tue Dec 10 17:18:06 2013
@@ -3467,16 +3467,28 @@ Sema::CheckObjCBridgeRelatedConversions(
   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)

Added: cfe/trunk/test/FixIt/fixit-objc-bridge-related-property.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/FixIt/fixit-objc-bridge-related-property.m?rev=196984&view=auto
==============================================================================
--- cfe/trunk/test/FixIt/fixit-objc-bridge-related-property.m (added)
+++ cfe/trunk/test/FixIt/fixit-objc-bridge-related-property.m Tue Dec 10 17:18:06 2013
@@ -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;
+
+ at interface NSColor
++ (NSColor *)colorWithCGColor:(CGColorRef)cgColor;
+ at property CGColorRef CGColor;
+ at end
+
+ at interface NSTextField
+- (void)setBackgroundColor:(NSColor *)color;
+- (NSColor *)backgroundColor;
+ at 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"





More information about the cfe-commits mailing list