]> granicus.if.org Git - clang/commitdiff
Handle pseudo-object expressions (and any other placeholder
authorDouglas Gregor <dgregor@apple.com>
Mon, 23 Jan 2012 15:59:30 +0000 (15:59 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 23 Jan 2012 15:59:30 +0000 (15:59 +0000)
expression) when code-completing member access expressions. Fixes
<rdar://problem/10717172>.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148703 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaCodeComplete.cpp
test/Index/complete-member-access.m

index 5a553513b41cc63933afca9c89304f094b3ab89a..623e68b8a5a31bf1647c25d777e0aa19c91aec9d 100644 (file)
@@ -3351,15 +3351,19 @@ static void AddObjCProperties(ObjCContainerDecl *Container,
   }
 }
 
-void Sema::CodeCompleteMemberReferenceExpr(Scope *S, Expr *BaseE,
+void Sema::CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
                                            SourceLocation OpLoc,
                                            bool IsArrow) {
-  if (!BaseE || !CodeCompleter)
+  if (!Base || !CodeCompleter)
     return;
   
+  ExprResult ConvertedBase = PerformMemberExprBaseConversion(Base, IsArrow);
+  if (ConvertedBase.isInvalid())
+    return;
+  Base = ConvertedBase.get();
+
   typedef CodeCompletionResult Result;
   
-  Expr *Base = static_cast<Expr *>(BaseE);
   QualType BaseType = Base->getType();
 
   if (IsArrow) {
index 48156d93ffba59f0d5b8834db8bdd4b6cd639fb0..5e40be1eac013f0e156342c9caad89ffa1ebf765 100644 (file)
@@ -34,6 +34,14 @@ int test_more_props(Sub *s) {
   return s.myOtherPropLikeThing;
 }
 
+@interface Other
+@property Sub *sub;
+@end
+
+int test_two_levels(Other *other) {
+  return other.sub.myProp;
+}
+
 // RUN: c-index-test -code-completion-at=%s:21:7 %s | FileCheck -check-prefix=CHECK-CC1 %s
 // CHECK-CC1: ObjCPropertyDecl:{ResultType int}{TypedText prop1}
 // CHECK-CC1: ObjCPropertyDecl:{ResultType float}{TypedText ProtoProp}
@@ -59,4 +67,11 @@ int test_more_props(Sub *s) {
 // CHECK-CC3-NEXT: Objective-C property access
 // CHECK-CC3-NEXT: Container Kind: ObjCInterfaceDecl
 // CHECK-CC3-NEXT: Container is complete
-// CHECK-CC3-NEXT: Container USR: c:objc(cs)Sub
\ No newline at end of file
+// CHECK-CC3-NEXT: Container USR: c:objc(cs)Sub
+
+// RUN: c-index-test -code-completion-at=%s:42:20 %s | FileCheck -check-prefix=CHECK-CC4 %s
+// CHECK-CC4: ObjCInstanceMethodDecl:{ResultType int}{TypedText myOtherPropLikeThing} (37)
+// CHECK-CC4-NEXT: ObjCPropertyDecl:{ResultType int}{TypedText myProp} (35)
+// CHECK-CC4-NEXT: ObjCPropertyDecl:{ResultType int}{TypedText prop1} (35)
+// CHECK-CC4-NEXT: ObjCPropertyDecl:{ResultType float}{TypedText ProtoProp} (35)
+