From 89407989e82ee23ac1b81ee1b1f44da34fe313db Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Tue, 3 Jan 2017 11:56:40 +0000 Subject: [PATCH] [CodeCompletion] Autocomplete NS_DESIGNATED_INITIALIZER in initializers with arguments rdar://21014571 Differential Revision: https://reviews.llvm.org/D27039 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290879 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaCodeComplete.cpp | 17 ++++++++ test/Index/complete-designated-initializer.m | 43 ++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 test/Index/complete-designated-initializer.m diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index d76bde5746..3eef366b75 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -7471,6 +7471,23 @@ void Sema::CodeCompleteObjCMethodDeclSelector(Scope *S, } Results.ExitScope(); + + if (!AtParameterName && !SelIdents.empty() && + SelIdents.front()->getName().startswith("init")) { + for (const auto &M : PP.macros()) { + if (M.first->getName() != "NS_DESIGNATED_INITIALIZER") + continue; + Results.EnterNewScope(); + CodeCompletionBuilder Builder(Results.getAllocator(), + Results.getCodeCompletionTUInfo()); + Builder.AddTypedTextChunk( + Builder.getAllocator().CopyString(M.first->getName())); + Results.AddResult(CodeCompletionResult(Builder.TakeString(), CCP_Macro, + CXCursor_MacroDefinition)); + Results.ExitScope(); + } + } + HandleCodeCompleteResults(this, CodeCompleter, CodeCompletionContext::CCC_Other, Results.data(),Results.size()); diff --git a/test/Index/complete-designated-initializer.m b/test/Index/complete-designated-initializer.m new file mode 100644 index 0000000000..4ccafc2df3 --- /dev/null +++ b/test/Index/complete-designated-initializer.m @@ -0,0 +1,43 @@ +// Note: the run lines follow their respective tests, since line/column +// matter in this test. + +// rdar://21014571 + +#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) + +@interface DesignatedInitializerCompletion + +- (instancetype)init ; +- (instancetype)initWithFoo:(int)foo ; +- (instancetype)initWithX:(int)x andY:(int)y ; + +@end + +@implementation DesignatedInitializerCompletion + +- (instancetype)init { +} + +- (instancetype)initWithFoo:(int)foo { +} + +- (instancetype)initWithX:(int)x andY:(int)y { +} + +@end + +// RUN: c-index-test -code-completion-at=%s:10:22 %s | FileCheck %s +// RUN: c-index-test -code-completion-at=%s:11:38 %s | FileCheck %s +// RUN: c-index-test -code-completion-at=%s:11:29 %s | FileCheck -check-prefix=CHECK-NONE %s +// RUN: c-index-test -code-completion-at=%s:11:34 %s | FileCheck -check-prefix=CHECK-NONE %s +// RUN: c-index-test -code-completion-at=%s:12:34 %s | FileCheck %s +// RUN: c-index-test -code-completion-at=%s:12:46 %s | FileCheck %s + +// RUN: c-index-test -code-completion-at=%s:18:22 %s | FileCheck %s +// RUN: c-index-test -code-completion-at=%s:21:38 %s | FileCheck %s +// RUN: c-index-test -code-completion-at=%s:24:34 %s | FileCheck %s +// RUN: c-index-test -code-completion-at=%s:24:46 %s | FileCheck %s + +// CHECK: macro definition:{TypedText NS_DESIGNATED_INITIALIZER} (70) + +// CHECK-NONE-NOT: NS_DESIGNATED_INITIALIZER -- 2.40.0