Author: David Goldman
Date: 2020-06-25T13:58:27-04:00
New Revision: c61ef1f25c7fe774e68d20beb956a3b12a353b95

URL: 
https://github.com/llvm/llvm-project/commit/c61ef1f25c7fe774e68d20beb956a3b12a353b95
DIFF: 
https://github.com/llvm/llvm-project/commit/c61ef1f25c7fe774e68d20beb956a3b12a353b95.diff

LOG: [Sema][CodeComplete][ObjC] Don't split the first selector fragment

Summary:
Standardize the formatting of selector fragments to include the ':',
e.g. for `- (void)foobar:(int)foobar;`, report `{foobar:}` instead of
`{foobar}{:}`. This was normally the case except for a couple of places
where it was split.

This also improves integration with clangd since it relies upon the `:`
to identify ObjC selectors.

NOTE: It is possible to have selector fragments that are just `:` with
no text, we now handle this properly for the first fragment.

Reviewers: sammccall, doug.gregor

Subscribers: ilya-biryukov, dexonsmith, arphaman, kadircet, usaxena95, 
cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D82306

Added: 
    

Modified: 
    clang/lib/Sema/SemaCodeComplete.cpp
    clang/test/Index/complete-method-decls.m
    clang/test/Index/complete-parameterized-classes.m

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaCodeComplete.cpp 
b/clang/lib/Sema/SemaCodeComplete.cpp
index 5539aef917d0..913c43886b4e 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -8133,8 +8133,8 @@ static void AddObjCKeyValueCompletions(ObjCPropertyDecl 
*Property,
         Builder.AddChunk(CodeCompletionString::CK_RightParen);
       }
 
-      Builder.AddTypedTextChunk(Allocator.CopyString(SelectorId->getName()));
-      Builder.AddTypedTextChunk(":");
+      Builder.AddTypedTextChunk(
+          Allocator.CopyString(SelectorId->getName() + ":"));
       AddObjCPassingTypeChunk(Property->getType(), /*Quals=*/0, Context, 
Policy,
                               Builder);
       Builder.AddTextChunk(Key);
@@ -8722,39 +8722,43 @@ void Sema::CodeCompleteObjCMethodDecl(Scope *S, 
Optional<bool> IsInstanceMethod,
 
     Selector Sel = Method->getSelector();
 
-    // Add the first part of the selector to the pattern.
-    Builder.AddTypedTextChunk(
-        Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
-
-    // Add parameters to the pattern.
-    unsigned I = 0;
-    for (ObjCMethodDecl::param_iterator P = Method->param_begin(),
-                                        PEnd = Method->param_end();
-         P != PEnd; (void)++P, ++I) {
-      // Add the part of the selector name.
-      if (I == 0)
-        Builder.AddTypedTextChunk(":");
-      else if (I < Sel.getNumArgs()) {
-        Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
-        Builder.AddTypedTextChunk(
-            Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
-      } else
-        break;
-
-      // Add the parameter type.
-      QualType ParamType;
-      if ((*P)->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability)
-        ParamType = (*P)->getType();
-      else
-        ParamType = (*P)->getOriginalType();
-      ParamType = ParamType.substObjCTypeArgs(
-          Context, {}, ObjCSubstitutionContext::Parameter);
-      AttributedType::stripOuterNullability(ParamType);
-      AddObjCPassingTypeChunk(ParamType, (*P)->getObjCDeclQualifier(), Context,
-                              Policy, Builder);
+    if (Sel.isUnarySelector()) {
+      // Unary selectors have no arguments.
+      Builder.AddTypedTextChunk(
+          Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
+    } else {
+      // Add all parameters to the pattern.
+      unsigned I = 0;
+      for (ObjCMethodDecl::param_iterator P = Method->param_begin(),
+                                          PEnd = Method->param_end();
+           P != PEnd; (void)++P, ++I) {
+        // Add the part of the selector name.
+        if (I == 0)
+          Builder.AddTypedTextChunk(
+              Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
+        else if (I < Sel.getNumArgs()) {
+          Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+          Builder.AddTypedTextChunk(
+              Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
+        } else
+          break;
 
-      if (IdentifierInfo *Id = (*P)->getIdentifier())
-        Builder.AddTextChunk(Builder.getAllocator().CopyString(Id->getName()));
+        // Add the parameter type.
+        QualType ParamType;
+        if ((*P)->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability)
+          ParamType = (*P)->getType();
+        else
+          ParamType = (*P)->getOriginalType();
+        ParamType = ParamType.substObjCTypeArgs(
+            Context, {}, ObjCSubstitutionContext::Parameter);
+        AttributedType::stripOuterNullability(ParamType);
+        AddObjCPassingTypeChunk(ParamType, (*P)->getObjCDeclQualifier(),
+                                Context, Policy, Builder);
+
+        if (IdentifierInfo *Id = (*P)->getIdentifier())
+          Builder.AddTextChunk(
+              Builder.getAllocator().CopyString(Id->getName()));
+      }
     }
 
     if (Method->isVariadic()) {

diff  --git a/clang/test/Index/complete-method-decls.m 
b/clang/test/Index/complete-method-decls.m
index f561f81496a9..66c1bc56e8c9 100644
--- a/clang/test/Index/complete-method-decls.m
+++ b/clang/test/Index/complete-method-decls.m
@@ -111,40 +111,40 @@ -(void)foo {}
 // CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText abc} (40)
 // CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen 
)}{TypedText getInt} (40)
 // CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText getSelf} (40)
-// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText initWithInt}{TypedText :}{LeftParen (}{Text int}{RightParen 
)}{Text x} (40)
-// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText initWithTwoInts}{TypedText :}{LeftParen (}{Text inout }{Text 
int}{RightParen )}{Text x}{HorizontalSpace  }{TypedText second:}{LeftParen 
(}{Text int}{RightParen )}{Text y} (40)
+// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText initWithInt:}{LeftParen (}{Text int}{RightParen )}{Text x} (40)
+// CHECK-CC1: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText initWithTwoInts:}{LeftParen (}{Text inout }{Text int}{RightParen 
)}{Text x}{HorizontalSpace  }{TypedText second:}{LeftParen (}{Text 
int}{RightParen )}{Text y} (40)
 // RUN: c-index-test -code-completion-at=%s:17:7 %s | FileCheck 
-check-prefix=CHECK-CC2 %s
 // CHECK-CC2: ObjCInstanceMethodDecl:{TypedText abc}
 // CHECK-CC2-NEXT: ObjCInstanceMethodDecl:{TypedText getSelf}
-// CHECK-CC2: ObjCInstanceMethodDecl:{TypedText initWithInt}{TypedText 
:}{LeftParen (}{Text int}{RightParen )}{Text x}
-// CHECK-CC2: ObjCInstanceMethodDecl:{TypedText initWithTwoInts}{TypedText 
:}{LeftParen (}{Text inout }{Text int}{RightParen )}{Text x}{HorizontalSpace  
}{TypedText second:}{LeftParen (}{Text int}{RightParen )}{Text y}
+// CHECK-CC2: ObjCInstanceMethodDecl:{TypedText initWithInt:}{LeftParen 
(}{Text int}{RightParen )}{Text x}
+// CHECK-CC2: ObjCInstanceMethodDecl:{TypedText initWithTwoInts:}{LeftParen 
(}{Text inout }{Text int}{RightParen )}{Text x}{HorizontalSpace  }{TypedText 
second:}{LeftParen (}{Text int}{RightParen )}{Text y}
 // RUN: c-index-test -code-completion-at=%s:24:7 %s | FileCheck 
-check-prefix=CHECK-CC3 %s
 // CHECK-CC3: ObjCInstanceMethodDecl:{TypedText abc}
 // CHECK-CC3-NEXT: ObjCInstanceMethodDecl:{TypedText getSelf}
 // CHECK-CC3: ObjCInstanceMethodDecl:{TypedText init}
-// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText initWithInt}{TypedText 
:}{LeftParen (}{Text int}{RightParen )}{Text x}
-// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText initWithTwoInts}{TypedText 
:}{LeftParen (}{Text inout }{Text int}{RightParen )}{Text x}{HorizontalSpace  
}{TypedText second:}{LeftParen (}{Text int}{RightParen )}{Text y}
+// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText initWithInt:}{LeftParen 
(}{Text int}{RightParen )}{Text x}
+// CHECK-CC3: ObjCInstanceMethodDecl:{TypedText initWithTwoInts:}{LeftParen 
(}{Text inout }{Text int}{RightParen )}{Text x}{HorizontalSpace  }{TypedText 
second:}{LeftParen (}{Text int}{RightParen )}{Text y}
 // RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test 
-code-completion-at=%s:33:3 %s | FileCheck -check-prefix=CHECK-CC4 %s
 // CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText abc}{HorizontalSpace  }{LeftBrace {}{VerticalSpace  }{Text 
return}{HorizontalSpace  }{Placeholder expression}{SemiColon ;}{VerticalSpace  
}{RightBrace }} (42)
 // CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen 
)}{TypedText getInt}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
 // CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen 
)}{TypedText getSecondValue}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
 // CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText getSelf}{HorizontalSpace  }{LeftBrace {}{VerticalSpace  }{Text 
return}{HorizontalSpace  }{Placeholder expression}{SemiColon ;}{VerticalSpace  
}{RightBrace }} (40)
-// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText initWithInt}{TypedText :}{LeftParen (}{Text int}{RightParen 
)}{Text x}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
-// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText initWithTwoInts}{TypedText :}{LeftParen (}{Text inout }{Text 
int}{RightParen )}{Text x}{HorizontalSpace  }{TypedText second:}{LeftParen 
(}{Text int}{RightParen )}{Text y}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
-// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen 
)}{TypedText setValue}{TypedText :}{LeftParen (}{Text int}{RightParen )}{Text 
x}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
+// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText initWithInt:}{LeftParen (}{Text int}{RightParen )}{Text 
x}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
+// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText initWithTwoInts:}{LeftParen (}{Text inout }{Text int}{RightParen 
)}{Text x}{HorizontalSpace  }{TypedText second:}{LeftParen (}{Text 
int}{RightParen )}{Text y}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
+// CHECK-CC4: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen 
)}{TypedText setValue:}{LeftParen (}{Text int}{RightParen )}{Text 
x}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
 // RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test 
-code-completion-at=%s:33:8 %s | FileCheck -check-prefix=CHECK-CC5 %s
 // CHECK-CC5: ObjCInstanceMethodDecl:{TypedText getInt}{HorizontalSpace  
}{LeftBrace {}{VerticalSpace  }{Text return}{HorizontalSpace  }{Placeholder 
expression}{SemiColon ;}{VerticalSpace  }{RightBrace }} (42)
 // CHECK-CC5: ObjCInstanceMethodDecl:{TypedText 
getSecondValue}{HorizontalSpace  }{LeftBrace {}{VerticalSpace  }{Text 
return}{HorizontalSpace  }{Placeholder expression}{SemiColon ;}{VerticalSpace  
}{RightBrace }} (40)
 // CHECK-CC5-NOT: {TypedText getSelf}{HorizontalSpace  }{LeftBrace 
{}{VerticalSpace
-// CHECK-CC5: ObjCInstanceMethodDecl:{TypedText setValue}{TypedText 
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace  }{LeftBrace 
{}{VerticalSpace
+// CHECK-CC5: ObjCInstanceMethodDecl:{TypedText setValue:}{LeftParen (}{Text 
int}{RightParen )}{Text x}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
 // RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test 
-code-completion-at=%s:37:7 %s | FileCheck -check-prefix=CHECK-CC6 %s
-// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText abc}{HorizontalSpace  
}{LeftBrace {}{VerticalSpace 
+// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText abc}{HorizontalSpace  
}{LeftBrace {}{VerticalSpace
 // CHECK-CC6: ObjCInstanceMethodDecl:{TypedText getSelf}{HorizontalSpace  
}{LeftBrace {}{VerticalSpace  }{Text return}{HorizontalSpace  }{Placeholder 
expression}{SemiColon ;}{VerticalSpace  }{RightBrace }} (40)
-// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText initWithInt}{TypedText 
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace  }{LeftBrace 
{}{VerticalSpace 
-// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText initWithTwoInts}{TypedText 
:}{LeftParen (}{Text inout }{Text int}{RightParen )}{Text x}{HorizontalSpace  
}{TypedText second:}{LeftParen (}{Text int}{RightParen )}{Text 
y}{HorizontalSpace  }{LeftBrace {}{VerticalSpace 
+// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText initWithInt:}{LeftParen 
(}{Text int}{RightParen )}{Text x}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
+// CHECK-CC6: ObjCInstanceMethodDecl:{TypedText initWithTwoInts:}{LeftParen 
(}{Text inout }{Text int}{RightParen )}{Text x}{HorizontalSpace  }{TypedText 
second:}{LeftParen (}{Text int}{RightParen )}{Text y}{HorizontalSpace  
}{LeftBrace {}{VerticalSpace
 // RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test 
-code-completion-at=%s:42:3 %s | FileCheck -check-prefix=CHECK-CC7 %s
 // CHECK-CC7: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText abc}{HorizontalSpace  }{LeftBrace {}{VerticalSpace  }{Text 
return}{HorizontalSpace  }{Placeholder expression}{SemiColon ;}{VerticalSpace  
}{RightBrace }} (42)
-// CHECK-CC7: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText categoryFunction}{TypedText :}{LeftParen (}{Text int}{RightParen 
)}{Text x}{HorizontalSpace  }{LeftBrace {}{VerticalSpace 
+// CHECK-CC7: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText categoryFunction:}{LeftParen (}{Text int}{RightParen )}{Text 
x}{HorizontalSpace  }{LeftBrace {}{VerticalSpace
 // CHECK-CC7: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText getSelf}{HorizontalSpace  }{LeftBrace {}{VerticalSpace  }{Text 
return}{HorizontalSpace  }{Placeholder expression}{SemiColon ;}{VerticalSpace  
}{RightBrace }} (42)
 // RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test 
-code-completion-at=%s:52:21 %s | FileCheck -check-prefix=CHECK-CC8 %s
 // CHECK-CC8: ObjCInstanceMethodDecl:{ResultType id}{Informative 
first:}{TypedText second2:}{Text (float)y2}{HorizontalSpace  }{TypedText 
third:}{Text (double)z} (35)
@@ -157,9 +157,9 @@ -(void)foo {}
 // RUN: env CINDEXTEST_CODE_COMPLETE_PATTERNS=1 c-index-test 
-code-completion-at=%s:52:36 %s | FileCheck -check-prefix=CHECK-CCA %s
 // CHECK-CCA: NotImplemented:{TypedText y2} (40)
 // RUN: c-index-test -code-completion-at=%s:56:3 %s | FileCheck 
-check-prefix=CHECK-CCB %s
-// CHECK-CCB: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen 
)}{TypedText first}{TypedText :}{LeftParen (}{Text int}{RightParen )}{Text 
x}{HorizontalSpace  }{TypedText second2:}{LeftParen (}{Text float}{RightParen 
)}{Text y}{HorizontalSpace  }{TypedText third:}{LeftParen (}{Text 
double}{RightParen )}{Text z} (40)
+// CHECK-CCB: ObjCInstanceMethodDecl:{LeftParen (}{Text int}{RightParen 
)}{TypedText first:}{LeftParen (}{Text int}{RightParen )}{Text 
x}{HorizontalSpace  }{TypedText second2:}{LeftParen (}{Text float}{RightParen 
)}{Text y}{HorizontalSpace  }{TypedText third:}{LeftParen (}{Text 
double}{RightParen )}{Text z} (40)
 // RUN: c-index-test -code-completion-at=%s:56:8 %s | FileCheck 
-check-prefix=CHECK-CCC %s
-// CHECK-CCC: ObjCInstanceMethodDecl:{TypedText first}{TypedText :}{LeftParen 
(}{Text int}{RightParen )}{Text x}{HorizontalSpace  }{TypedText 
second2:}{LeftParen (}{Text float}{RightParen )}{Text y}{HorizontalSpace  
}{TypedText third:}{LeftParen (}{Text double}{RightParen )}{Text z} (40)
+// CHECK-CCC: ObjCInstanceMethodDecl:{TypedText first:}{LeftParen (}{Text 
int}{RightParen )}{Text x}{HorizontalSpace  }{TypedText second2:}{LeftParen 
(}{Text float}{RightParen )}{Text y}{HorizontalSpace  }{TypedText 
third:}{LeftParen (}{Text double}{RightParen )}{Text z} (40)
 // RUN: c-index-test -code-completion-at=%s:56:21 %s | FileCheck 
-check-prefix=CHECK-CCD %s
 // CHECK-CCD: ObjCInstanceMethodDecl:{ResultType id}{Informative 
first:}{TypedText second2:}{Text (float)y2}{HorizontalSpace  }{TypedText 
third:}{Text (double)z} (35)
 // CHECK-CCD: ObjCInstanceMethodDecl:{ResultType int}{Informative 
first:}{TypedText second2:}{Text (float)y}{HorizontalSpace  }{TypedText 
third:}{Text (double)z} (8)
@@ -214,11 +214,11 @@ -(void)foo {}
 
 // <rdar://problem/8939352>
 // RUN: c-index-test -code-completion-at=%s:68:9 %s | FileCheck 
-check-prefix=CHECK-8939352 %s
-// CHECK-8939352: ObjCInstanceMethodDecl:{TypedText method}{TypedText 
:}{LeftParen (}{Text int}{RightParen )}{Text x}{HorizontalSpace  }{TypedText 
:}{LeftParen (}{Text int}{RightParen )}{Text y} (40)
+// CHECK-8939352: ObjCInstanceMethodDecl:{TypedText method:}{LeftParen (}{Text 
int}{RightParen )}{Text x}{HorizontalSpace  }{TypedText :}{LeftParen (}{Text 
int}{RightParen )}{Text y} (40)
 
 
 // RUN: c-index-test -code-completion-at=%s:72:2 %s | FileCheck 
-check-prefix=CHECK-ONEWAY %s
-// CHECK-ONEWAY: ObjCInstanceMethodDecl:{LeftParen (}{Text oneway }{Text 
void}{RightParen )}{TypedText method}{TypedText :}{LeftParen (}{Text in }{Text 
id}{RightParen )}{Text x} (40)
+// CHECK-ONEWAY: ObjCInstanceMethodDecl:{LeftParen (}{Text oneway }{Text 
void}{RightParen )}{TypedText method:}{LeftParen (}{Text in }{Text 
id}{RightParen )}{Text x} (40)
 
 // RUN: c-index-test -code-completion-at=%s:85:2 %s | FileCheck 
-check-prefix=CHECK-CLASSTY %s
 // CHECK-CLASSTY: ObjCInstanceMethodDecl:{LeftParen (}{Text 
Class<P1>}{RightParen )}{TypedText meth}
@@ -226,16 +226,16 @@ -(void)foo {}
 // CHECK-CLASSTY: ObjCInstanceMethodDecl:{LeftParen (}{Text 
MyObjectRef}{RightParen )}{TypedText meth3}
 
 // RUN: c-index-test -code-completion-at=%s:96:2 %s -target 
x86_64-apple-macosx10.7 | FileCheck -check-prefix=CHECK-NULLABILITY %s
-// CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text I2 
*}{RightParen )}{TypedText produceI2}{TypedText :}{LeftParen (}{Text I2 
*}{RightParen )}{Text i2} (40)
+// CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text I2 
*}{RightParen )}{TypedText produceI2:}{LeftParen (}{Text I2 *}{RightParen 
)}{Text i2} (40)
 // CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText prop}
 // CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text void (^)(int * 
_Nullable)}{RightParen )}{TypedText propWB}
-// CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text 
void}{RightParen )}{TypedText setProp}{TypedText :}{LeftParen (}{Text 
id}{RightParen )}{Text prop}
-// CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text 
void}{RightParen )}{TypedText setPropWB}{TypedText :}{LeftParen (}{Text void 
(^)(int * _Nullable)}{RightParen )}{Text propWB}
-// CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text int * 
_Nullable *}{RightParen )}{TypedText something}{TypedText :}{LeftParen (}{Text 
void (^)(int * _Nullable)}{RightParen )}{Text b}
+// CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text 
void}{RightParen )}{TypedText setProp:}{LeftParen (}{Text id}{RightParen 
)}{Text prop}
+// CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text 
void}{RightParen )}{TypedText setPropWB:}{LeftParen (}{Text void (^)(int * 
_Nullable)}{RightParen )}{Text propWB}
+// CHECK-NULLABILITY: ObjCInstanceMethodDecl:{LeftParen (}{Text int * 
_Nullable *}{RightParen )}{TypedText something:}{LeftParen (}{Text void (^)(int 
* _Nullable)}{RightParen )}{Text b}
 
 // RUN: c-index-test -code-completion-at=%s:107:2 %s -target 
x86_64-apple-macosx10.7 | FileCheck -check-prefix=CHECK-NULLABILITY2 %s
 // CHECK-NULLABILITY2: ObjCInstanceMethodDecl:{LeftParen (}{Text 
instancetype}{RightParen )}{TypedText getI3} (40)
-// CHECK-NULLABILITY2: ObjCInstanceMethodDecl:{LeftParen (}{Text I3 
*}{RightParen )}{TypedText produceI3}{TypedText :}{LeftParen (}{Text I3 
*}{RightParen )}{Text i3} (40)
+// CHECK-NULLABILITY2: ObjCInstanceMethodDecl:{LeftParen (}{Text I3 
*}{RightParen )}{TypedText produceI3:}{LeftParen (}{Text I3 *}{RightParen 
)}{Text i3} (40)
 
 @interface CompleteWithoutLeadingPrefix
 
@@ -253,8 +253,21 @@ @implementation CompleteWithoutLeadingPrefix
 
 // RUN: c-index-test -code-completion-at=%s:250:1 %s | FileCheck 
-check-prefix=CHECK-COMP-NO-PREFIX %s
 // CHECK-COMP-NO-PREFIX: NotImplemented:{TypedText @end} (40)
-// CHECK-COMP-NO-PREFIX: ObjCClassMethodDecl:{Text +}{HorizontalSpace  
}{LeftParen (}{Text int}{RightParen )}{TypedText aClassMethod}{TypedText 
:}{LeftParen (}{Text int}{RightParen )}{Text x} (40)
+// CHECK-COMP-NO-PREFIX: ObjCClassMethodDecl:{Text +}{HorizontalSpace  
}{LeftParen (}{Text int}{RightParen )}{TypedText aClassMethod:}{LeftParen 
(}{Text int}{RightParen )}{Text x} (40)
 // CHECK-COMP-NO-PREFIX: ObjCInstanceMethodDecl:{Text -}{HorizontalSpace  
}{LeftParen (}{Text void}{RightParen )}{TypedText aMethod} (40)
 // CHECK-COMP-NO-PREFIX: ObjCInterfaceDecl:{TypedText I1}
 // CHECK-COMP-NO-PREFIX: ObjCInstanceMethodDecl:{Text -}{HorizontalSpace  
}{LeftParen (}{Text int}{RightParen )}{TypedText p} (40)
-// CHECK-COMP-NO-PREFIX: ObjCInstanceMethodDecl:{Text -}{HorizontalSpace  
}{LeftParen (}{Text void}{RightParen )}{TypedText setP}{TypedText :}{LeftParen 
(}{Text int}{RightParen )}{Text p} (40)
+// CHECK-COMP-NO-PREFIX: ObjCInstanceMethodDecl:{Text -}{HorizontalSpace  
}{LeftParen (}{Text void}{RightParen )}{TypedText setP:}{LeftParen (}{Text 
int}{RightParen )}{Text p} (40)
+
+@interface NoNameSelectors
+- (void):(int)a;
+- (void):(int)a :(int)b;
+@end
+
+@implementation NoNameSelectors
+
+@end
+
+// RUN: c-index-test -code-completion-at=%s:268:1 %s | FileCheck 
-check-prefix=CHECK-NNS %s
+// CHECK-NNS: ObjCInstanceMethodDecl:{Text -}{HorizontalSpace }{LeftParen 
(}{Text void}{RightParen )}{TypedText :}{LeftParen (}{Text int}{RightParen 
)}{Text a}
+// CHECK-NNS: ObjCInstanceMethodDecl:{Text -}{HorizontalSpace }{LeftParen 
(}{Text void}{RightParen )}{TypedText :}{LeftParen (}{Text int}{RightParen 
)}{Text a}{HorizontalSpace }{TypedText :}{LeftParen (}{Text int}{RightParen 
)}{Text b}

diff  --git a/clang/test/Index/complete-parameterized-classes.m 
b/clang/test/Index/complete-parameterized-classes.m
index ffef991acbee..701cf5d410b3 100644
--- a/clang/test/Index/complete-parameterized-classes.m
+++ b/clang/test/Index/complete-parameterized-classes.m
@@ -65,9 +65,9 @@ void test3() {
 // CHECK-CC5: ObjCIvarDecl:{ResultType __kindof NSObject *}{TypedText myVar} 
(35)
 
 // RUN: c-index-test -code-completion-at=%s:37:2 %s | FileCheck 
-check-prefix=CHECK-CC6 %s
-// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text void}{RightParen 
)}{TypedText apply2}{TypedText :}{LeftParen (}{Text void (^)(id, NSObject 
*)}{RightParen )}{Text block} (40)
-// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text void}{RightParen 
)}{TypedText apply}{TypedText :}{LeftParen (}{Text void (^)(id, NSObject 
*)}{RightParen )}{Text block} (40)
-// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text NSObject *}{RightParen 
)}{TypedText getit}{TypedText :}{LeftParen (}{Text id}{RightParen )}{Text val} 
(40)
+// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text void}{RightParen 
)}{TypedText apply2:}{LeftParen (}{Text void (^)(id, NSObject *)}{RightParen 
)}{Text block} (40)
+// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text void}{RightParen 
)}{TypedText apply:}{LeftParen (}{Text void (^)(id, NSObject *)}{RightParen 
)}{Text block} (40)
+// CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text NSObject *}{RightParen 
)}{TypedText getit:}{LeftParen (}{Text id}{RightParen )}{Text val} (40)
 // CHECK-CC6: ObjCInstanceMethodDecl:{LeftParen (}{Text id}{RightParen 
)}{TypedText prop} (40)
 
 // RUN: c-index-test -code-completion-at=%s:41:8 %s | FileCheck 
-check-prefix=CHECK-CC7 %s


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to