Index: lib/Sema/SemaCodeComplete.cpp =================================================================== --- lib/Sema/SemaCodeComplete.cpp +++ lib/Sema/SemaCodeComplete.cpp @@ -7420,6 +7420,24 @@ } Results.ExitScope(); + + if (!AtParameterName && !SelIdents.empty() && + SelIdents.front()->getName().startswith("init") && + (!CodeCompleter || CodeCompleter->includeMacros())) { + 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()); Index: test/Index/complete-designated-initializer.m =================================================================== --- /dev/null +++ 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