From f3df1f7bf1bc23aa9f521107c69922e4a9503881 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Tue, 14 Nov 2017 01:46:24 +0000 Subject: [completion] complete ObjC interface names in an expression Objective-C interfaces can be used in a class property expression. rdar://26982192 llvm-svn: 318129 --- clang/lib/Sema/SemaCodeComplete.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'clang/lib/Sema/SemaCodeComplete.cpp') diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 26004cf3c36..7ee24b114cc 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -1082,9 +1082,16 @@ bool ResultBuilder::IsOrdinaryName(const NamedDecl *ND) const { /// ordinary name lookup but is not a type name. bool ResultBuilder::IsOrdinaryNonTypeName(const NamedDecl *ND) const { ND = cast(ND->getUnderlyingDecl()); - if (isa(ND) || isa(ND)) + if (isa(ND)) return false; - + // Objective-C interfaces names are not filtered by this method because they + // can be used in a class property expression. We can still filter out + // @class declarations though. + if (const auto *ID = dyn_cast(ND)) { + if (!ID->getDefinition()) + return false; + } + unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_LocalExtern; if (SemaRef.getLangOpts().CPlusPlus) IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace | Decl::IDNS_Member; -- cgit v1.2.3