xref: /freebsd/contrib/llvm-project/clang/lib/Sema/SemaCodeComplete.cpp (revision 43a5ec4eb41567cc92586503212743d89686d78f)
1 //===---------------- SemaCodeComplete.cpp - Code Completion ----*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //  This file defines the code-completion semantic actions.
10 //
11 //===----------------------------------------------------------------------===//
12 #include "clang/AST/ASTConcept.h"
13 #include "clang/AST/Decl.h"
14 #include "clang/AST/DeclBase.h"
15 #include "clang/AST/DeclCXX.h"
16 #include "clang/AST/DeclObjC.h"
17 #include "clang/AST/DeclTemplate.h"
18 #include "clang/AST/Expr.h"
19 #include "clang/AST/ExprCXX.h"
20 #include "clang/AST/ExprConcepts.h"
21 #include "clang/AST/ExprObjC.h"
22 #include "clang/AST/NestedNameSpecifier.h"
23 #include "clang/AST/QualTypeNames.h"
24 #include "clang/AST/RecursiveASTVisitor.h"
25 #include "clang/AST/Type.h"
26 #include "clang/Basic/CharInfo.h"
27 #include "clang/Basic/OperatorKinds.h"
28 #include "clang/Basic/Specifiers.h"
29 #include "clang/Lex/HeaderSearch.h"
30 #include "clang/Lex/MacroInfo.h"
31 #include "clang/Lex/Preprocessor.h"
32 #include "clang/Sema/CodeCompleteConsumer.h"
33 #include "clang/Sema/DeclSpec.h"
34 #include "clang/Sema/Designator.h"
35 #include "clang/Sema/Lookup.h"
36 #include "clang/Sema/Overload.h"
37 #include "clang/Sema/Scope.h"
38 #include "clang/Sema/ScopeInfo.h"
39 #include "clang/Sema/Sema.h"
40 #include "clang/Sema/SemaInternal.h"
41 #include "llvm/ADT/ArrayRef.h"
42 #include "llvm/ADT/DenseSet.h"
43 #include "llvm/ADT/SmallBitVector.h"
44 #include "llvm/ADT/SmallPtrSet.h"
45 #include "llvm/ADT/SmallString.h"
46 #include "llvm/ADT/StringExtras.h"
47 #include "llvm/ADT/StringSwitch.h"
48 #include "llvm/ADT/Twine.h"
49 #include "llvm/ADT/iterator_range.h"
50 #include "llvm/Support/Casting.h"
51 #include "llvm/Support/Path.h"
52 #include "llvm/Support/raw_ostream.h"
53 #include <list>
54 #include <map>
55 #include <string>
56 #include <vector>
57 
58 using namespace clang;
59 using namespace sema;
60 
61 namespace {
62 /// A container of code-completion results.
63 class ResultBuilder {
64 public:
65   /// The type of a name-lookup filter, which can be provided to the
66   /// name-lookup routines to specify which declarations should be included in
67   /// the result set (when it returns true) and which declarations should be
68   /// filtered out (returns false).
69   typedef bool (ResultBuilder::*LookupFilter)(const NamedDecl *) const;
70 
71   typedef CodeCompletionResult Result;
72 
73 private:
74   /// The actual results we have found.
75   std::vector<Result> Results;
76 
77   /// A record of all of the declarations we have found and placed
78   /// into the result set, used to ensure that no declaration ever gets into
79   /// the result set twice.
80   llvm::SmallPtrSet<const Decl *, 16> AllDeclsFound;
81 
82   typedef std::pair<const NamedDecl *, unsigned> DeclIndexPair;
83 
84   /// An entry in the shadow map, which is optimized to store
85   /// a single (declaration, index) mapping (the common case) but
86   /// can also store a list of (declaration, index) mappings.
87   class ShadowMapEntry {
88     typedef SmallVector<DeclIndexPair, 4> DeclIndexPairVector;
89 
90     /// Contains either the solitary NamedDecl * or a vector
91     /// of (declaration, index) pairs.
92     llvm::PointerUnion<const NamedDecl *, DeclIndexPairVector *> DeclOrVector;
93 
94     /// When the entry contains a single declaration, this is
95     /// the index associated with that entry.
96     unsigned SingleDeclIndex;
97 
98   public:
99     ShadowMapEntry() : DeclOrVector(), SingleDeclIndex(0) {}
100     ShadowMapEntry(const ShadowMapEntry &) = delete;
101     ShadowMapEntry(ShadowMapEntry &&Move) { *this = std::move(Move); }
102     ShadowMapEntry &operator=(const ShadowMapEntry &) = delete;
103     ShadowMapEntry &operator=(ShadowMapEntry &&Move) {
104       SingleDeclIndex = Move.SingleDeclIndex;
105       DeclOrVector = Move.DeclOrVector;
106       Move.DeclOrVector = nullptr;
107       return *this;
108     }
109 
110     void Add(const NamedDecl *ND, unsigned Index) {
111       if (DeclOrVector.isNull()) {
112         // 0 - > 1 elements: just set the single element information.
113         DeclOrVector = ND;
114         SingleDeclIndex = Index;
115         return;
116       }
117 
118       if (const NamedDecl *PrevND =
119               DeclOrVector.dyn_cast<const NamedDecl *>()) {
120         // 1 -> 2 elements: create the vector of results and push in the
121         // existing declaration.
122         DeclIndexPairVector *Vec = new DeclIndexPairVector;
123         Vec->push_back(DeclIndexPair(PrevND, SingleDeclIndex));
124         DeclOrVector = Vec;
125       }
126 
127       // Add the new element to the end of the vector.
128       DeclOrVector.get<DeclIndexPairVector *>()->push_back(
129           DeclIndexPair(ND, Index));
130     }
131 
132     ~ShadowMapEntry() {
133       if (DeclIndexPairVector *Vec =
134               DeclOrVector.dyn_cast<DeclIndexPairVector *>()) {
135         delete Vec;
136         DeclOrVector = ((NamedDecl *)nullptr);
137       }
138     }
139 
140     // Iteration.
141     class iterator;
142     iterator begin() const;
143     iterator end() const;
144   };
145 
146   /// A mapping from declaration names to the declarations that have
147   /// this name within a particular scope and their index within the list of
148   /// results.
149   typedef llvm::DenseMap<DeclarationName, ShadowMapEntry> ShadowMap;
150 
151   /// The semantic analysis object for which results are being
152   /// produced.
153   Sema &SemaRef;
154 
155   /// The allocator used to allocate new code-completion strings.
156   CodeCompletionAllocator &Allocator;
157 
158   CodeCompletionTUInfo &CCTUInfo;
159 
160   /// If non-NULL, a filter function used to remove any code-completion
161   /// results that are not desirable.
162   LookupFilter Filter;
163 
164   /// Whether we should allow declarations as
165   /// nested-name-specifiers that would otherwise be filtered out.
166   bool AllowNestedNameSpecifiers;
167 
168   /// If set, the type that we would prefer our resulting value
169   /// declarations to have.
170   ///
171   /// Closely matching the preferred type gives a boost to a result's
172   /// priority.
173   CanQualType PreferredType;
174 
175   /// A list of shadow maps, which is used to model name hiding at
176   /// different levels of, e.g., the inheritance hierarchy.
177   std::list<ShadowMap> ShadowMaps;
178 
179   /// Overloaded C++ member functions found by SemaLookup.
180   /// Used to determine when one overload is dominated by another.
181   llvm::DenseMap<std::pair<DeclContext *, /*Name*/uintptr_t>, ShadowMapEntry>
182       OverloadMap;
183 
184   /// If we're potentially referring to a C++ member function, the set
185   /// of qualifiers applied to the object type.
186   Qualifiers ObjectTypeQualifiers;
187   /// The kind of the object expression, for rvalue/lvalue overloads.
188   ExprValueKind ObjectKind;
189 
190   /// Whether the \p ObjectTypeQualifiers field is active.
191   bool HasObjectTypeQualifiers;
192 
193   /// The selector that we prefer.
194   Selector PreferredSelector;
195 
196   /// The completion context in which we are gathering results.
197   CodeCompletionContext CompletionContext;
198 
199   /// If we are in an instance method definition, the \@implementation
200   /// object.
201   ObjCImplementationDecl *ObjCImplementation;
202 
203   void AdjustResultPriorityForDecl(Result &R);
204 
205   void MaybeAddConstructorResults(Result R);
206 
207 public:
208   explicit ResultBuilder(Sema &SemaRef, CodeCompletionAllocator &Allocator,
209                          CodeCompletionTUInfo &CCTUInfo,
210                          const CodeCompletionContext &CompletionContext,
211                          LookupFilter Filter = nullptr)
212       : SemaRef(SemaRef), Allocator(Allocator), CCTUInfo(CCTUInfo),
213         Filter(Filter), AllowNestedNameSpecifiers(false),
214         HasObjectTypeQualifiers(false), CompletionContext(CompletionContext),
215         ObjCImplementation(nullptr) {
216     // If this is an Objective-C instance method definition, dig out the
217     // corresponding implementation.
218     switch (CompletionContext.getKind()) {
219     case CodeCompletionContext::CCC_Expression:
220     case CodeCompletionContext::CCC_ObjCMessageReceiver:
221     case CodeCompletionContext::CCC_ParenthesizedExpression:
222     case CodeCompletionContext::CCC_Statement:
223     case CodeCompletionContext::CCC_Recovery:
224       if (ObjCMethodDecl *Method = SemaRef.getCurMethodDecl())
225         if (Method->isInstanceMethod())
226           if (ObjCInterfaceDecl *Interface = Method->getClassInterface())
227             ObjCImplementation = Interface->getImplementation();
228       break;
229 
230     default:
231       break;
232     }
233   }
234 
235   /// Determine the priority for a reference to the given declaration.
236   unsigned getBasePriority(const NamedDecl *D);
237 
238   /// Whether we should include code patterns in the completion
239   /// results.
240   bool includeCodePatterns() const {
241     return SemaRef.CodeCompleter &&
242            SemaRef.CodeCompleter->includeCodePatterns();
243   }
244 
245   /// Set the filter used for code-completion results.
246   void setFilter(LookupFilter Filter) { this->Filter = Filter; }
247 
248   Result *data() { return Results.empty() ? nullptr : &Results.front(); }
249   unsigned size() const { return Results.size(); }
250   bool empty() const { return Results.empty(); }
251 
252   /// Specify the preferred type.
253   void setPreferredType(QualType T) {
254     PreferredType = SemaRef.Context.getCanonicalType(T);
255   }
256 
257   /// Set the cv-qualifiers on the object type, for us in filtering
258   /// calls to member functions.
259   ///
260   /// When there are qualifiers in this set, they will be used to filter
261   /// out member functions that aren't available (because there will be a
262   /// cv-qualifier mismatch) or prefer functions with an exact qualifier
263   /// match.
264   void setObjectTypeQualifiers(Qualifiers Quals, ExprValueKind Kind) {
265     ObjectTypeQualifiers = Quals;
266     ObjectKind = Kind;
267     HasObjectTypeQualifiers = true;
268   }
269 
270   /// Set the preferred selector.
271   ///
272   /// When an Objective-C method declaration result is added, and that
273   /// method's selector matches this preferred selector, we give that method
274   /// a slight priority boost.
275   void setPreferredSelector(Selector Sel) { PreferredSelector = Sel; }
276 
277   /// Retrieve the code-completion context for which results are
278   /// being collected.
279   const CodeCompletionContext &getCompletionContext() const {
280     return CompletionContext;
281   }
282 
283   /// Specify whether nested-name-specifiers are allowed.
284   void allowNestedNameSpecifiers(bool Allow = true) {
285     AllowNestedNameSpecifiers = Allow;
286   }
287 
288   /// Return the semantic analysis object for which we are collecting
289   /// code completion results.
290   Sema &getSema() const { return SemaRef; }
291 
292   /// Retrieve the allocator used to allocate code completion strings.
293   CodeCompletionAllocator &getAllocator() const { return Allocator; }
294 
295   CodeCompletionTUInfo &getCodeCompletionTUInfo() const { return CCTUInfo; }
296 
297   /// Determine whether the given declaration is at all interesting
298   /// as a code-completion result.
299   ///
300   /// \param ND the declaration that we are inspecting.
301   ///
302   /// \param AsNestedNameSpecifier will be set true if this declaration is
303   /// only interesting when it is a nested-name-specifier.
304   bool isInterestingDecl(const NamedDecl *ND,
305                          bool &AsNestedNameSpecifier) const;
306 
307   /// Check whether the result is hidden by the Hiding declaration.
308   ///
309   /// \returns true if the result is hidden and cannot be found, false if
310   /// the hidden result could still be found. When false, \p R may be
311   /// modified to describe how the result can be found (e.g., via extra
312   /// qualification).
313   bool CheckHiddenResult(Result &R, DeclContext *CurContext,
314                          const NamedDecl *Hiding);
315 
316   /// Add a new result to this result set (if it isn't already in one
317   /// of the shadow maps), or replace an existing result (for, e.g., a
318   /// redeclaration).
319   ///
320   /// \param R the result to add (if it is unique).
321   ///
322   /// \param CurContext the context in which this result will be named.
323   void MaybeAddResult(Result R, DeclContext *CurContext = nullptr);
324 
325   /// Add a new result to this result set, where we already know
326   /// the hiding declaration (if any).
327   ///
328   /// \param R the result to add (if it is unique).
329   ///
330   /// \param CurContext the context in which this result will be named.
331   ///
332   /// \param Hiding the declaration that hides the result.
333   ///
334   /// \param InBaseClass whether the result was found in a base
335   /// class of the searched context.
336   void AddResult(Result R, DeclContext *CurContext, NamedDecl *Hiding,
337                  bool InBaseClass);
338 
339   /// Add a new non-declaration result to this result set.
340   void AddResult(Result R);
341 
342   /// Enter into a new scope.
343   void EnterNewScope();
344 
345   /// Exit from the current scope.
346   void ExitScope();
347 
348   /// Ignore this declaration, if it is seen again.
349   void Ignore(const Decl *D) { AllDeclsFound.insert(D->getCanonicalDecl()); }
350 
351   /// Add a visited context.
352   void addVisitedContext(DeclContext *Ctx) {
353     CompletionContext.addVisitedContext(Ctx);
354   }
355 
356   /// \name Name lookup predicates
357   ///
358   /// These predicates can be passed to the name lookup functions to filter the
359   /// results of name lookup. All of the predicates have the same type, so that
360   ///
361   //@{
362   bool IsOrdinaryName(const NamedDecl *ND) const;
363   bool IsOrdinaryNonTypeName(const NamedDecl *ND) const;
364   bool IsIntegralConstantValue(const NamedDecl *ND) const;
365   bool IsOrdinaryNonValueName(const NamedDecl *ND) const;
366   bool IsNestedNameSpecifier(const NamedDecl *ND) const;
367   bool IsEnum(const NamedDecl *ND) const;
368   bool IsClassOrStruct(const NamedDecl *ND) const;
369   bool IsUnion(const NamedDecl *ND) const;
370   bool IsNamespace(const NamedDecl *ND) const;
371   bool IsNamespaceOrAlias(const NamedDecl *ND) const;
372   bool IsType(const NamedDecl *ND) const;
373   bool IsMember(const NamedDecl *ND) const;
374   bool IsObjCIvar(const NamedDecl *ND) const;
375   bool IsObjCMessageReceiver(const NamedDecl *ND) const;
376   bool IsObjCMessageReceiverOrLambdaCapture(const NamedDecl *ND) const;
377   bool IsObjCCollection(const NamedDecl *ND) const;
378   bool IsImpossibleToSatisfy(const NamedDecl *ND) const;
379   //@}
380 };
381 } // namespace
382 
383 void PreferredTypeBuilder::enterReturn(Sema &S, SourceLocation Tok) {
384   if (!Enabled)
385     return;
386   if (isa<BlockDecl>(S.CurContext)) {
387     if (sema::BlockScopeInfo *BSI = S.getCurBlock()) {
388       ComputeType = nullptr;
389       Type = BSI->ReturnType;
390       ExpectedLoc = Tok;
391     }
392   } else if (const auto *Function = dyn_cast<FunctionDecl>(S.CurContext)) {
393     ComputeType = nullptr;
394     Type = Function->getReturnType();
395     ExpectedLoc = Tok;
396   } else if (const auto *Method = dyn_cast<ObjCMethodDecl>(S.CurContext)) {
397     ComputeType = nullptr;
398     Type = Method->getReturnType();
399     ExpectedLoc = Tok;
400   }
401 }
402 
403 void PreferredTypeBuilder::enterVariableInit(SourceLocation Tok, Decl *D) {
404   if (!Enabled)
405     return;
406   auto *VD = llvm::dyn_cast_or_null<ValueDecl>(D);
407   ComputeType = nullptr;
408   Type = VD ? VD->getType() : QualType();
409   ExpectedLoc = Tok;
410 }
411 
412 static QualType getDesignatedType(QualType BaseType, const Designation &Desig);
413 
414 void PreferredTypeBuilder::enterDesignatedInitializer(SourceLocation Tok,
415                                                       QualType BaseType,
416                                                       const Designation &D) {
417   if (!Enabled)
418     return;
419   ComputeType = nullptr;
420   Type = getDesignatedType(BaseType, D);
421   ExpectedLoc = Tok;
422 }
423 
424 void PreferredTypeBuilder::enterFunctionArgument(
425     SourceLocation Tok, llvm::function_ref<QualType()> ComputeType) {
426   if (!Enabled)
427     return;
428   this->ComputeType = ComputeType;
429   Type = QualType();
430   ExpectedLoc = Tok;
431 }
432 
433 void PreferredTypeBuilder::enterParenExpr(SourceLocation Tok,
434                                           SourceLocation LParLoc) {
435   if (!Enabled)
436     return;
437   // expected type for parenthesized expression does not change.
438   if (ExpectedLoc == LParLoc)
439     ExpectedLoc = Tok;
440 }
441 
442 static QualType getPreferredTypeOfBinaryRHS(Sema &S, Expr *LHS,
443                                             tok::TokenKind Op) {
444   if (!LHS)
445     return QualType();
446 
447   QualType LHSType = LHS->getType();
448   if (LHSType->isPointerType()) {
449     if (Op == tok::plus || Op == tok::plusequal || Op == tok::minusequal)
450       return S.getASTContext().getPointerDiffType();
451     // Pointer difference is more common than subtracting an int from a pointer.
452     if (Op == tok::minus)
453       return LHSType;
454   }
455 
456   switch (Op) {
457   // No way to infer the type of RHS from LHS.
458   case tok::comma:
459     return QualType();
460   // Prefer the type of the left operand for all of these.
461   // Arithmetic operations.
462   case tok::plus:
463   case tok::plusequal:
464   case tok::minus:
465   case tok::minusequal:
466   case tok::percent:
467   case tok::percentequal:
468   case tok::slash:
469   case tok::slashequal:
470   case tok::star:
471   case tok::starequal:
472   // Assignment.
473   case tok::equal:
474   // Comparison operators.
475   case tok::equalequal:
476   case tok::exclaimequal:
477   case tok::less:
478   case tok::lessequal:
479   case tok::greater:
480   case tok::greaterequal:
481   case tok::spaceship:
482     return LHS->getType();
483   // Binary shifts are often overloaded, so don't try to guess those.
484   case tok::greatergreater:
485   case tok::greatergreaterequal:
486   case tok::lessless:
487   case tok::lesslessequal:
488     if (LHSType->isIntegralOrEnumerationType())
489       return S.getASTContext().IntTy;
490     return QualType();
491   // Logical operators, assume we want bool.
492   case tok::ampamp:
493   case tok::pipepipe:
494   case tok::caretcaret:
495     return S.getASTContext().BoolTy;
496   // Operators often used for bit manipulation are typically used with the type
497   // of the left argument.
498   case tok::pipe:
499   case tok::pipeequal:
500   case tok::caret:
501   case tok::caretequal:
502   case tok::amp:
503   case tok::ampequal:
504     if (LHSType->isIntegralOrEnumerationType())
505       return LHSType;
506     return QualType();
507   // RHS should be a pointer to a member of the 'LHS' type, but we can't give
508   // any particular type here.
509   case tok::periodstar:
510   case tok::arrowstar:
511     return QualType();
512   default:
513     // FIXME(ibiryukov): handle the missing op, re-add the assertion.
514     // assert(false && "unhandled binary op");
515     return QualType();
516   }
517 }
518 
519 /// Get preferred type for an argument of an unary expression. \p ContextType is
520 /// preferred type of the whole unary expression.
521 static QualType getPreferredTypeOfUnaryArg(Sema &S, QualType ContextType,
522                                            tok::TokenKind Op) {
523   switch (Op) {
524   case tok::exclaim:
525     return S.getASTContext().BoolTy;
526   case tok::amp:
527     if (!ContextType.isNull() && ContextType->isPointerType())
528       return ContextType->getPointeeType();
529     return QualType();
530   case tok::star:
531     if (ContextType.isNull())
532       return QualType();
533     return S.getASTContext().getPointerType(ContextType.getNonReferenceType());
534   case tok::plus:
535   case tok::minus:
536   case tok::tilde:
537   case tok::minusminus:
538   case tok::plusplus:
539     if (ContextType.isNull())
540       return S.getASTContext().IntTy;
541     // leave as is, these operators typically return the same type.
542     return ContextType;
543   case tok::kw___real:
544   case tok::kw___imag:
545     return QualType();
546   default:
547     assert(false && "unhandled unary op");
548     return QualType();
549   }
550 }
551 
552 void PreferredTypeBuilder::enterBinary(Sema &S, SourceLocation Tok, Expr *LHS,
553                                        tok::TokenKind Op) {
554   if (!Enabled)
555     return;
556   ComputeType = nullptr;
557   Type = getPreferredTypeOfBinaryRHS(S, LHS, Op);
558   ExpectedLoc = Tok;
559 }
560 
561 void PreferredTypeBuilder::enterMemAccess(Sema &S, SourceLocation Tok,
562                                           Expr *Base) {
563   if (!Enabled || !Base)
564     return;
565   // Do we have expected type for Base?
566   if (ExpectedLoc != Base->getBeginLoc())
567     return;
568   // Keep the expected type, only update the location.
569   ExpectedLoc = Tok;
570   return;
571 }
572 
573 void PreferredTypeBuilder::enterUnary(Sema &S, SourceLocation Tok,
574                                       tok::TokenKind OpKind,
575                                       SourceLocation OpLoc) {
576   if (!Enabled)
577     return;
578   ComputeType = nullptr;
579   Type = getPreferredTypeOfUnaryArg(S, this->get(OpLoc), OpKind);
580   ExpectedLoc = Tok;
581 }
582 
583 void PreferredTypeBuilder::enterSubscript(Sema &S, SourceLocation Tok,
584                                           Expr *LHS) {
585   if (!Enabled)
586     return;
587   ComputeType = nullptr;
588   Type = S.getASTContext().IntTy;
589   ExpectedLoc = Tok;
590 }
591 
592 void PreferredTypeBuilder::enterTypeCast(SourceLocation Tok,
593                                          QualType CastType) {
594   if (!Enabled)
595     return;
596   ComputeType = nullptr;
597   Type = !CastType.isNull() ? CastType.getCanonicalType() : QualType();
598   ExpectedLoc = Tok;
599 }
600 
601 void PreferredTypeBuilder::enterCondition(Sema &S, SourceLocation Tok) {
602   if (!Enabled)
603     return;
604   ComputeType = nullptr;
605   Type = S.getASTContext().BoolTy;
606   ExpectedLoc = Tok;
607 }
608 
609 class ResultBuilder::ShadowMapEntry::iterator {
610   llvm::PointerUnion<const NamedDecl *, const DeclIndexPair *> DeclOrIterator;
611   unsigned SingleDeclIndex;
612 
613 public:
614   typedef DeclIndexPair value_type;
615   typedef value_type reference;
616   typedef std::ptrdiff_t difference_type;
617   typedef std::input_iterator_tag iterator_category;
618 
619   class pointer {
620     DeclIndexPair Value;
621 
622   public:
623     pointer(const DeclIndexPair &Value) : Value(Value) {}
624 
625     const DeclIndexPair *operator->() const { return &Value; }
626   };
627 
628   iterator() : DeclOrIterator((NamedDecl *)nullptr), SingleDeclIndex(0) {}
629 
630   iterator(const NamedDecl *SingleDecl, unsigned Index)
631       : DeclOrIterator(SingleDecl), SingleDeclIndex(Index) {}
632 
633   iterator(const DeclIndexPair *Iterator)
634       : DeclOrIterator(Iterator), SingleDeclIndex(0) {}
635 
636   iterator &operator++() {
637     if (DeclOrIterator.is<const NamedDecl *>()) {
638       DeclOrIterator = (NamedDecl *)nullptr;
639       SingleDeclIndex = 0;
640       return *this;
641     }
642 
643     const DeclIndexPair *I = DeclOrIterator.get<const DeclIndexPair *>();
644     ++I;
645     DeclOrIterator = I;
646     return *this;
647   }
648 
649   /*iterator operator++(int) {
650     iterator tmp(*this);
651     ++(*this);
652     return tmp;
653   }*/
654 
655   reference operator*() const {
656     if (const NamedDecl *ND = DeclOrIterator.dyn_cast<const NamedDecl *>())
657       return reference(ND, SingleDeclIndex);
658 
659     return *DeclOrIterator.get<const DeclIndexPair *>();
660   }
661 
662   pointer operator->() const { return pointer(**this); }
663 
664   friend bool operator==(const iterator &X, const iterator &Y) {
665     return X.DeclOrIterator.getOpaqueValue() ==
666                Y.DeclOrIterator.getOpaqueValue() &&
667            X.SingleDeclIndex == Y.SingleDeclIndex;
668   }
669 
670   friend bool operator!=(const iterator &X, const iterator &Y) {
671     return !(X == Y);
672   }
673 };
674 
675 ResultBuilder::ShadowMapEntry::iterator
676 ResultBuilder::ShadowMapEntry::begin() const {
677   if (DeclOrVector.isNull())
678     return iterator();
679 
680   if (const NamedDecl *ND = DeclOrVector.dyn_cast<const NamedDecl *>())
681     return iterator(ND, SingleDeclIndex);
682 
683   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->begin());
684 }
685 
686 ResultBuilder::ShadowMapEntry::iterator
687 ResultBuilder::ShadowMapEntry::end() const {
688   if (DeclOrVector.is<const NamedDecl *>() || DeclOrVector.isNull())
689     return iterator();
690 
691   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->end());
692 }
693 
694 /// Compute the qualification required to get from the current context
695 /// (\p CurContext) to the target context (\p TargetContext).
696 ///
697 /// \param Context the AST context in which the qualification will be used.
698 ///
699 /// \param CurContext the context where an entity is being named, which is
700 /// typically based on the current scope.
701 ///
702 /// \param TargetContext the context in which the named entity actually
703 /// resides.
704 ///
705 /// \returns a nested name specifier that refers into the target context, or
706 /// NULL if no qualification is needed.
707 static NestedNameSpecifier *
708 getRequiredQualification(ASTContext &Context, const DeclContext *CurContext,
709                          const DeclContext *TargetContext) {
710   SmallVector<const DeclContext *, 4> TargetParents;
711 
712   for (const DeclContext *CommonAncestor = TargetContext;
713        CommonAncestor && !CommonAncestor->Encloses(CurContext);
714        CommonAncestor = CommonAncestor->getLookupParent()) {
715     if (CommonAncestor->isTransparentContext() ||
716         CommonAncestor->isFunctionOrMethod())
717       continue;
718 
719     TargetParents.push_back(CommonAncestor);
720   }
721 
722   NestedNameSpecifier *Result = nullptr;
723   while (!TargetParents.empty()) {
724     const DeclContext *Parent = TargetParents.pop_back_val();
725 
726     if (const auto *Namespace = dyn_cast<NamespaceDecl>(Parent)) {
727       if (!Namespace->getIdentifier())
728         continue;
729 
730       Result = NestedNameSpecifier::Create(Context, Result, Namespace);
731     } else if (const auto *TD = dyn_cast<TagDecl>(Parent))
732       Result = NestedNameSpecifier::Create(
733           Context, Result, false, Context.getTypeDeclType(TD).getTypePtr());
734   }
735   return Result;
736 }
737 
738 // Some declarations have reserved names that we don't want to ever show.
739 // Filter out names reserved for the implementation if they come from a
740 // system header.
741 static bool shouldIgnoreDueToReservedName(const NamedDecl *ND, Sema &SemaRef) {
742   ReservedIdentifierStatus Status = ND->isReserved(SemaRef.getLangOpts());
743   // Ignore reserved names for compiler provided decls.
744   if ((Status != ReservedIdentifierStatus::NotReserved) &&
745       (Status != ReservedIdentifierStatus::StartsWithUnderscoreAtGlobalScope) &&
746       ND->getLocation().isInvalid())
747     return true;
748 
749   // For system headers ignore only double-underscore names.
750   // This allows for system headers providing private symbols with a single
751   // underscore.
752   if (Status == ReservedIdentifierStatus::StartsWithDoubleUnderscore &&
753       SemaRef.SourceMgr.isInSystemHeader(
754           SemaRef.SourceMgr.getSpellingLoc(ND->getLocation())))
755     return true;
756 
757   return false;
758 }
759 
760 bool ResultBuilder::isInterestingDecl(const NamedDecl *ND,
761                                       bool &AsNestedNameSpecifier) const {
762   AsNestedNameSpecifier = false;
763 
764   auto *Named = ND;
765   ND = ND->getUnderlyingDecl();
766 
767   // Skip unnamed entities.
768   if (!ND->getDeclName())
769     return false;
770 
771   // Friend declarations and declarations introduced due to friends are never
772   // added as results.
773   if (ND->getFriendObjectKind() == Decl::FOK_Undeclared)
774     return false;
775 
776   // Class template (partial) specializations are never added as results.
777   if (isa<ClassTemplateSpecializationDecl>(ND) ||
778       isa<ClassTemplatePartialSpecializationDecl>(ND))
779     return false;
780 
781   // Using declarations themselves are never added as results.
782   if (isa<UsingDecl>(ND))
783     return false;
784 
785   if (shouldIgnoreDueToReservedName(ND, SemaRef))
786     return false;
787 
788   if (Filter == &ResultBuilder::IsNestedNameSpecifier ||
789       (isa<NamespaceDecl>(ND) && Filter != &ResultBuilder::IsNamespace &&
790        Filter != &ResultBuilder::IsNamespaceOrAlias && Filter != nullptr))
791     AsNestedNameSpecifier = true;
792 
793   // Filter out any unwanted results.
794   if (Filter && !(this->*Filter)(Named)) {
795     // Check whether it is interesting as a nested-name-specifier.
796     if (AllowNestedNameSpecifiers && SemaRef.getLangOpts().CPlusPlus &&
797         IsNestedNameSpecifier(ND) &&
798         (Filter != &ResultBuilder::IsMember ||
799          (isa<CXXRecordDecl>(ND) &&
800           cast<CXXRecordDecl>(ND)->isInjectedClassName()))) {
801       AsNestedNameSpecifier = true;
802       return true;
803     }
804 
805     return false;
806   }
807   // ... then it must be interesting!
808   return true;
809 }
810 
811 bool ResultBuilder::CheckHiddenResult(Result &R, DeclContext *CurContext,
812                                       const NamedDecl *Hiding) {
813   // In C, there is no way to refer to a hidden name.
814   // FIXME: This isn't true; we can find a tag name hidden by an ordinary
815   // name if we introduce the tag type.
816   if (!SemaRef.getLangOpts().CPlusPlus)
817     return true;
818 
819   const DeclContext *HiddenCtx =
820       R.Declaration->getDeclContext()->getRedeclContext();
821 
822   // There is no way to qualify a name declared in a function or method.
823   if (HiddenCtx->isFunctionOrMethod())
824     return true;
825 
826   if (HiddenCtx == Hiding->getDeclContext()->getRedeclContext())
827     return true;
828 
829   // We can refer to the result with the appropriate qualification. Do it.
830   R.Hidden = true;
831   R.QualifierIsInformative = false;
832 
833   if (!R.Qualifier)
834     R.Qualifier = getRequiredQualification(SemaRef.Context, CurContext,
835                                            R.Declaration->getDeclContext());
836   return false;
837 }
838 
839 /// A simplified classification of types used to determine whether two
840 /// types are "similar enough" when adjusting priorities.
841 SimplifiedTypeClass clang::getSimplifiedTypeClass(CanQualType T) {
842   switch (T->getTypeClass()) {
843   case Type::Builtin:
844     switch (cast<BuiltinType>(T)->getKind()) {
845     case BuiltinType::Void:
846       return STC_Void;
847 
848     case BuiltinType::NullPtr:
849       return STC_Pointer;
850 
851     case BuiltinType::Overload:
852     case BuiltinType::Dependent:
853       return STC_Other;
854 
855     case BuiltinType::ObjCId:
856     case BuiltinType::ObjCClass:
857     case BuiltinType::ObjCSel:
858       return STC_ObjectiveC;
859 
860     default:
861       return STC_Arithmetic;
862     }
863 
864   case Type::Complex:
865     return STC_Arithmetic;
866 
867   case Type::Pointer:
868     return STC_Pointer;
869 
870   case Type::BlockPointer:
871     return STC_Block;
872 
873   case Type::LValueReference:
874   case Type::RValueReference:
875     return getSimplifiedTypeClass(T->getAs<ReferenceType>()->getPointeeType());
876 
877   case Type::ConstantArray:
878   case Type::IncompleteArray:
879   case Type::VariableArray:
880   case Type::DependentSizedArray:
881     return STC_Array;
882 
883   case Type::DependentSizedExtVector:
884   case Type::Vector:
885   case Type::ExtVector:
886     return STC_Arithmetic;
887 
888   case Type::FunctionProto:
889   case Type::FunctionNoProto:
890     return STC_Function;
891 
892   case Type::Record:
893     return STC_Record;
894 
895   case Type::Enum:
896     return STC_Arithmetic;
897 
898   case Type::ObjCObject:
899   case Type::ObjCInterface:
900   case Type::ObjCObjectPointer:
901     return STC_ObjectiveC;
902 
903   default:
904     return STC_Other;
905   }
906 }
907 
908 /// Get the type that a given expression will have if this declaration
909 /// is used as an expression in its "typical" code-completion form.
910 QualType clang::getDeclUsageType(ASTContext &C, const NamedDecl *ND) {
911   ND = ND->getUnderlyingDecl();
912 
913   if (const auto *Type = dyn_cast<TypeDecl>(ND))
914     return C.getTypeDeclType(Type);
915   if (const auto *Iface = dyn_cast<ObjCInterfaceDecl>(ND))
916     return C.getObjCInterfaceType(Iface);
917 
918   QualType T;
919   if (const FunctionDecl *Function = ND->getAsFunction())
920     T = Function->getCallResultType();
921   else if (const auto *Method = dyn_cast<ObjCMethodDecl>(ND))
922     T = Method->getSendResultType();
923   else if (const auto *Enumerator = dyn_cast<EnumConstantDecl>(ND))
924     T = C.getTypeDeclType(cast<EnumDecl>(Enumerator->getDeclContext()));
925   else if (const auto *Property = dyn_cast<ObjCPropertyDecl>(ND))
926     T = Property->getType();
927   else if (const auto *Value = dyn_cast<ValueDecl>(ND))
928     T = Value->getType();
929 
930   if (T.isNull())
931     return QualType();
932 
933   // Dig through references, function pointers, and block pointers to
934   // get down to the likely type of an expression when the entity is
935   // used.
936   do {
937     if (const auto *Ref = T->getAs<ReferenceType>()) {
938       T = Ref->getPointeeType();
939       continue;
940     }
941 
942     if (const auto *Pointer = T->getAs<PointerType>()) {
943       if (Pointer->getPointeeType()->isFunctionType()) {
944         T = Pointer->getPointeeType();
945         continue;
946       }
947 
948       break;
949     }
950 
951     if (const auto *Block = T->getAs<BlockPointerType>()) {
952       T = Block->getPointeeType();
953       continue;
954     }
955 
956     if (const auto *Function = T->getAs<FunctionType>()) {
957       T = Function->getReturnType();
958       continue;
959     }
960 
961     break;
962   } while (true);
963 
964   return T;
965 }
966 
967 unsigned ResultBuilder::getBasePriority(const NamedDecl *ND) {
968   if (!ND)
969     return CCP_Unlikely;
970 
971   // Context-based decisions.
972   const DeclContext *LexicalDC = ND->getLexicalDeclContext();
973   if (LexicalDC->isFunctionOrMethod()) {
974     // _cmd is relatively rare
975     if (const auto *ImplicitParam = dyn_cast<ImplicitParamDecl>(ND))
976       if (ImplicitParam->getIdentifier() &&
977           ImplicitParam->getIdentifier()->isStr("_cmd"))
978         return CCP_ObjC_cmd;
979 
980     return CCP_LocalDeclaration;
981   }
982 
983   const DeclContext *DC = ND->getDeclContext()->getRedeclContext();
984   if (DC->isRecord() || isa<ObjCContainerDecl>(DC)) {
985     // Explicit destructor calls are very rare.
986     if (isa<CXXDestructorDecl>(ND))
987       return CCP_Unlikely;
988     // Explicit operator and conversion function calls are also very rare.
989     auto DeclNameKind = ND->getDeclName().getNameKind();
990     if (DeclNameKind == DeclarationName::CXXOperatorName ||
991         DeclNameKind == DeclarationName::CXXLiteralOperatorName ||
992         DeclNameKind == DeclarationName::CXXConversionFunctionName)
993       return CCP_Unlikely;
994     return CCP_MemberDeclaration;
995   }
996 
997   // Content-based decisions.
998   if (isa<EnumConstantDecl>(ND))
999     return CCP_Constant;
1000 
1001   // Use CCP_Type for type declarations unless we're in a statement, Objective-C
1002   // message receiver, or parenthesized expression context. There, it's as
1003   // likely that the user will want to write a type as other declarations.
1004   if ((isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND)) &&
1005       !(CompletionContext.getKind() == CodeCompletionContext::CCC_Statement ||
1006         CompletionContext.getKind() ==
1007             CodeCompletionContext::CCC_ObjCMessageReceiver ||
1008         CompletionContext.getKind() ==
1009             CodeCompletionContext::CCC_ParenthesizedExpression))
1010     return CCP_Type;
1011 
1012   return CCP_Declaration;
1013 }
1014 
1015 void ResultBuilder::AdjustResultPriorityForDecl(Result &R) {
1016   // If this is an Objective-C method declaration whose selector matches our
1017   // preferred selector, give it a priority boost.
1018   if (!PreferredSelector.isNull())
1019     if (const auto *Method = dyn_cast<ObjCMethodDecl>(R.Declaration))
1020       if (PreferredSelector == Method->getSelector())
1021         R.Priority += CCD_SelectorMatch;
1022 
1023   // If we have a preferred type, adjust the priority for results with exactly-
1024   // matching or nearly-matching types.
1025   if (!PreferredType.isNull()) {
1026     QualType T = getDeclUsageType(SemaRef.Context, R.Declaration);
1027     if (!T.isNull()) {
1028       CanQualType TC = SemaRef.Context.getCanonicalType(T);
1029       // Check for exactly-matching types (modulo qualifiers).
1030       if (SemaRef.Context.hasSameUnqualifiedType(PreferredType, TC))
1031         R.Priority /= CCF_ExactTypeMatch;
1032       // Check for nearly-matching types, based on classification of each.
1033       else if ((getSimplifiedTypeClass(PreferredType) ==
1034                 getSimplifiedTypeClass(TC)) &&
1035                !(PreferredType->isEnumeralType() && TC->isEnumeralType()))
1036         R.Priority /= CCF_SimilarTypeMatch;
1037     }
1038   }
1039 }
1040 
1041 static DeclContext::lookup_result getConstructors(ASTContext &Context,
1042                                                   const CXXRecordDecl *Record) {
1043   QualType RecordTy = Context.getTypeDeclType(Record);
1044   DeclarationName ConstructorName =
1045       Context.DeclarationNames.getCXXConstructorName(
1046           Context.getCanonicalType(RecordTy));
1047   return Record->lookup(ConstructorName);
1048 }
1049 
1050 void ResultBuilder::MaybeAddConstructorResults(Result R) {
1051   if (!SemaRef.getLangOpts().CPlusPlus || !R.Declaration ||
1052       !CompletionContext.wantConstructorResults())
1053     return;
1054 
1055   const NamedDecl *D = R.Declaration;
1056   const CXXRecordDecl *Record = nullptr;
1057   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(D))
1058     Record = ClassTemplate->getTemplatedDecl();
1059   else if ((Record = dyn_cast<CXXRecordDecl>(D))) {
1060     // Skip specializations and partial specializations.
1061     if (isa<ClassTemplateSpecializationDecl>(Record))
1062       return;
1063   } else {
1064     // There are no constructors here.
1065     return;
1066   }
1067 
1068   Record = Record->getDefinition();
1069   if (!Record)
1070     return;
1071 
1072   for (NamedDecl *Ctor : getConstructors(SemaRef.Context, Record)) {
1073     R.Declaration = Ctor;
1074     R.CursorKind = getCursorKindForDecl(R.Declaration);
1075     Results.push_back(R);
1076   }
1077 }
1078 
1079 static bool isConstructor(const Decl *ND) {
1080   if (const auto *Tmpl = dyn_cast<FunctionTemplateDecl>(ND))
1081     ND = Tmpl->getTemplatedDecl();
1082   return isa<CXXConstructorDecl>(ND);
1083 }
1084 
1085 void ResultBuilder::MaybeAddResult(Result R, DeclContext *CurContext) {
1086   assert(!ShadowMaps.empty() && "Must enter into a results scope");
1087 
1088   if (R.Kind != Result::RK_Declaration) {
1089     // For non-declaration results, just add the result.
1090     Results.push_back(R);
1091     return;
1092   }
1093 
1094   // Look through using declarations.
1095   if (const UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(R.Declaration)) {
1096     CodeCompletionResult Result(Using->getTargetDecl(),
1097                                 getBasePriority(Using->getTargetDecl()),
1098                                 R.Qualifier);
1099     Result.ShadowDecl = Using;
1100     MaybeAddResult(Result, CurContext);
1101     return;
1102   }
1103 
1104   const Decl *CanonDecl = R.Declaration->getCanonicalDecl();
1105   unsigned IDNS = CanonDecl->getIdentifierNamespace();
1106 
1107   bool AsNestedNameSpecifier = false;
1108   if (!isInterestingDecl(R.Declaration, AsNestedNameSpecifier))
1109     return;
1110 
1111   // C++ constructors are never found by name lookup.
1112   if (isConstructor(R.Declaration))
1113     return;
1114 
1115   ShadowMap &SMap = ShadowMaps.back();
1116   ShadowMapEntry::iterator I, IEnd;
1117   ShadowMap::iterator NamePos = SMap.find(R.Declaration->getDeclName());
1118   if (NamePos != SMap.end()) {
1119     I = NamePos->second.begin();
1120     IEnd = NamePos->second.end();
1121   }
1122 
1123   for (; I != IEnd; ++I) {
1124     const NamedDecl *ND = I->first;
1125     unsigned Index = I->second;
1126     if (ND->getCanonicalDecl() == CanonDecl) {
1127       // This is a redeclaration. Always pick the newer declaration.
1128       Results[Index].Declaration = R.Declaration;
1129 
1130       // We're done.
1131       return;
1132     }
1133   }
1134 
1135   // This is a new declaration in this scope. However, check whether this
1136   // declaration name is hidden by a similarly-named declaration in an outer
1137   // scope.
1138   std::list<ShadowMap>::iterator SM, SMEnd = ShadowMaps.end();
1139   --SMEnd;
1140   for (SM = ShadowMaps.begin(); SM != SMEnd; ++SM) {
1141     ShadowMapEntry::iterator I, IEnd;
1142     ShadowMap::iterator NamePos = SM->find(R.Declaration->getDeclName());
1143     if (NamePos != SM->end()) {
1144       I = NamePos->second.begin();
1145       IEnd = NamePos->second.end();
1146     }
1147     for (; I != IEnd; ++I) {
1148       // A tag declaration does not hide a non-tag declaration.
1149       if (I->first->hasTagIdentifierNamespace() &&
1150           (IDNS & (Decl::IDNS_Member | Decl::IDNS_Ordinary |
1151                    Decl::IDNS_LocalExtern | Decl::IDNS_ObjCProtocol)))
1152         continue;
1153 
1154       // Protocols are in distinct namespaces from everything else.
1155       if (((I->first->getIdentifierNamespace() & Decl::IDNS_ObjCProtocol) ||
1156            (IDNS & Decl::IDNS_ObjCProtocol)) &&
1157           I->first->getIdentifierNamespace() != IDNS)
1158         continue;
1159 
1160       // The newly-added result is hidden by an entry in the shadow map.
1161       if (CheckHiddenResult(R, CurContext, I->first))
1162         return;
1163 
1164       break;
1165     }
1166   }
1167 
1168   // Make sure that any given declaration only shows up in the result set once.
1169   if (!AllDeclsFound.insert(CanonDecl).second)
1170     return;
1171 
1172   // If the filter is for nested-name-specifiers, then this result starts a
1173   // nested-name-specifier.
1174   if (AsNestedNameSpecifier) {
1175     R.StartsNestedNameSpecifier = true;
1176     R.Priority = CCP_NestedNameSpecifier;
1177   } else
1178     AdjustResultPriorityForDecl(R);
1179 
1180   // If this result is supposed to have an informative qualifier, add one.
1181   if (R.QualifierIsInformative && !R.Qualifier &&
1182       !R.StartsNestedNameSpecifier) {
1183     const DeclContext *Ctx = R.Declaration->getDeclContext();
1184     if (const NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(Ctx))
1185       R.Qualifier =
1186           NestedNameSpecifier::Create(SemaRef.Context, nullptr, Namespace);
1187     else if (const TagDecl *Tag = dyn_cast<TagDecl>(Ctx))
1188       R.Qualifier = NestedNameSpecifier::Create(
1189           SemaRef.Context, nullptr, false,
1190           SemaRef.Context.getTypeDeclType(Tag).getTypePtr());
1191     else
1192       R.QualifierIsInformative = false;
1193   }
1194 
1195   // Insert this result into the set of results and into the current shadow
1196   // map.
1197   SMap[R.Declaration->getDeclName()].Add(R.Declaration, Results.size());
1198   Results.push_back(R);
1199 
1200   if (!AsNestedNameSpecifier)
1201     MaybeAddConstructorResults(R);
1202 }
1203 
1204 static void setInBaseClass(ResultBuilder::Result &R) {
1205   R.Priority += CCD_InBaseClass;
1206   R.InBaseClass = true;
1207 }
1208 
1209 enum class OverloadCompare { BothViable, Dominates, Dominated };
1210 // Will Candidate ever be called on the object, when overloaded with Incumbent?
1211 // Returns Dominates if Candidate is always called, Dominated if Incumbent is
1212 // always called, BothViable if either may be called dependending on arguments.
1213 // Precondition: must actually be overloads!
1214 static OverloadCompare compareOverloads(const CXXMethodDecl &Candidate,
1215                                         const CXXMethodDecl &Incumbent,
1216                                         const Qualifiers &ObjectQuals,
1217                                         ExprValueKind ObjectKind) {
1218   // Base/derived shadowing is handled elsewhere.
1219   if (Candidate.getDeclContext() != Incumbent.getDeclContext())
1220     return OverloadCompare::BothViable;
1221   if (Candidate.isVariadic() != Incumbent.isVariadic() ||
1222       Candidate.getNumParams() != Incumbent.getNumParams() ||
1223       Candidate.getMinRequiredArguments() !=
1224           Incumbent.getMinRequiredArguments())
1225     return OverloadCompare::BothViable;
1226   for (unsigned I = 0, E = Candidate.getNumParams(); I != E; ++I)
1227     if (Candidate.parameters()[I]->getType().getCanonicalType() !=
1228         Incumbent.parameters()[I]->getType().getCanonicalType())
1229       return OverloadCompare::BothViable;
1230   if (!llvm::empty(Candidate.specific_attrs<EnableIfAttr>()) ||
1231       !llvm::empty(Incumbent.specific_attrs<EnableIfAttr>()))
1232     return OverloadCompare::BothViable;
1233   // At this point, we know calls can't pick one or the other based on
1234   // arguments, so one of the two must win. (Or both fail, handled elsewhere).
1235   RefQualifierKind CandidateRef = Candidate.getRefQualifier();
1236   RefQualifierKind IncumbentRef = Incumbent.getRefQualifier();
1237   if (CandidateRef != IncumbentRef) {
1238     // If the object kind is LValue/RValue, there's one acceptable ref-qualifier
1239     // and it can't be mixed with ref-unqualified overloads (in valid code).
1240 
1241     // For xvalue objects, we prefer the rvalue overload even if we have to
1242     // add qualifiers (which is rare, because const&& is rare).
1243     if (ObjectKind == clang::VK_XValue)
1244       return CandidateRef == RQ_RValue ? OverloadCompare::Dominates
1245                                        : OverloadCompare::Dominated;
1246   }
1247   // Now the ref qualifiers are the same (or we're in some invalid state).
1248   // So make some decision based on the qualifiers.
1249   Qualifiers CandidateQual = Candidate.getMethodQualifiers();
1250   Qualifiers IncumbentQual = Incumbent.getMethodQualifiers();
1251   bool CandidateSuperset = CandidateQual.compatiblyIncludes(IncumbentQual);
1252   bool IncumbentSuperset = IncumbentQual.compatiblyIncludes(CandidateQual);
1253   if (CandidateSuperset == IncumbentSuperset)
1254     return OverloadCompare::BothViable;
1255   return IncumbentSuperset ? OverloadCompare::Dominates
1256                            : OverloadCompare::Dominated;
1257 }
1258 
1259 void ResultBuilder::AddResult(Result R, DeclContext *CurContext,
1260                               NamedDecl *Hiding, bool InBaseClass = false) {
1261   if (R.Kind != Result::RK_Declaration) {
1262     // For non-declaration results, just add the result.
1263     Results.push_back(R);
1264     return;
1265   }
1266 
1267   // Look through using declarations.
1268   if (const auto *Using = dyn_cast<UsingShadowDecl>(R.Declaration)) {
1269     CodeCompletionResult Result(Using->getTargetDecl(),
1270                                 getBasePriority(Using->getTargetDecl()),
1271                                 R.Qualifier);
1272     Result.ShadowDecl = Using;
1273     AddResult(Result, CurContext, Hiding);
1274     return;
1275   }
1276 
1277   bool AsNestedNameSpecifier = false;
1278   if (!isInterestingDecl(R.Declaration, AsNestedNameSpecifier))
1279     return;
1280 
1281   // C++ constructors are never found by name lookup.
1282   if (isConstructor(R.Declaration))
1283     return;
1284 
1285   if (Hiding && CheckHiddenResult(R, CurContext, Hiding))
1286     return;
1287 
1288   // Make sure that any given declaration only shows up in the result set once.
1289   if (!AllDeclsFound.insert(R.Declaration->getCanonicalDecl()).second)
1290     return;
1291 
1292   // If the filter is for nested-name-specifiers, then this result starts a
1293   // nested-name-specifier.
1294   if (AsNestedNameSpecifier) {
1295     R.StartsNestedNameSpecifier = true;
1296     R.Priority = CCP_NestedNameSpecifier;
1297   } else if (Filter == &ResultBuilder::IsMember && !R.Qualifier &&
1298              InBaseClass &&
1299              isa<CXXRecordDecl>(
1300                  R.Declaration->getDeclContext()->getRedeclContext()))
1301     R.QualifierIsInformative = true;
1302 
1303   // If this result is supposed to have an informative qualifier, add one.
1304   if (R.QualifierIsInformative && !R.Qualifier &&
1305       !R.StartsNestedNameSpecifier) {
1306     const DeclContext *Ctx = R.Declaration->getDeclContext();
1307     if (const auto *Namespace = dyn_cast<NamespaceDecl>(Ctx))
1308       R.Qualifier =
1309           NestedNameSpecifier::Create(SemaRef.Context, nullptr, Namespace);
1310     else if (const auto *Tag = dyn_cast<TagDecl>(Ctx))
1311       R.Qualifier = NestedNameSpecifier::Create(
1312           SemaRef.Context, nullptr, false,
1313           SemaRef.Context.getTypeDeclType(Tag).getTypePtr());
1314     else
1315       R.QualifierIsInformative = false;
1316   }
1317 
1318   // Adjust the priority if this result comes from a base class.
1319   if (InBaseClass)
1320     setInBaseClass(R);
1321 
1322   AdjustResultPriorityForDecl(R);
1323 
1324   if (HasObjectTypeQualifiers)
1325     if (const auto *Method = dyn_cast<CXXMethodDecl>(R.Declaration))
1326       if (Method->isInstance()) {
1327         Qualifiers MethodQuals = Method->getMethodQualifiers();
1328         if (ObjectTypeQualifiers == MethodQuals)
1329           R.Priority += CCD_ObjectQualifierMatch;
1330         else if (ObjectTypeQualifiers - MethodQuals) {
1331           // The method cannot be invoked, because doing so would drop
1332           // qualifiers.
1333           return;
1334         }
1335         // Detect cases where a ref-qualified method cannot be invoked.
1336         switch (Method->getRefQualifier()) {
1337           case RQ_LValue:
1338             if (ObjectKind != VK_LValue && !MethodQuals.hasConst())
1339               return;
1340             break;
1341           case RQ_RValue:
1342             if (ObjectKind == VK_LValue)
1343               return;
1344             break;
1345           case RQ_None:
1346             break;
1347         }
1348 
1349         /// Check whether this dominates another overloaded method, which should
1350         /// be suppressed (or vice versa).
1351         /// Motivating case is const_iterator begin() const vs iterator begin().
1352         auto &OverloadSet = OverloadMap[std::make_pair(
1353             CurContext, Method->getDeclName().getAsOpaqueInteger())];
1354         for (const DeclIndexPair Entry : OverloadSet) {
1355           Result &Incumbent = Results[Entry.second];
1356           switch (compareOverloads(*Method,
1357                                    *cast<CXXMethodDecl>(Incumbent.Declaration),
1358                                    ObjectTypeQualifiers, ObjectKind)) {
1359           case OverloadCompare::Dominates:
1360             // Replace the dominated overload with this one.
1361             // FIXME: if the overload dominates multiple incumbents then we
1362             // should remove all. But two overloads is by far the common case.
1363             Incumbent = std::move(R);
1364             return;
1365           case OverloadCompare::Dominated:
1366             // This overload can't be called, drop it.
1367             return;
1368           case OverloadCompare::BothViable:
1369             break;
1370           }
1371         }
1372         OverloadSet.Add(Method, Results.size());
1373       }
1374 
1375   // Insert this result into the set of results.
1376   Results.push_back(R);
1377 
1378   if (!AsNestedNameSpecifier)
1379     MaybeAddConstructorResults(R);
1380 }
1381 
1382 void ResultBuilder::AddResult(Result R) {
1383   assert(R.Kind != Result::RK_Declaration &&
1384          "Declaration results need more context");
1385   Results.push_back(R);
1386 }
1387 
1388 /// Enter into a new scope.
1389 void ResultBuilder::EnterNewScope() { ShadowMaps.emplace_back(); }
1390 
1391 /// Exit from the current scope.
1392 void ResultBuilder::ExitScope() {
1393   ShadowMaps.pop_back();
1394 }
1395 
1396 /// Determines whether this given declaration will be found by
1397 /// ordinary name lookup.
1398 bool ResultBuilder::IsOrdinaryName(const NamedDecl *ND) const {
1399   ND = ND->getUnderlyingDecl();
1400 
1401   // If name lookup finds a local extern declaration, then we are in a
1402   // context where it behaves like an ordinary name.
1403   unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_LocalExtern;
1404   if (SemaRef.getLangOpts().CPlusPlus)
1405     IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace | Decl::IDNS_Member;
1406   else if (SemaRef.getLangOpts().ObjC) {
1407     if (isa<ObjCIvarDecl>(ND))
1408       return true;
1409   }
1410 
1411   return ND->getIdentifierNamespace() & IDNS;
1412 }
1413 
1414 /// Determines whether this given declaration will be found by
1415 /// ordinary name lookup but is not a type name.
1416 bool ResultBuilder::IsOrdinaryNonTypeName(const NamedDecl *ND) const {
1417   ND = ND->getUnderlyingDecl();
1418   if (isa<TypeDecl>(ND))
1419     return false;
1420   // Objective-C interfaces names are not filtered by this method because they
1421   // can be used in a class property expression. We can still filter out
1422   // @class declarations though.
1423   if (const auto *ID = dyn_cast<ObjCInterfaceDecl>(ND)) {
1424     if (!ID->getDefinition())
1425       return false;
1426   }
1427 
1428   unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_LocalExtern;
1429   if (SemaRef.getLangOpts().CPlusPlus)
1430     IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace | Decl::IDNS_Member;
1431   else if (SemaRef.getLangOpts().ObjC) {
1432     if (isa<ObjCIvarDecl>(ND))
1433       return true;
1434   }
1435 
1436   return ND->getIdentifierNamespace() & IDNS;
1437 }
1438 
1439 bool ResultBuilder::IsIntegralConstantValue(const NamedDecl *ND) const {
1440   if (!IsOrdinaryNonTypeName(ND))
1441     return 0;
1442 
1443   if (const auto *VD = dyn_cast<ValueDecl>(ND->getUnderlyingDecl()))
1444     if (VD->getType()->isIntegralOrEnumerationType())
1445       return true;
1446 
1447   return false;
1448 }
1449 
1450 /// Determines whether this given declaration will be found by
1451 /// ordinary name lookup.
1452 bool ResultBuilder::IsOrdinaryNonValueName(const NamedDecl *ND) const {
1453   ND = ND->getUnderlyingDecl();
1454 
1455   unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_LocalExtern;
1456   if (SemaRef.getLangOpts().CPlusPlus)
1457     IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace;
1458 
1459   return (ND->getIdentifierNamespace() & IDNS) && !isa<ValueDecl>(ND) &&
1460          !isa<FunctionTemplateDecl>(ND) && !isa<ObjCPropertyDecl>(ND);
1461 }
1462 
1463 /// Determines whether the given declaration is suitable as the
1464 /// start of a C++ nested-name-specifier, e.g., a class or namespace.
1465 bool ResultBuilder::IsNestedNameSpecifier(const NamedDecl *ND) const {
1466   // Allow us to find class templates, too.
1467   if (const auto *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
1468     ND = ClassTemplate->getTemplatedDecl();
1469 
1470   return SemaRef.isAcceptableNestedNameSpecifier(ND);
1471 }
1472 
1473 /// Determines whether the given declaration is an enumeration.
1474 bool ResultBuilder::IsEnum(const NamedDecl *ND) const {
1475   return isa<EnumDecl>(ND);
1476 }
1477 
1478 /// Determines whether the given declaration is a class or struct.
1479 bool ResultBuilder::IsClassOrStruct(const NamedDecl *ND) const {
1480   // Allow us to find class templates, too.
1481   if (const auto *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
1482     ND = ClassTemplate->getTemplatedDecl();
1483 
1484   // For purposes of this check, interfaces match too.
1485   if (const auto *RD = dyn_cast<RecordDecl>(ND))
1486     return RD->getTagKind() == TTK_Class || RD->getTagKind() == TTK_Struct ||
1487            RD->getTagKind() == TTK_Interface;
1488 
1489   return false;
1490 }
1491 
1492 /// Determines whether the given declaration is a union.
1493 bool ResultBuilder::IsUnion(const NamedDecl *ND) const {
1494   // Allow us to find class templates, too.
1495   if (const auto *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
1496     ND = ClassTemplate->getTemplatedDecl();
1497 
1498   if (const auto *RD = dyn_cast<RecordDecl>(ND))
1499     return RD->getTagKind() == TTK_Union;
1500 
1501   return false;
1502 }
1503 
1504 /// Determines whether the given declaration is a namespace.
1505 bool ResultBuilder::IsNamespace(const NamedDecl *ND) const {
1506   return isa<NamespaceDecl>(ND);
1507 }
1508 
1509 /// Determines whether the given declaration is a namespace or
1510 /// namespace alias.
1511 bool ResultBuilder::IsNamespaceOrAlias(const NamedDecl *ND) const {
1512   return isa<NamespaceDecl>(ND->getUnderlyingDecl());
1513 }
1514 
1515 /// Determines whether the given declaration is a type.
1516 bool ResultBuilder::IsType(const NamedDecl *ND) const {
1517   ND = ND->getUnderlyingDecl();
1518   return isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND);
1519 }
1520 
1521 /// Determines which members of a class should be visible via
1522 /// "." or "->".  Only value declarations, nested name specifiers, and
1523 /// using declarations thereof should show up.
1524 bool ResultBuilder::IsMember(const NamedDecl *ND) const {
1525   ND = ND->getUnderlyingDecl();
1526   return isa<ValueDecl>(ND) || isa<FunctionTemplateDecl>(ND) ||
1527          isa<ObjCPropertyDecl>(ND);
1528 }
1529 
1530 static bool isObjCReceiverType(ASTContext &C, QualType T) {
1531   T = C.getCanonicalType(T);
1532   switch (T->getTypeClass()) {
1533   case Type::ObjCObject:
1534   case Type::ObjCInterface:
1535   case Type::ObjCObjectPointer:
1536     return true;
1537 
1538   case Type::Builtin:
1539     switch (cast<BuiltinType>(T)->getKind()) {
1540     case BuiltinType::ObjCId:
1541     case BuiltinType::ObjCClass:
1542     case BuiltinType::ObjCSel:
1543       return true;
1544 
1545     default:
1546       break;
1547     }
1548     return false;
1549 
1550   default:
1551     break;
1552   }
1553 
1554   if (!C.getLangOpts().CPlusPlus)
1555     return false;
1556 
1557   // FIXME: We could perform more analysis here to determine whether a
1558   // particular class type has any conversions to Objective-C types. For now,
1559   // just accept all class types.
1560   return T->isDependentType() || T->isRecordType();
1561 }
1562 
1563 bool ResultBuilder::IsObjCMessageReceiver(const NamedDecl *ND) const {
1564   QualType T = getDeclUsageType(SemaRef.Context, ND);
1565   if (T.isNull())
1566     return false;
1567 
1568   T = SemaRef.Context.getBaseElementType(T);
1569   return isObjCReceiverType(SemaRef.Context, T);
1570 }
1571 
1572 bool ResultBuilder::IsObjCMessageReceiverOrLambdaCapture(
1573     const NamedDecl *ND) const {
1574   if (IsObjCMessageReceiver(ND))
1575     return true;
1576 
1577   const auto *Var = dyn_cast<VarDecl>(ND);
1578   if (!Var)
1579     return false;
1580 
1581   return Var->hasLocalStorage() && !Var->hasAttr<BlocksAttr>();
1582 }
1583 
1584 bool ResultBuilder::IsObjCCollection(const NamedDecl *ND) const {
1585   if ((SemaRef.getLangOpts().CPlusPlus && !IsOrdinaryName(ND)) ||
1586       (!SemaRef.getLangOpts().CPlusPlus && !IsOrdinaryNonTypeName(ND)))
1587     return false;
1588 
1589   QualType T = getDeclUsageType(SemaRef.Context, ND);
1590   if (T.isNull())
1591     return false;
1592 
1593   T = SemaRef.Context.getBaseElementType(T);
1594   return T->isObjCObjectType() || T->isObjCObjectPointerType() ||
1595          T->isObjCIdType() ||
1596          (SemaRef.getLangOpts().CPlusPlus && T->isRecordType());
1597 }
1598 
1599 bool ResultBuilder::IsImpossibleToSatisfy(const NamedDecl *ND) const {
1600   return false;
1601 }
1602 
1603 /// Determines whether the given declaration is an Objective-C
1604 /// instance variable.
1605 bool ResultBuilder::IsObjCIvar(const NamedDecl *ND) const {
1606   return isa<ObjCIvarDecl>(ND);
1607 }
1608 
1609 namespace {
1610 
1611 /// Visible declaration consumer that adds a code-completion result
1612 /// for each visible declaration.
1613 class CodeCompletionDeclConsumer : public VisibleDeclConsumer {
1614   ResultBuilder &Results;
1615   DeclContext *InitialLookupCtx;
1616   // NamingClass and BaseType are used for access-checking. See
1617   // Sema::IsSimplyAccessible for details.
1618   CXXRecordDecl *NamingClass;
1619   QualType BaseType;
1620   std::vector<FixItHint> FixIts;
1621 
1622 public:
1623   CodeCompletionDeclConsumer(
1624       ResultBuilder &Results, DeclContext *InitialLookupCtx,
1625       QualType BaseType = QualType(),
1626       std::vector<FixItHint> FixIts = std::vector<FixItHint>())
1627       : Results(Results), InitialLookupCtx(InitialLookupCtx),
1628         FixIts(std::move(FixIts)) {
1629     NamingClass = llvm::dyn_cast<CXXRecordDecl>(InitialLookupCtx);
1630     // If BaseType was not provided explicitly, emulate implicit 'this->'.
1631     if (BaseType.isNull()) {
1632       auto ThisType = Results.getSema().getCurrentThisType();
1633       if (!ThisType.isNull()) {
1634         assert(ThisType->isPointerType());
1635         BaseType = ThisType->getPointeeType();
1636         if (!NamingClass)
1637           NamingClass = BaseType->getAsCXXRecordDecl();
1638       }
1639     }
1640     this->BaseType = BaseType;
1641   }
1642 
1643   void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx,
1644                  bool InBaseClass) override {
1645     ResultBuilder::Result Result(ND, Results.getBasePriority(ND), nullptr,
1646                                  false, IsAccessible(ND, Ctx), FixIts);
1647     Results.AddResult(Result, InitialLookupCtx, Hiding, InBaseClass);
1648   }
1649 
1650   void EnteredContext(DeclContext *Ctx) override {
1651     Results.addVisitedContext(Ctx);
1652   }
1653 
1654 private:
1655   bool IsAccessible(NamedDecl *ND, DeclContext *Ctx) {
1656     // Naming class to use for access check. In most cases it was provided
1657     // explicitly (e.g. member access (lhs.foo) or qualified lookup (X::)),
1658     // for unqualified lookup we fallback to the \p Ctx in which we found the
1659     // member.
1660     auto *NamingClass = this->NamingClass;
1661     QualType BaseType = this->BaseType;
1662     if (auto *Cls = llvm::dyn_cast_or_null<CXXRecordDecl>(Ctx)) {
1663       if (!NamingClass)
1664         NamingClass = Cls;
1665       // When we emulate implicit 'this->' in an unqualified lookup, we might
1666       // end up with an invalid naming class. In that case, we avoid emulating
1667       // 'this->' qualifier to satisfy preconditions of the access checking.
1668       if (NamingClass->getCanonicalDecl() != Cls->getCanonicalDecl() &&
1669           !NamingClass->isDerivedFrom(Cls)) {
1670         NamingClass = Cls;
1671         BaseType = QualType();
1672       }
1673     } else {
1674       // The decl was found outside the C++ class, so only ObjC access checks
1675       // apply. Those do not rely on NamingClass and BaseType, so we clear them
1676       // out.
1677       NamingClass = nullptr;
1678       BaseType = QualType();
1679     }
1680     return Results.getSema().IsSimplyAccessible(ND, NamingClass, BaseType);
1681   }
1682 };
1683 } // namespace
1684 
1685 /// Add type specifiers for the current language as keyword results.
1686 static void AddTypeSpecifierResults(const LangOptions &LangOpts,
1687                                     ResultBuilder &Results) {
1688   typedef CodeCompletionResult Result;
1689   Results.AddResult(Result("short", CCP_Type));
1690   Results.AddResult(Result("long", CCP_Type));
1691   Results.AddResult(Result("signed", CCP_Type));
1692   Results.AddResult(Result("unsigned", CCP_Type));
1693   Results.AddResult(Result("void", CCP_Type));
1694   Results.AddResult(Result("char", CCP_Type));
1695   Results.AddResult(Result("int", CCP_Type));
1696   Results.AddResult(Result("float", CCP_Type));
1697   Results.AddResult(Result("double", CCP_Type));
1698   Results.AddResult(Result("enum", CCP_Type));
1699   Results.AddResult(Result("struct", CCP_Type));
1700   Results.AddResult(Result("union", CCP_Type));
1701   Results.AddResult(Result("const", CCP_Type));
1702   Results.AddResult(Result("volatile", CCP_Type));
1703 
1704   if (LangOpts.C99) {
1705     // C99-specific
1706     Results.AddResult(Result("_Complex", CCP_Type));
1707     Results.AddResult(Result("_Imaginary", CCP_Type));
1708     Results.AddResult(Result("_Bool", CCP_Type));
1709     Results.AddResult(Result("restrict", CCP_Type));
1710   }
1711 
1712   CodeCompletionBuilder Builder(Results.getAllocator(),
1713                                 Results.getCodeCompletionTUInfo());
1714   if (LangOpts.CPlusPlus) {
1715     // C++-specific
1716     Results.AddResult(
1717         Result("bool", CCP_Type + (LangOpts.ObjC ? CCD_bool_in_ObjC : 0)));
1718     Results.AddResult(Result("class", CCP_Type));
1719     Results.AddResult(Result("wchar_t", CCP_Type));
1720 
1721     // typename name
1722     Builder.AddTypedTextChunk("typename");
1723     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1724     Builder.AddPlaceholderChunk("name");
1725     Results.AddResult(Result(Builder.TakeString()));
1726 
1727     if (LangOpts.CPlusPlus11) {
1728       Results.AddResult(Result("auto", CCP_Type));
1729       Results.AddResult(Result("char16_t", CCP_Type));
1730       Results.AddResult(Result("char32_t", CCP_Type));
1731 
1732       Builder.AddTypedTextChunk("decltype");
1733       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1734       Builder.AddPlaceholderChunk("expression");
1735       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1736       Results.AddResult(Result(Builder.TakeString()));
1737     }
1738   } else
1739     Results.AddResult(Result("__auto_type", CCP_Type));
1740 
1741   // GNU keywords
1742   if (LangOpts.GNUKeywords) {
1743     // FIXME: Enable when we actually support decimal floating point.
1744     //    Results.AddResult(Result("_Decimal32"));
1745     //    Results.AddResult(Result("_Decimal64"));
1746     //    Results.AddResult(Result("_Decimal128"));
1747 
1748     Builder.AddTypedTextChunk("typeof");
1749     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1750     Builder.AddPlaceholderChunk("expression");
1751     Results.AddResult(Result(Builder.TakeString()));
1752 
1753     Builder.AddTypedTextChunk("typeof");
1754     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1755     Builder.AddPlaceholderChunk("type");
1756     Builder.AddChunk(CodeCompletionString::CK_RightParen);
1757     Results.AddResult(Result(Builder.TakeString()));
1758   }
1759 
1760   // Nullability
1761   Results.AddResult(Result("_Nonnull", CCP_Type));
1762   Results.AddResult(Result("_Null_unspecified", CCP_Type));
1763   Results.AddResult(Result("_Nullable", CCP_Type));
1764 }
1765 
1766 static void AddStorageSpecifiers(Sema::ParserCompletionContext CCC,
1767                                  const LangOptions &LangOpts,
1768                                  ResultBuilder &Results) {
1769   typedef CodeCompletionResult Result;
1770   // Note: we don't suggest either "auto" or "register", because both
1771   // are pointless as storage specifiers. Elsewhere, we suggest "auto"
1772   // in C++0x as a type specifier.
1773   Results.AddResult(Result("extern"));
1774   Results.AddResult(Result("static"));
1775 
1776   if (LangOpts.CPlusPlus11) {
1777     CodeCompletionAllocator &Allocator = Results.getAllocator();
1778     CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
1779 
1780     // alignas
1781     Builder.AddTypedTextChunk("alignas");
1782     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1783     Builder.AddPlaceholderChunk("expression");
1784     Builder.AddChunk(CodeCompletionString::CK_RightParen);
1785     Results.AddResult(Result(Builder.TakeString()));
1786 
1787     Results.AddResult(Result("constexpr"));
1788     Results.AddResult(Result("thread_local"));
1789   }
1790 }
1791 
1792 static void AddFunctionSpecifiers(Sema::ParserCompletionContext CCC,
1793                                   const LangOptions &LangOpts,
1794                                   ResultBuilder &Results) {
1795   typedef CodeCompletionResult Result;
1796   switch (CCC) {
1797   case Sema::PCC_Class:
1798   case Sema::PCC_MemberTemplate:
1799     if (LangOpts.CPlusPlus) {
1800       Results.AddResult(Result("explicit"));
1801       Results.AddResult(Result("friend"));
1802       Results.AddResult(Result("mutable"));
1803       Results.AddResult(Result("virtual"));
1804     }
1805     LLVM_FALLTHROUGH;
1806 
1807   case Sema::PCC_ObjCInterface:
1808   case Sema::PCC_ObjCImplementation:
1809   case Sema::PCC_Namespace:
1810   case Sema::PCC_Template:
1811     if (LangOpts.CPlusPlus || LangOpts.C99)
1812       Results.AddResult(Result("inline"));
1813     break;
1814 
1815   case Sema::PCC_ObjCInstanceVariableList:
1816   case Sema::PCC_Expression:
1817   case Sema::PCC_Statement:
1818   case Sema::PCC_ForInit:
1819   case Sema::PCC_Condition:
1820   case Sema::PCC_RecoveryInFunction:
1821   case Sema::PCC_Type:
1822   case Sema::PCC_ParenthesizedExpression:
1823   case Sema::PCC_LocalDeclarationSpecifiers:
1824     break;
1825   }
1826 }
1827 
1828 static void AddObjCExpressionResults(ResultBuilder &Results, bool NeedAt);
1829 static void AddObjCStatementResults(ResultBuilder &Results, bool NeedAt);
1830 static void AddObjCVisibilityResults(const LangOptions &LangOpts,
1831                                      ResultBuilder &Results, bool NeedAt);
1832 static void AddObjCImplementationResults(const LangOptions &LangOpts,
1833                                          ResultBuilder &Results, bool NeedAt);
1834 static void AddObjCInterfaceResults(const LangOptions &LangOpts,
1835                                     ResultBuilder &Results, bool NeedAt);
1836 static void AddObjCTopLevelResults(ResultBuilder &Results, bool NeedAt);
1837 
1838 static void AddTypedefResult(ResultBuilder &Results) {
1839   CodeCompletionBuilder Builder(Results.getAllocator(),
1840                                 Results.getCodeCompletionTUInfo());
1841   Builder.AddTypedTextChunk("typedef");
1842   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1843   Builder.AddPlaceholderChunk("type");
1844   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1845   Builder.AddPlaceholderChunk("name");
1846   Builder.AddChunk(CodeCompletionString::CK_SemiColon);
1847   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
1848 }
1849 
1850 // using name = type
1851 static void AddUsingAliasResult(CodeCompletionBuilder &Builder,
1852                                 ResultBuilder &Results) {
1853   Builder.AddTypedTextChunk("using");
1854   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1855   Builder.AddPlaceholderChunk("name");
1856   Builder.AddChunk(CodeCompletionString::CK_Equal);
1857   Builder.AddPlaceholderChunk("type");
1858   Builder.AddChunk(CodeCompletionString::CK_SemiColon);
1859   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
1860 }
1861 
1862 static bool WantTypesInContext(Sema::ParserCompletionContext CCC,
1863                                const LangOptions &LangOpts) {
1864   switch (CCC) {
1865   case Sema::PCC_Namespace:
1866   case Sema::PCC_Class:
1867   case Sema::PCC_ObjCInstanceVariableList:
1868   case Sema::PCC_Template:
1869   case Sema::PCC_MemberTemplate:
1870   case Sema::PCC_Statement:
1871   case Sema::PCC_RecoveryInFunction:
1872   case Sema::PCC_Type:
1873   case Sema::PCC_ParenthesizedExpression:
1874   case Sema::PCC_LocalDeclarationSpecifiers:
1875     return true;
1876 
1877   case Sema::PCC_Expression:
1878   case Sema::PCC_Condition:
1879     return LangOpts.CPlusPlus;
1880 
1881   case Sema::PCC_ObjCInterface:
1882   case Sema::PCC_ObjCImplementation:
1883     return false;
1884 
1885   case Sema::PCC_ForInit:
1886     return LangOpts.CPlusPlus || LangOpts.ObjC || LangOpts.C99;
1887   }
1888 
1889   llvm_unreachable("Invalid ParserCompletionContext!");
1890 }
1891 
1892 static PrintingPolicy getCompletionPrintingPolicy(const ASTContext &Context,
1893                                                   const Preprocessor &PP) {
1894   PrintingPolicy Policy = Sema::getPrintingPolicy(Context, PP);
1895   Policy.AnonymousTagLocations = false;
1896   Policy.SuppressStrongLifetime = true;
1897   Policy.SuppressUnwrittenScope = true;
1898   Policy.SuppressScope = true;
1899   return Policy;
1900 }
1901 
1902 /// Retrieve a printing policy suitable for code completion.
1903 static PrintingPolicy getCompletionPrintingPolicy(Sema &S) {
1904   return getCompletionPrintingPolicy(S.Context, S.PP);
1905 }
1906 
1907 /// Retrieve the string representation of the given type as a string
1908 /// that has the appropriate lifetime for code completion.
1909 ///
1910 /// This routine provides a fast path where we provide constant strings for
1911 /// common type names.
1912 static const char *GetCompletionTypeString(QualType T, ASTContext &Context,
1913                                            const PrintingPolicy &Policy,
1914                                            CodeCompletionAllocator &Allocator) {
1915   if (!T.getLocalQualifiers()) {
1916     // Built-in type names are constant strings.
1917     if (const BuiltinType *BT = dyn_cast<BuiltinType>(T))
1918       return BT->getNameAsCString(Policy);
1919 
1920     // Anonymous tag types are constant strings.
1921     if (const TagType *TagT = dyn_cast<TagType>(T))
1922       if (TagDecl *Tag = TagT->getDecl())
1923         if (!Tag->hasNameForLinkage()) {
1924           switch (Tag->getTagKind()) {
1925           case TTK_Struct:
1926             return "struct <anonymous>";
1927           case TTK_Interface:
1928             return "__interface <anonymous>";
1929           case TTK_Class:
1930             return "class <anonymous>";
1931           case TTK_Union:
1932             return "union <anonymous>";
1933           case TTK_Enum:
1934             return "enum <anonymous>";
1935           }
1936         }
1937   }
1938 
1939   // Slow path: format the type as a string.
1940   std::string Result;
1941   T.getAsStringInternal(Result, Policy);
1942   return Allocator.CopyString(Result);
1943 }
1944 
1945 /// Add a completion for "this", if we're in a member function.
1946 static void addThisCompletion(Sema &S, ResultBuilder &Results) {
1947   QualType ThisTy = S.getCurrentThisType();
1948   if (ThisTy.isNull())
1949     return;
1950 
1951   CodeCompletionAllocator &Allocator = Results.getAllocator();
1952   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
1953   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
1954   Builder.AddResultTypeChunk(
1955       GetCompletionTypeString(ThisTy, S.Context, Policy, Allocator));
1956   Builder.AddTypedTextChunk("this");
1957   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
1958 }
1959 
1960 static void AddStaticAssertResult(CodeCompletionBuilder &Builder,
1961                                   ResultBuilder &Results,
1962                                   const LangOptions &LangOpts) {
1963   if (!LangOpts.CPlusPlus11)
1964     return;
1965 
1966   Builder.AddTypedTextChunk("static_assert");
1967   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1968   Builder.AddPlaceholderChunk("expression");
1969   Builder.AddChunk(CodeCompletionString::CK_Comma);
1970   Builder.AddPlaceholderChunk("message");
1971   Builder.AddChunk(CodeCompletionString::CK_RightParen);
1972   Builder.AddChunk(CodeCompletionString::CK_SemiColon);
1973   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
1974 }
1975 
1976 static void AddOverrideResults(ResultBuilder &Results,
1977                                const CodeCompletionContext &CCContext,
1978                                CodeCompletionBuilder &Builder) {
1979   Sema &S = Results.getSema();
1980   const auto *CR = llvm::dyn_cast<CXXRecordDecl>(S.CurContext);
1981   // If not inside a class/struct/union return empty.
1982   if (!CR)
1983     return;
1984   // First store overrides within current class.
1985   // These are stored by name to make querying fast in the later step.
1986   llvm::StringMap<std::vector<FunctionDecl *>> Overrides;
1987   for (auto *Method : CR->methods()) {
1988     if (!Method->isVirtual() || !Method->getIdentifier())
1989       continue;
1990     Overrides[Method->getName()].push_back(Method);
1991   }
1992 
1993   for (const auto &Base : CR->bases()) {
1994     const auto *BR = Base.getType().getTypePtr()->getAsCXXRecordDecl();
1995     if (!BR)
1996       continue;
1997     for (auto *Method : BR->methods()) {
1998       if (!Method->isVirtual() || !Method->getIdentifier())
1999         continue;
2000       const auto it = Overrides.find(Method->getName());
2001       bool IsOverriden = false;
2002       if (it != Overrides.end()) {
2003         for (auto *MD : it->second) {
2004           // If the method in current body is not an overload of this virtual
2005           // function, then it overrides this one.
2006           if (!S.IsOverload(MD, Method, false)) {
2007             IsOverriden = true;
2008             break;
2009           }
2010         }
2011       }
2012       if (!IsOverriden) {
2013         // Generates a new CodeCompletionResult by taking this function and
2014         // converting it into an override declaration with only one chunk in the
2015         // final CodeCompletionString as a TypedTextChunk.
2016         std::string OverrideSignature;
2017         llvm::raw_string_ostream OS(OverrideSignature);
2018         CodeCompletionResult CCR(Method, 0);
2019         PrintingPolicy Policy =
2020             getCompletionPrintingPolicy(S.getASTContext(), S.getPreprocessor());
2021         auto *CCS = CCR.createCodeCompletionStringForOverride(
2022             S.getPreprocessor(), S.getASTContext(), Builder,
2023             /*IncludeBriefComments=*/false, CCContext, Policy);
2024         Results.AddResult(CodeCompletionResult(CCS, Method, CCP_CodePattern));
2025       }
2026     }
2027   }
2028 }
2029 
2030 /// Add language constructs that show up for "ordinary" names.
2031 static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC, Scope *S,
2032                                    Sema &SemaRef, ResultBuilder &Results) {
2033   CodeCompletionAllocator &Allocator = Results.getAllocator();
2034   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
2035 
2036   typedef CodeCompletionResult Result;
2037   switch (CCC) {
2038   case Sema::PCC_Namespace:
2039     if (SemaRef.getLangOpts().CPlusPlus) {
2040       if (Results.includeCodePatterns()) {
2041         // namespace <identifier> { declarations }
2042         Builder.AddTypedTextChunk("namespace");
2043         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2044         Builder.AddPlaceholderChunk("identifier");
2045         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2046         Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2047         Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2048         Builder.AddPlaceholderChunk("declarations");
2049         Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2050         Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2051         Results.AddResult(Result(Builder.TakeString()));
2052       }
2053 
2054       // namespace identifier = identifier ;
2055       Builder.AddTypedTextChunk("namespace");
2056       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2057       Builder.AddPlaceholderChunk("name");
2058       Builder.AddChunk(CodeCompletionString::CK_Equal);
2059       Builder.AddPlaceholderChunk("namespace");
2060       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2061       Results.AddResult(Result(Builder.TakeString()));
2062 
2063       // Using directives
2064       Builder.AddTypedTextChunk("using namespace");
2065       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2066       Builder.AddPlaceholderChunk("identifier");
2067       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2068       Results.AddResult(Result(Builder.TakeString()));
2069 
2070       // asm(string-literal)
2071       Builder.AddTypedTextChunk("asm");
2072       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2073       Builder.AddPlaceholderChunk("string-literal");
2074       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2075       Results.AddResult(Result(Builder.TakeString()));
2076 
2077       if (Results.includeCodePatterns()) {
2078         // Explicit template instantiation
2079         Builder.AddTypedTextChunk("template");
2080         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2081         Builder.AddPlaceholderChunk("declaration");
2082         Results.AddResult(Result(Builder.TakeString()));
2083       } else {
2084         Results.AddResult(Result("template", CodeCompletionResult::RK_Keyword));
2085       }
2086     }
2087 
2088     if (SemaRef.getLangOpts().ObjC)
2089       AddObjCTopLevelResults(Results, true);
2090 
2091     AddTypedefResult(Results);
2092     LLVM_FALLTHROUGH;
2093 
2094   case Sema::PCC_Class:
2095     if (SemaRef.getLangOpts().CPlusPlus) {
2096       // Using declaration
2097       Builder.AddTypedTextChunk("using");
2098       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2099       Builder.AddPlaceholderChunk("qualifier");
2100       Builder.AddTextChunk("::");
2101       Builder.AddPlaceholderChunk("name");
2102       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2103       Results.AddResult(Result(Builder.TakeString()));
2104 
2105       if (SemaRef.getLangOpts().CPlusPlus11)
2106         AddUsingAliasResult(Builder, Results);
2107 
2108       // using typename qualifier::name (only in a dependent context)
2109       if (SemaRef.CurContext->isDependentContext()) {
2110         Builder.AddTypedTextChunk("using typename");
2111         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2112         Builder.AddPlaceholderChunk("qualifier");
2113         Builder.AddTextChunk("::");
2114         Builder.AddPlaceholderChunk("name");
2115         Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2116         Results.AddResult(Result(Builder.TakeString()));
2117       }
2118 
2119       AddStaticAssertResult(Builder, Results, SemaRef.getLangOpts());
2120 
2121       if (CCC == Sema::PCC_Class) {
2122         AddTypedefResult(Results);
2123 
2124         bool IsNotInheritanceScope =
2125             !(S->getFlags() & Scope::ClassInheritanceScope);
2126         // public:
2127         Builder.AddTypedTextChunk("public");
2128         if (IsNotInheritanceScope && Results.includeCodePatterns())
2129           Builder.AddChunk(CodeCompletionString::CK_Colon);
2130         Results.AddResult(Result(Builder.TakeString()));
2131 
2132         // protected:
2133         Builder.AddTypedTextChunk("protected");
2134         if (IsNotInheritanceScope && Results.includeCodePatterns())
2135           Builder.AddChunk(CodeCompletionString::CK_Colon);
2136         Results.AddResult(Result(Builder.TakeString()));
2137 
2138         // private:
2139         Builder.AddTypedTextChunk("private");
2140         if (IsNotInheritanceScope && Results.includeCodePatterns())
2141           Builder.AddChunk(CodeCompletionString::CK_Colon);
2142         Results.AddResult(Result(Builder.TakeString()));
2143 
2144         // FIXME: This adds override results only if we are at the first word of
2145         // the declaration/definition. Also call this from other sides to have
2146         // more use-cases.
2147         AddOverrideResults(Results, CodeCompletionContext::CCC_ClassStructUnion,
2148                            Builder);
2149       }
2150     }
2151     LLVM_FALLTHROUGH;
2152 
2153   case Sema::PCC_Template:
2154   case Sema::PCC_MemberTemplate:
2155     if (SemaRef.getLangOpts().CPlusPlus && Results.includeCodePatterns()) {
2156       // template < parameters >
2157       Builder.AddTypedTextChunk("template");
2158       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
2159       Builder.AddPlaceholderChunk("parameters");
2160       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
2161       Results.AddResult(Result(Builder.TakeString()));
2162     } else {
2163       Results.AddResult(Result("template", CodeCompletionResult::RK_Keyword));
2164     }
2165 
2166     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
2167     AddFunctionSpecifiers(CCC, SemaRef.getLangOpts(), Results);
2168     break;
2169 
2170   case Sema::PCC_ObjCInterface:
2171     AddObjCInterfaceResults(SemaRef.getLangOpts(), Results, true);
2172     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
2173     AddFunctionSpecifiers(CCC, SemaRef.getLangOpts(), Results);
2174     break;
2175 
2176   case Sema::PCC_ObjCImplementation:
2177     AddObjCImplementationResults(SemaRef.getLangOpts(), Results, true);
2178     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
2179     AddFunctionSpecifiers(CCC, SemaRef.getLangOpts(), Results);
2180     break;
2181 
2182   case Sema::PCC_ObjCInstanceVariableList:
2183     AddObjCVisibilityResults(SemaRef.getLangOpts(), Results, true);
2184     break;
2185 
2186   case Sema::PCC_RecoveryInFunction:
2187   case Sema::PCC_Statement: {
2188     if (SemaRef.getLangOpts().CPlusPlus11)
2189       AddUsingAliasResult(Builder, Results);
2190 
2191     AddTypedefResult(Results);
2192 
2193     if (SemaRef.getLangOpts().CPlusPlus && Results.includeCodePatterns() &&
2194         SemaRef.getLangOpts().CXXExceptions) {
2195       Builder.AddTypedTextChunk("try");
2196       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2197       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2198       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2199       Builder.AddPlaceholderChunk("statements");
2200       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2201       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2202       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2203       Builder.AddTextChunk("catch");
2204       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2205       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2206       Builder.AddPlaceholderChunk("declaration");
2207       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2208       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2209       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2210       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2211       Builder.AddPlaceholderChunk("statements");
2212       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2213       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2214       Results.AddResult(Result(Builder.TakeString()));
2215     }
2216     if (SemaRef.getLangOpts().ObjC)
2217       AddObjCStatementResults(Results, true);
2218 
2219     if (Results.includeCodePatterns()) {
2220       // if (condition) { statements }
2221       Builder.AddTypedTextChunk("if");
2222       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2223       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2224       if (SemaRef.getLangOpts().CPlusPlus)
2225         Builder.AddPlaceholderChunk("condition");
2226       else
2227         Builder.AddPlaceholderChunk("expression");
2228       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2229       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2230       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2231       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2232       Builder.AddPlaceholderChunk("statements");
2233       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2234       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2235       Results.AddResult(Result(Builder.TakeString()));
2236 
2237       // switch (condition) { }
2238       Builder.AddTypedTextChunk("switch");
2239       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2240       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2241       if (SemaRef.getLangOpts().CPlusPlus)
2242         Builder.AddPlaceholderChunk("condition");
2243       else
2244         Builder.AddPlaceholderChunk("expression");
2245       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2246       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2247       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2248       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2249       Builder.AddPlaceholderChunk("cases");
2250       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2251       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2252       Results.AddResult(Result(Builder.TakeString()));
2253     }
2254 
2255     // Switch-specific statements.
2256     if (SemaRef.getCurFunction() &&
2257         !SemaRef.getCurFunction()->SwitchStack.empty()) {
2258       // case expression:
2259       Builder.AddTypedTextChunk("case");
2260       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2261       Builder.AddPlaceholderChunk("expression");
2262       Builder.AddChunk(CodeCompletionString::CK_Colon);
2263       Results.AddResult(Result(Builder.TakeString()));
2264 
2265       // default:
2266       Builder.AddTypedTextChunk("default");
2267       Builder.AddChunk(CodeCompletionString::CK_Colon);
2268       Results.AddResult(Result(Builder.TakeString()));
2269     }
2270 
2271     if (Results.includeCodePatterns()) {
2272       /// while (condition) { statements }
2273       Builder.AddTypedTextChunk("while");
2274       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2275       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2276       if (SemaRef.getLangOpts().CPlusPlus)
2277         Builder.AddPlaceholderChunk("condition");
2278       else
2279         Builder.AddPlaceholderChunk("expression");
2280       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2281       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2282       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2283       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2284       Builder.AddPlaceholderChunk("statements");
2285       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2286       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2287       Results.AddResult(Result(Builder.TakeString()));
2288 
2289       // do { statements } while ( expression );
2290       Builder.AddTypedTextChunk("do");
2291       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2292       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2293       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2294       Builder.AddPlaceholderChunk("statements");
2295       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2296       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2297       Builder.AddTextChunk("while");
2298       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2299       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2300       Builder.AddPlaceholderChunk("expression");
2301       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2302       Results.AddResult(Result(Builder.TakeString()));
2303 
2304       // for ( for-init-statement ; condition ; expression ) { statements }
2305       Builder.AddTypedTextChunk("for");
2306       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2307       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2308       if (SemaRef.getLangOpts().CPlusPlus || SemaRef.getLangOpts().C99)
2309         Builder.AddPlaceholderChunk("init-statement");
2310       else
2311         Builder.AddPlaceholderChunk("init-expression");
2312       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2313       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2314       Builder.AddPlaceholderChunk("condition");
2315       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2316       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2317       Builder.AddPlaceholderChunk("inc-expression");
2318       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2319       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2320       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2321       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2322       Builder.AddPlaceholderChunk("statements");
2323       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2324       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2325       Results.AddResult(Result(Builder.TakeString()));
2326 
2327       if (SemaRef.getLangOpts().CPlusPlus11 || SemaRef.getLangOpts().ObjC) {
2328         // for ( range_declaration (:|in) range_expression ) { statements }
2329         Builder.AddTypedTextChunk("for");
2330         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2331         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2332         Builder.AddPlaceholderChunk("range-declaration");
2333         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2334         if (SemaRef.getLangOpts().ObjC)
2335           Builder.AddTextChunk("in");
2336         else
2337           Builder.AddChunk(CodeCompletionString::CK_Colon);
2338         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2339         Builder.AddPlaceholderChunk("range-expression");
2340         Builder.AddChunk(CodeCompletionString::CK_RightParen);
2341         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2342         Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2343         Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2344         Builder.AddPlaceholderChunk("statements");
2345         Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2346         Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2347         Results.AddResult(Result(Builder.TakeString()));
2348       }
2349     }
2350 
2351     if (S->getContinueParent()) {
2352       // continue ;
2353       Builder.AddTypedTextChunk("continue");
2354       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2355       Results.AddResult(Result(Builder.TakeString()));
2356     }
2357 
2358     if (S->getBreakParent()) {
2359       // break ;
2360       Builder.AddTypedTextChunk("break");
2361       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2362       Results.AddResult(Result(Builder.TakeString()));
2363     }
2364 
2365     // "return expression ;" or "return ;", depending on the return type.
2366     QualType ReturnType;
2367     if (const auto *Function = dyn_cast<FunctionDecl>(SemaRef.CurContext))
2368       ReturnType = Function->getReturnType();
2369     else if (const auto *Method = dyn_cast<ObjCMethodDecl>(SemaRef.CurContext))
2370       ReturnType = Method->getReturnType();
2371     else if (SemaRef.getCurBlock() &&
2372              !SemaRef.getCurBlock()->ReturnType.isNull())
2373       ReturnType = SemaRef.getCurBlock()->ReturnType;;
2374     if (ReturnType.isNull() || ReturnType->isVoidType()) {
2375       Builder.AddTypedTextChunk("return");
2376       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2377       Results.AddResult(Result(Builder.TakeString()));
2378     } else {
2379       assert(!ReturnType.isNull());
2380       // "return expression ;"
2381       Builder.AddTypedTextChunk("return");
2382       Builder.AddChunk(clang::CodeCompletionString::CK_HorizontalSpace);
2383       Builder.AddPlaceholderChunk("expression");
2384       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2385       Results.AddResult(Result(Builder.TakeString()));
2386       // When boolean, also add 'return true;' and 'return false;'.
2387       if (ReturnType->isBooleanType()) {
2388         Builder.AddTypedTextChunk("return true");
2389         Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2390         Results.AddResult(Result(Builder.TakeString()));
2391 
2392         Builder.AddTypedTextChunk("return false");
2393         Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2394         Results.AddResult(Result(Builder.TakeString()));
2395       }
2396       // For pointers, suggest 'return nullptr' in C++.
2397       if (SemaRef.getLangOpts().CPlusPlus11 &&
2398           (ReturnType->isPointerType() || ReturnType->isMemberPointerType())) {
2399         Builder.AddTypedTextChunk("return nullptr");
2400         Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2401         Results.AddResult(Result(Builder.TakeString()));
2402       }
2403     }
2404 
2405     // goto identifier ;
2406     Builder.AddTypedTextChunk("goto");
2407     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2408     Builder.AddPlaceholderChunk("label");
2409     Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2410     Results.AddResult(Result(Builder.TakeString()));
2411 
2412     // Using directives
2413     Builder.AddTypedTextChunk("using namespace");
2414     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2415     Builder.AddPlaceholderChunk("identifier");
2416     Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2417     Results.AddResult(Result(Builder.TakeString()));
2418 
2419     AddStaticAssertResult(Builder, Results, SemaRef.getLangOpts());
2420   }
2421     LLVM_FALLTHROUGH;
2422 
2423   // Fall through (for statement expressions).
2424   case Sema::PCC_ForInit:
2425   case Sema::PCC_Condition:
2426     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
2427     // Fall through: conditions and statements can have expressions.
2428     LLVM_FALLTHROUGH;
2429 
2430   case Sema::PCC_ParenthesizedExpression:
2431     if (SemaRef.getLangOpts().ObjCAutoRefCount &&
2432         CCC == Sema::PCC_ParenthesizedExpression) {
2433       // (__bridge <type>)<expression>
2434       Builder.AddTypedTextChunk("__bridge");
2435       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2436       Builder.AddPlaceholderChunk("type");
2437       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2438       Builder.AddPlaceholderChunk("expression");
2439       Results.AddResult(Result(Builder.TakeString()));
2440 
2441       // (__bridge_transfer <Objective-C type>)<expression>
2442       Builder.AddTypedTextChunk("__bridge_transfer");
2443       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2444       Builder.AddPlaceholderChunk("Objective-C type");
2445       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2446       Builder.AddPlaceholderChunk("expression");
2447       Results.AddResult(Result(Builder.TakeString()));
2448 
2449       // (__bridge_retained <CF type>)<expression>
2450       Builder.AddTypedTextChunk("__bridge_retained");
2451       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2452       Builder.AddPlaceholderChunk("CF type");
2453       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2454       Builder.AddPlaceholderChunk("expression");
2455       Results.AddResult(Result(Builder.TakeString()));
2456     }
2457     // Fall through
2458     LLVM_FALLTHROUGH;
2459 
2460   case Sema::PCC_Expression: {
2461     if (SemaRef.getLangOpts().CPlusPlus) {
2462       // 'this', if we're in a non-static member function.
2463       addThisCompletion(SemaRef, Results);
2464 
2465       // true
2466       Builder.AddResultTypeChunk("bool");
2467       Builder.AddTypedTextChunk("true");
2468       Results.AddResult(Result(Builder.TakeString()));
2469 
2470       // false
2471       Builder.AddResultTypeChunk("bool");
2472       Builder.AddTypedTextChunk("false");
2473       Results.AddResult(Result(Builder.TakeString()));
2474 
2475       if (SemaRef.getLangOpts().RTTI) {
2476         // dynamic_cast < type-id > ( expression )
2477         Builder.AddTypedTextChunk("dynamic_cast");
2478         Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
2479         Builder.AddPlaceholderChunk("type");
2480         Builder.AddChunk(CodeCompletionString::CK_RightAngle);
2481         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2482         Builder.AddPlaceholderChunk("expression");
2483         Builder.AddChunk(CodeCompletionString::CK_RightParen);
2484         Results.AddResult(Result(Builder.TakeString()));
2485       }
2486 
2487       // static_cast < type-id > ( expression )
2488       Builder.AddTypedTextChunk("static_cast");
2489       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
2490       Builder.AddPlaceholderChunk("type");
2491       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
2492       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2493       Builder.AddPlaceholderChunk("expression");
2494       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2495       Results.AddResult(Result(Builder.TakeString()));
2496 
2497       // reinterpret_cast < type-id > ( expression )
2498       Builder.AddTypedTextChunk("reinterpret_cast");
2499       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
2500       Builder.AddPlaceholderChunk("type");
2501       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
2502       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2503       Builder.AddPlaceholderChunk("expression");
2504       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2505       Results.AddResult(Result(Builder.TakeString()));
2506 
2507       // const_cast < type-id > ( expression )
2508       Builder.AddTypedTextChunk("const_cast");
2509       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
2510       Builder.AddPlaceholderChunk("type");
2511       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
2512       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2513       Builder.AddPlaceholderChunk("expression");
2514       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2515       Results.AddResult(Result(Builder.TakeString()));
2516 
2517       if (SemaRef.getLangOpts().RTTI) {
2518         // typeid ( expression-or-type )
2519         Builder.AddResultTypeChunk("std::type_info");
2520         Builder.AddTypedTextChunk("typeid");
2521         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2522         Builder.AddPlaceholderChunk("expression-or-type");
2523         Builder.AddChunk(CodeCompletionString::CK_RightParen);
2524         Results.AddResult(Result(Builder.TakeString()));
2525       }
2526 
2527       // new T ( ... )
2528       Builder.AddTypedTextChunk("new");
2529       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2530       Builder.AddPlaceholderChunk("type");
2531       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2532       Builder.AddPlaceholderChunk("expressions");
2533       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2534       Results.AddResult(Result(Builder.TakeString()));
2535 
2536       // new T [ ] ( ... )
2537       Builder.AddTypedTextChunk("new");
2538       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2539       Builder.AddPlaceholderChunk("type");
2540       Builder.AddChunk(CodeCompletionString::CK_LeftBracket);
2541       Builder.AddPlaceholderChunk("size");
2542       Builder.AddChunk(CodeCompletionString::CK_RightBracket);
2543       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2544       Builder.AddPlaceholderChunk("expressions");
2545       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2546       Results.AddResult(Result(Builder.TakeString()));
2547 
2548       // delete expression
2549       Builder.AddResultTypeChunk("void");
2550       Builder.AddTypedTextChunk("delete");
2551       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2552       Builder.AddPlaceholderChunk("expression");
2553       Results.AddResult(Result(Builder.TakeString()));
2554 
2555       // delete [] expression
2556       Builder.AddResultTypeChunk("void");
2557       Builder.AddTypedTextChunk("delete");
2558       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2559       Builder.AddChunk(CodeCompletionString::CK_LeftBracket);
2560       Builder.AddChunk(CodeCompletionString::CK_RightBracket);
2561       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2562       Builder.AddPlaceholderChunk("expression");
2563       Results.AddResult(Result(Builder.TakeString()));
2564 
2565       if (SemaRef.getLangOpts().CXXExceptions) {
2566         // throw expression
2567         Builder.AddResultTypeChunk("void");
2568         Builder.AddTypedTextChunk("throw");
2569         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2570         Builder.AddPlaceholderChunk("expression");
2571         Results.AddResult(Result(Builder.TakeString()));
2572       }
2573 
2574       // FIXME: Rethrow?
2575 
2576       if (SemaRef.getLangOpts().CPlusPlus11) {
2577         // nullptr
2578         Builder.AddResultTypeChunk("std::nullptr_t");
2579         Builder.AddTypedTextChunk("nullptr");
2580         Results.AddResult(Result(Builder.TakeString()));
2581 
2582         // alignof
2583         Builder.AddResultTypeChunk("size_t");
2584         Builder.AddTypedTextChunk("alignof");
2585         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2586         Builder.AddPlaceholderChunk("type");
2587         Builder.AddChunk(CodeCompletionString::CK_RightParen);
2588         Results.AddResult(Result(Builder.TakeString()));
2589 
2590         // noexcept
2591         Builder.AddResultTypeChunk("bool");
2592         Builder.AddTypedTextChunk("noexcept");
2593         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2594         Builder.AddPlaceholderChunk("expression");
2595         Builder.AddChunk(CodeCompletionString::CK_RightParen);
2596         Results.AddResult(Result(Builder.TakeString()));
2597 
2598         // sizeof... expression
2599         Builder.AddResultTypeChunk("size_t");
2600         Builder.AddTypedTextChunk("sizeof...");
2601         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2602         Builder.AddPlaceholderChunk("parameter-pack");
2603         Builder.AddChunk(CodeCompletionString::CK_RightParen);
2604         Results.AddResult(Result(Builder.TakeString()));
2605       }
2606     }
2607 
2608     if (SemaRef.getLangOpts().ObjC) {
2609       // Add "super", if we're in an Objective-C class with a superclass.
2610       if (ObjCMethodDecl *Method = SemaRef.getCurMethodDecl()) {
2611         // The interface can be NULL.
2612         if (ObjCInterfaceDecl *ID = Method->getClassInterface())
2613           if (ID->getSuperClass()) {
2614             std::string SuperType;
2615             SuperType = ID->getSuperClass()->getNameAsString();
2616             if (Method->isInstanceMethod())
2617               SuperType += " *";
2618 
2619             Builder.AddResultTypeChunk(Allocator.CopyString(SuperType));
2620             Builder.AddTypedTextChunk("super");
2621             Results.AddResult(Result(Builder.TakeString()));
2622           }
2623       }
2624 
2625       AddObjCExpressionResults(Results, true);
2626     }
2627 
2628     if (SemaRef.getLangOpts().C11) {
2629       // _Alignof
2630       Builder.AddResultTypeChunk("size_t");
2631       if (SemaRef.PP.isMacroDefined("alignof"))
2632         Builder.AddTypedTextChunk("alignof");
2633       else
2634         Builder.AddTypedTextChunk("_Alignof");
2635       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2636       Builder.AddPlaceholderChunk("type");
2637       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2638       Results.AddResult(Result(Builder.TakeString()));
2639     }
2640 
2641     // sizeof expression
2642     Builder.AddResultTypeChunk("size_t");
2643     Builder.AddTypedTextChunk("sizeof");
2644     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2645     Builder.AddPlaceholderChunk("expression-or-type");
2646     Builder.AddChunk(CodeCompletionString::CK_RightParen);
2647     Results.AddResult(Result(Builder.TakeString()));
2648     break;
2649   }
2650 
2651   case Sema::PCC_Type:
2652   case Sema::PCC_LocalDeclarationSpecifiers:
2653     break;
2654   }
2655 
2656   if (WantTypesInContext(CCC, SemaRef.getLangOpts()))
2657     AddTypeSpecifierResults(SemaRef.getLangOpts(), Results);
2658 
2659   if (SemaRef.getLangOpts().CPlusPlus && CCC != Sema::PCC_Type)
2660     Results.AddResult(Result("operator"));
2661 }
2662 
2663 /// If the given declaration has an associated type, add it as a result
2664 /// type chunk.
2665 static void AddResultTypeChunk(ASTContext &Context,
2666                                const PrintingPolicy &Policy,
2667                                const NamedDecl *ND, QualType BaseType,
2668                                CodeCompletionBuilder &Result) {
2669   if (!ND)
2670     return;
2671 
2672   // Skip constructors and conversion functions, which have their return types
2673   // built into their names.
2674   if (isConstructor(ND) || isa<CXXConversionDecl>(ND))
2675     return;
2676 
2677   // Determine the type of the declaration (if it has a type).
2678   QualType T;
2679   if (const FunctionDecl *Function = ND->getAsFunction())
2680     T = Function->getReturnType();
2681   else if (const auto *Method = dyn_cast<ObjCMethodDecl>(ND)) {
2682     if (!BaseType.isNull())
2683       T = Method->getSendResultType(BaseType);
2684     else
2685       T = Method->getReturnType();
2686   } else if (const auto *Enumerator = dyn_cast<EnumConstantDecl>(ND)) {
2687     T = Context.getTypeDeclType(cast<TypeDecl>(Enumerator->getDeclContext()));
2688     T = clang::TypeName::getFullyQualifiedType(T, Context);
2689   } else if (isa<UnresolvedUsingValueDecl>(ND)) {
2690     /* Do nothing: ignore unresolved using declarations*/
2691   } else if (const auto *Ivar = dyn_cast<ObjCIvarDecl>(ND)) {
2692     if (!BaseType.isNull())
2693       T = Ivar->getUsageType(BaseType);
2694     else
2695       T = Ivar->getType();
2696   } else if (const auto *Value = dyn_cast<ValueDecl>(ND)) {
2697     T = Value->getType();
2698   } else if (const auto *Property = dyn_cast<ObjCPropertyDecl>(ND)) {
2699     if (!BaseType.isNull())
2700       T = Property->getUsageType(BaseType);
2701     else
2702       T = Property->getType();
2703   }
2704 
2705   if (T.isNull() || Context.hasSameType(T, Context.DependentTy))
2706     return;
2707 
2708   Result.AddResultTypeChunk(
2709       GetCompletionTypeString(T, Context, Policy, Result.getAllocator()));
2710 }
2711 
2712 static void MaybeAddSentinel(Preprocessor &PP,
2713                              const NamedDecl *FunctionOrMethod,
2714                              CodeCompletionBuilder &Result) {
2715   if (SentinelAttr *Sentinel = FunctionOrMethod->getAttr<SentinelAttr>())
2716     if (Sentinel->getSentinel() == 0) {
2717       if (PP.getLangOpts().ObjC && PP.isMacroDefined("nil"))
2718         Result.AddTextChunk(", nil");
2719       else if (PP.isMacroDefined("NULL"))
2720         Result.AddTextChunk(", NULL");
2721       else
2722         Result.AddTextChunk(", (void*)0");
2723     }
2724 }
2725 
2726 static std::string formatObjCParamQualifiers(unsigned ObjCQuals,
2727                                              QualType &Type) {
2728   std::string Result;
2729   if (ObjCQuals & Decl::OBJC_TQ_In)
2730     Result += "in ";
2731   else if (ObjCQuals & Decl::OBJC_TQ_Inout)
2732     Result += "inout ";
2733   else if (ObjCQuals & Decl::OBJC_TQ_Out)
2734     Result += "out ";
2735   if (ObjCQuals & Decl::OBJC_TQ_Bycopy)
2736     Result += "bycopy ";
2737   else if (ObjCQuals & Decl::OBJC_TQ_Byref)
2738     Result += "byref ";
2739   if (ObjCQuals & Decl::OBJC_TQ_Oneway)
2740     Result += "oneway ";
2741   if (ObjCQuals & Decl::OBJC_TQ_CSNullability) {
2742     if (auto nullability = AttributedType::stripOuterNullability(Type)) {
2743       switch (*nullability) {
2744       case NullabilityKind::NonNull:
2745         Result += "nonnull ";
2746         break;
2747 
2748       case NullabilityKind::Nullable:
2749         Result += "nullable ";
2750         break;
2751 
2752       case NullabilityKind::Unspecified:
2753         Result += "null_unspecified ";
2754         break;
2755 
2756       case NullabilityKind::NullableResult:
2757         llvm_unreachable("Not supported as a context-sensitive keyword!");
2758         break;
2759       }
2760     }
2761   }
2762   return Result;
2763 }
2764 
2765 /// Tries to find the most appropriate type location for an Objective-C
2766 /// block placeholder.
2767 ///
2768 /// This function ignores things like typedefs and qualifiers in order to
2769 /// present the most relevant and accurate block placeholders in code completion
2770 /// results.
2771 static void findTypeLocationForBlockDecl(const TypeSourceInfo *TSInfo,
2772                                          FunctionTypeLoc &Block,
2773                                          FunctionProtoTypeLoc &BlockProto,
2774                                          bool SuppressBlock = false) {
2775   if (!TSInfo)
2776     return;
2777   TypeLoc TL = TSInfo->getTypeLoc().getUnqualifiedLoc();
2778   while (true) {
2779     // Look through typedefs.
2780     if (!SuppressBlock) {
2781       if (TypedefTypeLoc TypedefTL = TL.getAs<TypedefTypeLoc>()) {
2782         if (TypeSourceInfo *InnerTSInfo =
2783                 TypedefTL.getTypedefNameDecl()->getTypeSourceInfo()) {
2784           TL = InnerTSInfo->getTypeLoc().getUnqualifiedLoc();
2785           continue;
2786         }
2787       }
2788 
2789       // Look through qualified types
2790       if (QualifiedTypeLoc QualifiedTL = TL.getAs<QualifiedTypeLoc>()) {
2791         TL = QualifiedTL.getUnqualifiedLoc();
2792         continue;
2793       }
2794 
2795       if (AttributedTypeLoc AttrTL = TL.getAs<AttributedTypeLoc>()) {
2796         TL = AttrTL.getModifiedLoc();
2797         continue;
2798       }
2799     }
2800 
2801     // Try to get the function prototype behind the block pointer type,
2802     // then we're done.
2803     if (BlockPointerTypeLoc BlockPtr = TL.getAs<BlockPointerTypeLoc>()) {
2804       TL = BlockPtr.getPointeeLoc().IgnoreParens();
2805       Block = TL.getAs<FunctionTypeLoc>();
2806       BlockProto = TL.getAs<FunctionProtoTypeLoc>();
2807     }
2808     break;
2809   }
2810 }
2811 
2812 static std::string
2813 formatBlockPlaceholder(const PrintingPolicy &Policy, const NamedDecl *BlockDecl,
2814                        FunctionTypeLoc &Block, FunctionProtoTypeLoc &BlockProto,
2815                        bool SuppressBlockName = false,
2816                        bool SuppressBlock = false,
2817                        Optional<ArrayRef<QualType>> ObjCSubsts = None);
2818 
2819 static std::string
2820 FormatFunctionParameter(const PrintingPolicy &Policy, const ParmVarDecl *Param,
2821                         bool SuppressName = false, bool SuppressBlock = false,
2822                         Optional<ArrayRef<QualType>> ObjCSubsts = None) {
2823   // Params are unavailable in FunctionTypeLoc if the FunctionType is invalid.
2824   // It would be better to pass in the param Type, which is usually avaliable.
2825   // But this case is rare, so just pretend we fell back to int as elsewhere.
2826   if (!Param)
2827     return "int";
2828   bool ObjCMethodParam = isa<ObjCMethodDecl>(Param->getDeclContext());
2829   if (Param->getType()->isDependentType() ||
2830       !Param->getType()->isBlockPointerType()) {
2831     // The argument for a dependent or non-block parameter is a placeholder
2832     // containing that parameter's type.
2833     std::string Result;
2834 
2835     if (Param->getIdentifier() && !ObjCMethodParam && !SuppressName)
2836       Result = std::string(Param->getIdentifier()->getName());
2837 
2838     QualType Type = Param->getType();
2839     if (ObjCSubsts)
2840       Type = Type.substObjCTypeArgs(Param->getASTContext(), *ObjCSubsts,
2841                                     ObjCSubstitutionContext::Parameter);
2842     if (ObjCMethodParam) {
2843       Result =
2844           "(" + formatObjCParamQualifiers(Param->getObjCDeclQualifier(), Type);
2845       Result += Type.getAsString(Policy) + ")";
2846       if (Param->getIdentifier() && !SuppressName)
2847         Result += Param->getIdentifier()->getName();
2848     } else {
2849       Type.getAsStringInternal(Result, Policy);
2850     }
2851     return Result;
2852   }
2853 
2854   // The argument for a block pointer parameter is a block literal with
2855   // the appropriate type.
2856   FunctionTypeLoc Block;
2857   FunctionProtoTypeLoc BlockProto;
2858   findTypeLocationForBlockDecl(Param->getTypeSourceInfo(), Block, BlockProto,
2859                                SuppressBlock);
2860   // Try to retrieve the block type information from the property if this is a
2861   // parameter in a setter.
2862   if (!Block && ObjCMethodParam &&
2863       cast<ObjCMethodDecl>(Param->getDeclContext())->isPropertyAccessor()) {
2864     if (const auto *PD = cast<ObjCMethodDecl>(Param->getDeclContext())
2865                              ->findPropertyDecl(/*CheckOverrides=*/false))
2866       findTypeLocationForBlockDecl(PD->getTypeSourceInfo(), Block, BlockProto,
2867                                    SuppressBlock);
2868   }
2869 
2870   if (!Block) {
2871     // We were unable to find a FunctionProtoTypeLoc with parameter names
2872     // for the block; just use the parameter type as a placeholder.
2873     std::string Result;
2874     if (!ObjCMethodParam && Param->getIdentifier())
2875       Result = std::string(Param->getIdentifier()->getName());
2876 
2877     QualType Type = Param->getType().getUnqualifiedType();
2878 
2879     if (ObjCMethodParam) {
2880       Result = Type.getAsString(Policy);
2881       std::string Quals =
2882           formatObjCParamQualifiers(Param->getObjCDeclQualifier(), Type);
2883       if (!Quals.empty())
2884         Result = "(" + Quals + " " + Result + ")";
2885       if (Result.back() != ')')
2886         Result += " ";
2887       if (Param->getIdentifier())
2888         Result += Param->getIdentifier()->getName();
2889     } else {
2890       Type.getAsStringInternal(Result, Policy);
2891     }
2892 
2893     return Result;
2894   }
2895 
2896   // We have the function prototype behind the block pointer type, as it was
2897   // written in the source.
2898   return formatBlockPlaceholder(Policy, Param, Block, BlockProto,
2899                                 /*SuppressBlockName=*/false, SuppressBlock,
2900                                 ObjCSubsts);
2901 }
2902 
2903 /// Returns a placeholder string that corresponds to an Objective-C block
2904 /// declaration.
2905 ///
2906 /// \param BlockDecl A declaration with an Objective-C block type.
2907 ///
2908 /// \param Block The most relevant type location for that block type.
2909 ///
2910 /// \param SuppressBlockName Determines whether or not the name of the block
2911 /// declaration is included in the resulting string.
2912 static std::string
2913 formatBlockPlaceholder(const PrintingPolicy &Policy, const NamedDecl *BlockDecl,
2914                        FunctionTypeLoc &Block, FunctionProtoTypeLoc &BlockProto,
2915                        bool SuppressBlockName, bool SuppressBlock,
2916                        Optional<ArrayRef<QualType>> ObjCSubsts) {
2917   std::string Result;
2918   QualType ResultType = Block.getTypePtr()->getReturnType();
2919   if (ObjCSubsts)
2920     ResultType =
2921         ResultType.substObjCTypeArgs(BlockDecl->getASTContext(), *ObjCSubsts,
2922                                      ObjCSubstitutionContext::Result);
2923   if (!ResultType->isVoidType() || SuppressBlock)
2924     ResultType.getAsStringInternal(Result, Policy);
2925 
2926   // Format the parameter list.
2927   std::string Params;
2928   if (!BlockProto || Block.getNumParams() == 0) {
2929     if (BlockProto && BlockProto.getTypePtr()->isVariadic())
2930       Params = "(...)";
2931     else
2932       Params = "(void)";
2933   } else {
2934     Params += "(";
2935     for (unsigned I = 0, N = Block.getNumParams(); I != N; ++I) {
2936       if (I)
2937         Params += ", ";
2938       Params += FormatFunctionParameter(Policy, Block.getParam(I),
2939                                         /*SuppressName=*/false,
2940                                         /*SuppressBlock=*/true, ObjCSubsts);
2941 
2942       if (I == N - 1 && BlockProto.getTypePtr()->isVariadic())
2943         Params += ", ...";
2944     }
2945     Params += ")";
2946   }
2947 
2948   if (SuppressBlock) {
2949     // Format as a parameter.
2950     Result = Result + " (^";
2951     if (!SuppressBlockName && BlockDecl->getIdentifier())
2952       Result += BlockDecl->getIdentifier()->getName();
2953     Result += ")";
2954     Result += Params;
2955   } else {
2956     // Format as a block literal argument.
2957     Result = '^' + Result;
2958     Result += Params;
2959 
2960     if (!SuppressBlockName && BlockDecl->getIdentifier())
2961       Result += BlockDecl->getIdentifier()->getName();
2962   }
2963 
2964   return Result;
2965 }
2966 
2967 static std::string GetDefaultValueString(const ParmVarDecl *Param,
2968                                          const SourceManager &SM,
2969                                          const LangOptions &LangOpts) {
2970   const SourceRange SrcRange = Param->getDefaultArgRange();
2971   CharSourceRange CharSrcRange = CharSourceRange::getTokenRange(SrcRange);
2972   bool Invalid = CharSrcRange.isInvalid();
2973   if (Invalid)
2974     return "";
2975   StringRef srcText =
2976       Lexer::getSourceText(CharSrcRange, SM, LangOpts, &Invalid);
2977   if (Invalid)
2978     return "";
2979 
2980   if (srcText.empty() || srcText == "=") {
2981     // Lexer can't determine the value.
2982     // This happens if the code is incorrect (for example class is forward
2983     // declared).
2984     return "";
2985   }
2986   std::string DefValue(srcText.str());
2987   // FIXME: remove this check if the Lexer::getSourceText value is fixed and
2988   // this value always has (or always does not have) '=' in front of it
2989   if (DefValue.at(0) != '=') {
2990     // If we don't have '=' in front of value.
2991     // Lexer returns built-in types values without '=' and user-defined types
2992     // values with it.
2993     return " = " + DefValue;
2994   }
2995   return " " + DefValue;
2996 }
2997 
2998 /// Add function parameter chunks to the given code completion string.
2999 static void AddFunctionParameterChunks(Preprocessor &PP,
3000                                        const PrintingPolicy &Policy,
3001                                        const FunctionDecl *Function,
3002                                        CodeCompletionBuilder &Result,
3003                                        unsigned Start = 0,
3004                                        bool InOptional = false) {
3005   bool FirstParameter = true;
3006 
3007   for (unsigned P = Start, N = Function->getNumParams(); P != N; ++P) {
3008     const ParmVarDecl *Param = Function->getParamDecl(P);
3009 
3010     if (Param->hasDefaultArg() && !InOptional) {
3011       // When we see an optional default argument, put that argument and
3012       // the remaining default arguments into a new, optional string.
3013       CodeCompletionBuilder Opt(Result.getAllocator(),
3014                                 Result.getCodeCompletionTUInfo());
3015       if (!FirstParameter)
3016         Opt.AddChunk(CodeCompletionString::CK_Comma);
3017       AddFunctionParameterChunks(PP, Policy, Function, Opt, P, true);
3018       Result.AddOptionalChunk(Opt.TakeString());
3019       break;
3020     }
3021 
3022     if (FirstParameter)
3023       FirstParameter = false;
3024     else
3025       Result.AddChunk(CodeCompletionString::CK_Comma);
3026 
3027     InOptional = false;
3028 
3029     // Format the placeholder string.
3030     std::string PlaceholderStr = FormatFunctionParameter(Policy, Param);
3031     if (Param->hasDefaultArg())
3032       PlaceholderStr +=
3033           GetDefaultValueString(Param, PP.getSourceManager(), PP.getLangOpts());
3034 
3035     if (Function->isVariadic() && P == N - 1)
3036       PlaceholderStr += ", ...";
3037 
3038     // Add the placeholder string.
3039     Result.AddPlaceholderChunk(
3040         Result.getAllocator().CopyString(PlaceholderStr));
3041   }
3042 
3043   if (const auto *Proto = Function->getType()->getAs<FunctionProtoType>())
3044     if (Proto->isVariadic()) {
3045       if (Proto->getNumParams() == 0)
3046         Result.AddPlaceholderChunk("...");
3047 
3048       MaybeAddSentinel(PP, Function, Result);
3049     }
3050 }
3051 
3052 /// Add template parameter chunks to the given code completion string.
3053 static void AddTemplateParameterChunks(
3054     ASTContext &Context, const PrintingPolicy &Policy,
3055     const TemplateDecl *Template, CodeCompletionBuilder &Result,
3056     unsigned MaxParameters = 0, unsigned Start = 0, bool InDefaultArg = false) {
3057   bool FirstParameter = true;
3058 
3059   // Prefer to take the template parameter names from the first declaration of
3060   // the template.
3061   Template = cast<TemplateDecl>(Template->getCanonicalDecl());
3062 
3063   TemplateParameterList *Params = Template->getTemplateParameters();
3064   TemplateParameterList::iterator PEnd = Params->end();
3065   if (MaxParameters)
3066     PEnd = Params->begin() + MaxParameters;
3067   for (TemplateParameterList::iterator P = Params->begin() + Start; P != PEnd;
3068        ++P) {
3069     bool HasDefaultArg = false;
3070     std::string PlaceholderStr;
3071     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*P)) {
3072       if (TTP->wasDeclaredWithTypename())
3073         PlaceholderStr = "typename";
3074       else if (const auto *TC = TTP->getTypeConstraint()) {
3075         llvm::raw_string_ostream OS(PlaceholderStr);
3076         TC->print(OS, Policy);
3077         OS.flush();
3078       } else
3079         PlaceholderStr = "class";
3080 
3081       if (TTP->getIdentifier()) {
3082         PlaceholderStr += ' ';
3083         PlaceholderStr += TTP->getIdentifier()->getName();
3084       }
3085 
3086       HasDefaultArg = TTP->hasDefaultArgument();
3087     } else if (NonTypeTemplateParmDecl *NTTP =
3088                    dyn_cast<NonTypeTemplateParmDecl>(*P)) {
3089       if (NTTP->getIdentifier())
3090         PlaceholderStr = std::string(NTTP->getIdentifier()->getName());
3091       NTTP->getType().getAsStringInternal(PlaceholderStr, Policy);
3092       HasDefaultArg = NTTP->hasDefaultArgument();
3093     } else {
3094       assert(isa<TemplateTemplateParmDecl>(*P));
3095       TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(*P);
3096 
3097       // Since putting the template argument list into the placeholder would
3098       // be very, very long, we just use an abbreviation.
3099       PlaceholderStr = "template<...> class";
3100       if (TTP->getIdentifier()) {
3101         PlaceholderStr += ' ';
3102         PlaceholderStr += TTP->getIdentifier()->getName();
3103       }
3104 
3105       HasDefaultArg = TTP->hasDefaultArgument();
3106     }
3107 
3108     if (HasDefaultArg && !InDefaultArg) {
3109       // When we see an optional default argument, put that argument and
3110       // the remaining default arguments into a new, optional string.
3111       CodeCompletionBuilder Opt(Result.getAllocator(),
3112                                 Result.getCodeCompletionTUInfo());
3113       if (!FirstParameter)
3114         Opt.AddChunk(CodeCompletionString::CK_Comma);
3115       AddTemplateParameterChunks(Context, Policy, Template, Opt, MaxParameters,
3116                                  P - Params->begin(), true);
3117       Result.AddOptionalChunk(Opt.TakeString());
3118       break;
3119     }
3120 
3121     InDefaultArg = false;
3122 
3123     if (FirstParameter)
3124       FirstParameter = false;
3125     else
3126       Result.AddChunk(CodeCompletionString::CK_Comma);
3127 
3128     // Add the placeholder string.
3129     Result.AddPlaceholderChunk(
3130         Result.getAllocator().CopyString(PlaceholderStr));
3131   }
3132 }
3133 
3134 /// Add a qualifier to the given code-completion string, if the
3135 /// provided nested-name-specifier is non-NULL.
3136 static void AddQualifierToCompletionString(CodeCompletionBuilder &Result,
3137                                            NestedNameSpecifier *Qualifier,
3138                                            bool QualifierIsInformative,
3139                                            ASTContext &Context,
3140                                            const PrintingPolicy &Policy) {
3141   if (!Qualifier)
3142     return;
3143 
3144   std::string PrintedNNS;
3145   {
3146     llvm::raw_string_ostream OS(PrintedNNS);
3147     Qualifier->print(OS, Policy);
3148   }
3149   if (QualifierIsInformative)
3150     Result.AddInformativeChunk(Result.getAllocator().CopyString(PrintedNNS));
3151   else
3152     Result.AddTextChunk(Result.getAllocator().CopyString(PrintedNNS));
3153 }
3154 
3155 static void
3156 AddFunctionTypeQualsToCompletionString(CodeCompletionBuilder &Result,
3157                                        const FunctionDecl *Function) {
3158   const auto *Proto = Function->getType()->getAs<FunctionProtoType>();
3159   if (!Proto || !Proto->getMethodQuals())
3160     return;
3161 
3162   // FIXME: Add ref-qualifier!
3163 
3164   // Handle single qualifiers without copying
3165   if (Proto->getMethodQuals().hasOnlyConst()) {
3166     Result.AddInformativeChunk(" const");
3167     return;
3168   }
3169 
3170   if (Proto->getMethodQuals().hasOnlyVolatile()) {
3171     Result.AddInformativeChunk(" volatile");
3172     return;
3173   }
3174 
3175   if (Proto->getMethodQuals().hasOnlyRestrict()) {
3176     Result.AddInformativeChunk(" restrict");
3177     return;
3178   }
3179 
3180   // Handle multiple qualifiers.
3181   std::string QualsStr;
3182   if (Proto->isConst())
3183     QualsStr += " const";
3184   if (Proto->isVolatile())
3185     QualsStr += " volatile";
3186   if (Proto->isRestrict())
3187     QualsStr += " restrict";
3188   Result.AddInformativeChunk(Result.getAllocator().CopyString(QualsStr));
3189 }
3190 
3191 /// Add the name of the given declaration
3192 static void AddTypedNameChunk(ASTContext &Context, const PrintingPolicy &Policy,
3193                               const NamedDecl *ND,
3194                               CodeCompletionBuilder &Result) {
3195   DeclarationName Name = ND->getDeclName();
3196   if (!Name)
3197     return;
3198 
3199   switch (Name.getNameKind()) {
3200   case DeclarationName::CXXOperatorName: {
3201     const char *OperatorName = nullptr;
3202     switch (Name.getCXXOverloadedOperator()) {
3203     case OO_None:
3204     case OO_Conditional:
3205     case NUM_OVERLOADED_OPERATORS:
3206       OperatorName = "operator";
3207       break;
3208 
3209 #define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly)  \
3210   case OO_##Name:                                                              \
3211     OperatorName = "operator" Spelling;                                        \
3212     break;
3213 #define OVERLOADED_OPERATOR_MULTI(Name, Spelling, Unary, Binary, MemberOnly)
3214 #include "clang/Basic/OperatorKinds.def"
3215 
3216     case OO_New:
3217       OperatorName = "operator new";
3218       break;
3219     case OO_Delete:
3220       OperatorName = "operator delete";
3221       break;
3222     case OO_Array_New:
3223       OperatorName = "operator new[]";
3224       break;
3225     case OO_Array_Delete:
3226       OperatorName = "operator delete[]";
3227       break;
3228     case OO_Call:
3229       OperatorName = "operator()";
3230       break;
3231     case OO_Subscript:
3232       OperatorName = "operator[]";
3233       break;
3234     }
3235     Result.AddTypedTextChunk(OperatorName);
3236     break;
3237   }
3238 
3239   case DeclarationName::Identifier:
3240   case DeclarationName::CXXConversionFunctionName:
3241   case DeclarationName::CXXDestructorName:
3242   case DeclarationName::CXXLiteralOperatorName:
3243     Result.AddTypedTextChunk(
3244         Result.getAllocator().CopyString(ND->getNameAsString()));
3245     break;
3246 
3247   case DeclarationName::CXXDeductionGuideName:
3248   case DeclarationName::CXXUsingDirective:
3249   case DeclarationName::ObjCZeroArgSelector:
3250   case DeclarationName::ObjCOneArgSelector:
3251   case DeclarationName::ObjCMultiArgSelector:
3252     break;
3253 
3254   case DeclarationName::CXXConstructorName: {
3255     CXXRecordDecl *Record = nullptr;
3256     QualType Ty = Name.getCXXNameType();
3257     if (const auto *RecordTy = Ty->getAs<RecordType>())
3258       Record = cast<CXXRecordDecl>(RecordTy->getDecl());
3259     else if (const auto *InjectedTy = Ty->getAs<InjectedClassNameType>())
3260       Record = InjectedTy->getDecl();
3261     else {
3262       Result.AddTypedTextChunk(
3263           Result.getAllocator().CopyString(ND->getNameAsString()));
3264       break;
3265     }
3266 
3267     Result.AddTypedTextChunk(
3268         Result.getAllocator().CopyString(Record->getNameAsString()));
3269     if (ClassTemplateDecl *Template = Record->getDescribedClassTemplate()) {
3270       Result.AddChunk(CodeCompletionString::CK_LeftAngle);
3271       AddTemplateParameterChunks(Context, Policy, Template, Result);
3272       Result.AddChunk(CodeCompletionString::CK_RightAngle);
3273     }
3274     break;
3275   }
3276   }
3277 }
3278 
3279 CodeCompletionString *CodeCompletionResult::CreateCodeCompletionString(
3280     Sema &S, const CodeCompletionContext &CCContext,
3281     CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo,
3282     bool IncludeBriefComments) {
3283   return CreateCodeCompletionString(S.Context, S.PP, CCContext, Allocator,
3284                                     CCTUInfo, IncludeBriefComments);
3285 }
3286 
3287 CodeCompletionString *CodeCompletionResult::CreateCodeCompletionStringForMacro(
3288     Preprocessor &PP, CodeCompletionAllocator &Allocator,
3289     CodeCompletionTUInfo &CCTUInfo) {
3290   assert(Kind == RK_Macro);
3291   CodeCompletionBuilder Result(Allocator, CCTUInfo, Priority, Availability);
3292   const MacroInfo *MI = PP.getMacroInfo(Macro);
3293   Result.AddTypedTextChunk(Result.getAllocator().CopyString(Macro->getName()));
3294 
3295   if (!MI || !MI->isFunctionLike())
3296     return Result.TakeString();
3297 
3298   // Format a function-like macro with placeholders for the arguments.
3299   Result.AddChunk(CodeCompletionString::CK_LeftParen);
3300   MacroInfo::param_iterator A = MI->param_begin(), AEnd = MI->param_end();
3301 
3302   // C99 variadic macros add __VA_ARGS__ at the end. Skip it.
3303   if (MI->isC99Varargs()) {
3304     --AEnd;
3305 
3306     if (A == AEnd) {
3307       Result.AddPlaceholderChunk("...");
3308     }
3309   }
3310 
3311   for (MacroInfo::param_iterator A = MI->param_begin(); A != AEnd; ++A) {
3312     if (A != MI->param_begin())
3313       Result.AddChunk(CodeCompletionString::CK_Comma);
3314 
3315     if (MI->isVariadic() && (A + 1) == AEnd) {
3316       SmallString<32> Arg = (*A)->getName();
3317       if (MI->isC99Varargs())
3318         Arg += ", ...";
3319       else
3320         Arg += "...";
3321       Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Arg));
3322       break;
3323     }
3324 
3325     // Non-variadic macros are simple.
3326     Result.AddPlaceholderChunk(
3327         Result.getAllocator().CopyString((*A)->getName()));
3328   }
3329   Result.AddChunk(CodeCompletionString::CK_RightParen);
3330   return Result.TakeString();
3331 }
3332 
3333 /// If possible, create a new code completion string for the given
3334 /// result.
3335 ///
3336 /// \returns Either a new, heap-allocated code completion string describing
3337 /// how to use this result, or NULL to indicate that the string or name of the
3338 /// result is all that is needed.
3339 CodeCompletionString *CodeCompletionResult::CreateCodeCompletionString(
3340     ASTContext &Ctx, Preprocessor &PP, const CodeCompletionContext &CCContext,
3341     CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo,
3342     bool IncludeBriefComments) {
3343   if (Kind == RK_Macro)
3344     return CreateCodeCompletionStringForMacro(PP, Allocator, CCTUInfo);
3345 
3346   CodeCompletionBuilder Result(Allocator, CCTUInfo, Priority, Availability);
3347 
3348   PrintingPolicy Policy = getCompletionPrintingPolicy(Ctx, PP);
3349   if (Kind == RK_Pattern) {
3350     Pattern->Priority = Priority;
3351     Pattern->Availability = Availability;
3352 
3353     if (Declaration) {
3354       Result.addParentContext(Declaration->getDeclContext());
3355       Pattern->ParentName = Result.getParentName();
3356       if (const RawComment *RC =
3357               getPatternCompletionComment(Ctx, Declaration)) {
3358         Result.addBriefComment(RC->getBriefText(Ctx));
3359         Pattern->BriefComment = Result.getBriefComment();
3360       }
3361     }
3362 
3363     return Pattern;
3364   }
3365 
3366   if (Kind == RK_Keyword) {
3367     Result.AddTypedTextChunk(Keyword);
3368     return Result.TakeString();
3369   }
3370   assert(Kind == RK_Declaration && "Missed a result kind?");
3371   return createCodeCompletionStringForDecl(
3372       PP, Ctx, Result, IncludeBriefComments, CCContext, Policy);
3373 }
3374 
3375 static void printOverrideString(const CodeCompletionString &CCS,
3376                                 std::string &BeforeName,
3377                                 std::string &NameAndSignature) {
3378   bool SeenTypedChunk = false;
3379   for (auto &Chunk : CCS) {
3380     if (Chunk.Kind == CodeCompletionString::CK_Optional) {
3381       assert(SeenTypedChunk && "optional parameter before name");
3382       // Note that we put all chunks inside into NameAndSignature.
3383       printOverrideString(*Chunk.Optional, NameAndSignature, NameAndSignature);
3384       continue;
3385     }
3386     SeenTypedChunk |= Chunk.Kind == CodeCompletionString::CK_TypedText;
3387     if (SeenTypedChunk)
3388       NameAndSignature += Chunk.Text;
3389     else
3390       BeforeName += Chunk.Text;
3391   }
3392 }
3393 
3394 CodeCompletionString *
3395 CodeCompletionResult::createCodeCompletionStringForOverride(
3396     Preprocessor &PP, ASTContext &Ctx, CodeCompletionBuilder &Result,
3397     bool IncludeBriefComments, const CodeCompletionContext &CCContext,
3398     PrintingPolicy &Policy) {
3399   auto *CCS = createCodeCompletionStringForDecl(PP, Ctx, Result,
3400                                                 /*IncludeBriefComments=*/false,
3401                                                 CCContext, Policy);
3402   std::string BeforeName;
3403   std::string NameAndSignature;
3404   // For overrides all chunks go into the result, none are informative.
3405   printOverrideString(*CCS, BeforeName, NameAndSignature);
3406   NameAndSignature += " override";
3407 
3408   Result.AddTextChunk(Result.getAllocator().CopyString(BeforeName));
3409   Result.AddChunk(CodeCompletionString::CK_HorizontalSpace);
3410   Result.AddTypedTextChunk(Result.getAllocator().CopyString(NameAndSignature));
3411   return Result.TakeString();
3412 }
3413 
3414 // FIXME: Right now this works well with lambdas. Add support for other functor
3415 // types like std::function.
3416 static const NamedDecl *extractFunctorCallOperator(const NamedDecl *ND) {
3417   const auto *VD = dyn_cast<VarDecl>(ND);
3418   if (!VD)
3419     return nullptr;
3420   const auto *RecordDecl = VD->getType()->getAsCXXRecordDecl();
3421   if (!RecordDecl || !RecordDecl->isLambda())
3422     return nullptr;
3423   return RecordDecl->getLambdaCallOperator();
3424 }
3425 
3426 CodeCompletionString *CodeCompletionResult::createCodeCompletionStringForDecl(
3427     Preprocessor &PP, ASTContext &Ctx, CodeCompletionBuilder &Result,
3428     bool IncludeBriefComments, const CodeCompletionContext &CCContext,
3429     PrintingPolicy &Policy) {
3430   const NamedDecl *ND = Declaration;
3431   Result.addParentContext(ND->getDeclContext());
3432 
3433   if (IncludeBriefComments) {
3434     // Add documentation comment, if it exists.
3435     if (const RawComment *RC = getCompletionComment(Ctx, Declaration)) {
3436       Result.addBriefComment(RC->getBriefText(Ctx));
3437     }
3438   }
3439 
3440   if (StartsNestedNameSpecifier) {
3441     Result.AddTypedTextChunk(
3442         Result.getAllocator().CopyString(ND->getNameAsString()));
3443     Result.AddTextChunk("::");
3444     return Result.TakeString();
3445   }
3446 
3447   for (const auto *I : ND->specific_attrs<AnnotateAttr>())
3448     Result.AddAnnotation(Result.getAllocator().CopyString(I->getAnnotation()));
3449 
3450   auto AddFunctionTypeAndResult = [&](const FunctionDecl *Function) {
3451     AddResultTypeChunk(Ctx, Policy, Function, CCContext.getBaseType(), Result);
3452     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
3453                                    Ctx, Policy);
3454     AddTypedNameChunk(Ctx, Policy, ND, Result);
3455     Result.AddChunk(CodeCompletionString::CK_LeftParen);
3456     AddFunctionParameterChunks(PP, Policy, Function, Result);
3457     Result.AddChunk(CodeCompletionString::CK_RightParen);
3458     AddFunctionTypeQualsToCompletionString(Result, Function);
3459   };
3460 
3461   if (const auto *Function = dyn_cast<FunctionDecl>(ND)) {
3462     AddFunctionTypeAndResult(Function);
3463     return Result.TakeString();
3464   }
3465 
3466   if (const auto *CallOperator =
3467           dyn_cast_or_null<FunctionDecl>(extractFunctorCallOperator(ND))) {
3468     AddFunctionTypeAndResult(CallOperator);
3469     return Result.TakeString();
3470   }
3471 
3472   AddResultTypeChunk(Ctx, Policy, ND, CCContext.getBaseType(), Result);
3473 
3474   if (const FunctionTemplateDecl *FunTmpl =
3475           dyn_cast<FunctionTemplateDecl>(ND)) {
3476     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
3477                                    Ctx, Policy);
3478     FunctionDecl *Function = FunTmpl->getTemplatedDecl();
3479     AddTypedNameChunk(Ctx, Policy, Function, Result);
3480 
3481     // Figure out which template parameters are deduced (or have default
3482     // arguments).
3483     llvm::SmallBitVector Deduced;
3484     Sema::MarkDeducedTemplateParameters(Ctx, FunTmpl, Deduced);
3485     unsigned LastDeducibleArgument;
3486     for (LastDeducibleArgument = Deduced.size(); LastDeducibleArgument > 0;
3487          --LastDeducibleArgument) {
3488       if (!Deduced[LastDeducibleArgument - 1]) {
3489         // C++0x: Figure out if the template argument has a default. If so,
3490         // the user doesn't need to type this argument.
3491         // FIXME: We need to abstract template parameters better!
3492         bool HasDefaultArg = false;
3493         NamedDecl *Param = FunTmpl->getTemplateParameters()->getParam(
3494             LastDeducibleArgument - 1);
3495         if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param))
3496           HasDefaultArg = TTP->hasDefaultArgument();
3497         else if (NonTypeTemplateParmDecl *NTTP =
3498                      dyn_cast<NonTypeTemplateParmDecl>(Param))
3499           HasDefaultArg = NTTP->hasDefaultArgument();
3500         else {
3501           assert(isa<TemplateTemplateParmDecl>(Param));
3502           HasDefaultArg =
3503               cast<TemplateTemplateParmDecl>(Param)->hasDefaultArgument();
3504         }
3505 
3506         if (!HasDefaultArg)
3507           break;
3508       }
3509     }
3510 
3511     if (LastDeducibleArgument) {
3512       // Some of the function template arguments cannot be deduced from a
3513       // function call, so we introduce an explicit template argument list
3514       // containing all of the arguments up to the first deducible argument.
3515       Result.AddChunk(CodeCompletionString::CK_LeftAngle);
3516       AddTemplateParameterChunks(Ctx, Policy, FunTmpl, Result,
3517                                  LastDeducibleArgument);
3518       Result.AddChunk(CodeCompletionString::CK_RightAngle);
3519     }
3520 
3521     // Add the function parameters
3522     Result.AddChunk(CodeCompletionString::CK_LeftParen);
3523     AddFunctionParameterChunks(PP, Policy, Function, Result);
3524     Result.AddChunk(CodeCompletionString::CK_RightParen);
3525     AddFunctionTypeQualsToCompletionString(Result, Function);
3526     return Result.TakeString();
3527   }
3528 
3529   if (const auto *Template = dyn_cast<TemplateDecl>(ND)) {
3530     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
3531                                    Ctx, Policy);
3532     Result.AddTypedTextChunk(
3533         Result.getAllocator().CopyString(Template->getNameAsString()));
3534     Result.AddChunk(CodeCompletionString::CK_LeftAngle);
3535     AddTemplateParameterChunks(Ctx, Policy, Template, Result);
3536     Result.AddChunk(CodeCompletionString::CK_RightAngle);
3537     return Result.TakeString();
3538   }
3539 
3540   if (const auto *Method = dyn_cast<ObjCMethodDecl>(ND)) {
3541     Selector Sel = Method->getSelector();
3542     if (Sel.isUnarySelector()) {
3543       Result.AddTypedTextChunk(
3544           Result.getAllocator().CopyString(Sel.getNameForSlot(0)));
3545       return Result.TakeString();
3546     }
3547 
3548     std::string SelName = Sel.getNameForSlot(0).str();
3549     SelName += ':';
3550     if (StartParameter == 0)
3551       Result.AddTypedTextChunk(Result.getAllocator().CopyString(SelName));
3552     else {
3553       Result.AddInformativeChunk(Result.getAllocator().CopyString(SelName));
3554 
3555       // If there is only one parameter, and we're past it, add an empty
3556       // typed-text chunk since there is nothing to type.
3557       if (Method->param_size() == 1)
3558         Result.AddTypedTextChunk("");
3559     }
3560     unsigned Idx = 0;
3561     // The extra Idx < Sel.getNumArgs() check is needed due to legacy C-style
3562     // method parameters.
3563     for (ObjCMethodDecl::param_const_iterator P = Method->param_begin(),
3564                                               PEnd = Method->param_end();
3565          P != PEnd && Idx < Sel.getNumArgs(); (void)++P, ++Idx) {
3566       if (Idx > 0) {
3567         std::string Keyword;
3568         if (Idx > StartParameter)
3569           Result.AddChunk(CodeCompletionString::CK_HorizontalSpace);
3570         if (IdentifierInfo *II = Sel.getIdentifierInfoForSlot(Idx))
3571           Keyword += II->getName();
3572         Keyword += ":";
3573         if (Idx < StartParameter || AllParametersAreInformative)
3574           Result.AddInformativeChunk(Result.getAllocator().CopyString(Keyword));
3575         else
3576           Result.AddTypedTextChunk(Result.getAllocator().CopyString(Keyword));
3577       }
3578 
3579       // If we're before the starting parameter, skip the placeholder.
3580       if (Idx < StartParameter)
3581         continue;
3582 
3583       std::string Arg;
3584       QualType ParamType = (*P)->getType();
3585       Optional<ArrayRef<QualType>> ObjCSubsts;
3586       if (!CCContext.getBaseType().isNull())
3587         ObjCSubsts = CCContext.getBaseType()->getObjCSubstitutions(Method);
3588 
3589       if (ParamType->isBlockPointerType() && !DeclaringEntity)
3590         Arg = FormatFunctionParameter(Policy, *P, true,
3591                                       /*SuppressBlock=*/false, ObjCSubsts);
3592       else {
3593         if (ObjCSubsts)
3594           ParamType = ParamType.substObjCTypeArgs(
3595               Ctx, *ObjCSubsts, ObjCSubstitutionContext::Parameter);
3596         Arg = "(" + formatObjCParamQualifiers((*P)->getObjCDeclQualifier(),
3597                                               ParamType);
3598         Arg += ParamType.getAsString(Policy) + ")";
3599         if (IdentifierInfo *II = (*P)->getIdentifier())
3600           if (DeclaringEntity || AllParametersAreInformative)
3601             Arg += II->getName();
3602       }
3603 
3604       if (Method->isVariadic() && (P + 1) == PEnd)
3605         Arg += ", ...";
3606 
3607       if (DeclaringEntity)
3608         Result.AddTextChunk(Result.getAllocator().CopyString(Arg));
3609       else if (AllParametersAreInformative)
3610         Result.AddInformativeChunk(Result.getAllocator().CopyString(Arg));
3611       else
3612         Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Arg));
3613     }
3614 
3615     if (Method->isVariadic()) {
3616       if (Method->param_size() == 0) {
3617         if (DeclaringEntity)
3618           Result.AddTextChunk(", ...");
3619         else if (AllParametersAreInformative)
3620           Result.AddInformativeChunk(", ...");
3621         else
3622           Result.AddPlaceholderChunk(", ...");
3623       }
3624 
3625       MaybeAddSentinel(PP, Method, Result);
3626     }
3627 
3628     return Result.TakeString();
3629   }
3630 
3631   if (Qualifier)
3632     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
3633                                    Ctx, Policy);
3634 
3635   Result.AddTypedTextChunk(
3636       Result.getAllocator().CopyString(ND->getNameAsString()));
3637   return Result.TakeString();
3638 }
3639 
3640 const RawComment *clang::getCompletionComment(const ASTContext &Ctx,
3641                                               const NamedDecl *ND) {
3642   if (!ND)
3643     return nullptr;
3644   if (auto *RC = Ctx.getRawCommentForAnyRedecl(ND))
3645     return RC;
3646 
3647   // Try to find comment from a property for ObjC methods.
3648   const auto *M = dyn_cast<ObjCMethodDecl>(ND);
3649   if (!M)
3650     return nullptr;
3651   const ObjCPropertyDecl *PDecl = M->findPropertyDecl();
3652   if (!PDecl)
3653     return nullptr;
3654 
3655   return Ctx.getRawCommentForAnyRedecl(PDecl);
3656 }
3657 
3658 const RawComment *clang::getPatternCompletionComment(const ASTContext &Ctx,
3659                                                      const NamedDecl *ND) {
3660   const auto *M = dyn_cast_or_null<ObjCMethodDecl>(ND);
3661   if (!M || !M->isPropertyAccessor())
3662     return nullptr;
3663 
3664   // Provide code completion comment for self.GetterName where
3665   // GetterName is the getter method for a property with name
3666   // different from the property name (declared via a property
3667   // getter attribute.
3668   const ObjCPropertyDecl *PDecl = M->findPropertyDecl();
3669   if (!PDecl)
3670     return nullptr;
3671   if (PDecl->getGetterName() == M->getSelector() &&
3672       PDecl->getIdentifier() != M->getIdentifier()) {
3673     if (auto *RC = Ctx.getRawCommentForAnyRedecl(M))
3674       return RC;
3675     if (auto *RC = Ctx.getRawCommentForAnyRedecl(PDecl))
3676       return RC;
3677   }
3678   return nullptr;
3679 }
3680 
3681 const RawComment *clang::getParameterComment(
3682     const ASTContext &Ctx,
3683     const CodeCompleteConsumer::OverloadCandidate &Result, unsigned ArgIndex) {
3684   auto FDecl = Result.getFunction();
3685   if (!FDecl)
3686     return nullptr;
3687   if (ArgIndex < FDecl->getNumParams())
3688     return Ctx.getRawCommentForAnyRedecl(FDecl->getParamDecl(ArgIndex));
3689   return nullptr;
3690 }
3691 
3692 /// Add function overload parameter chunks to the given code completion
3693 /// string.
3694 static void AddOverloadParameterChunks(ASTContext &Context,
3695                                        const PrintingPolicy &Policy,
3696                                        const FunctionDecl *Function,
3697                                        const FunctionProtoType *Prototype,
3698                                        CodeCompletionBuilder &Result,
3699                                        unsigned CurrentArg, unsigned Start = 0,
3700                                        bool InOptional = false) {
3701   bool FirstParameter = true;
3702   unsigned NumParams =
3703       Function ? Function->getNumParams() : Prototype->getNumParams();
3704 
3705   for (unsigned P = Start; P != NumParams; ++P) {
3706     if (Function && Function->getParamDecl(P)->hasDefaultArg() && !InOptional) {
3707       // When we see an optional default argument, put that argument and
3708       // the remaining default arguments into a new, optional string.
3709       CodeCompletionBuilder Opt(Result.getAllocator(),
3710                                 Result.getCodeCompletionTUInfo());
3711       if (!FirstParameter)
3712         Opt.AddChunk(CodeCompletionString::CK_Comma);
3713       // Optional sections are nested.
3714       AddOverloadParameterChunks(Context, Policy, Function, Prototype, Opt,
3715                                  CurrentArg, P, /*InOptional=*/true);
3716       Result.AddOptionalChunk(Opt.TakeString());
3717       return;
3718     }
3719 
3720     if (FirstParameter)
3721       FirstParameter = false;
3722     else
3723       Result.AddChunk(CodeCompletionString::CK_Comma);
3724 
3725     InOptional = false;
3726 
3727     // Format the placeholder string.
3728     std::string Placeholder;
3729     if (Function) {
3730       const ParmVarDecl *Param = Function->getParamDecl(P);
3731       Placeholder = FormatFunctionParameter(Policy, Param);
3732       if (Param->hasDefaultArg())
3733         Placeholder += GetDefaultValueString(Param, Context.getSourceManager(),
3734                                              Context.getLangOpts());
3735     } else {
3736       Placeholder = Prototype->getParamType(P).getAsString(Policy);
3737     }
3738 
3739     if (P == CurrentArg)
3740       Result.AddCurrentParameterChunk(
3741           Result.getAllocator().CopyString(Placeholder));
3742     else
3743       Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Placeholder));
3744   }
3745 
3746   if (Prototype && Prototype->isVariadic()) {
3747     CodeCompletionBuilder Opt(Result.getAllocator(),
3748                               Result.getCodeCompletionTUInfo());
3749     if (!FirstParameter)
3750       Opt.AddChunk(CodeCompletionString::CK_Comma);
3751 
3752     if (CurrentArg < NumParams)
3753       Opt.AddPlaceholderChunk("...");
3754     else
3755       Opt.AddCurrentParameterChunk("...");
3756 
3757     Result.AddOptionalChunk(Opt.TakeString());
3758   }
3759 }
3760 
3761 CodeCompletionString *
3762 CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(
3763     unsigned CurrentArg, Sema &S, CodeCompletionAllocator &Allocator,
3764     CodeCompletionTUInfo &CCTUInfo, bool IncludeBriefComments) const {
3765   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
3766   // Show signatures of constructors as they are declared:
3767   //   vector(int n) rather than vector<string>(int n)
3768   // This is less noisy without being less clear, and avoids tricky cases.
3769   Policy.SuppressTemplateArgsInCXXConstructors = true;
3770 
3771   // FIXME: Set priority, availability appropriately.
3772   CodeCompletionBuilder Result(Allocator, CCTUInfo, 1,
3773                                CXAvailability_Available);
3774   FunctionDecl *FDecl = getFunction();
3775   const FunctionProtoType *Proto =
3776       dyn_cast<FunctionProtoType>(getFunctionType());
3777   if (!FDecl && !Proto) {
3778     // Function without a prototype. Just give the return type and a
3779     // highlighted ellipsis.
3780     const FunctionType *FT = getFunctionType();
3781     Result.AddResultTypeChunk(Result.getAllocator().CopyString(
3782         FT->getReturnType().getAsString(Policy)));
3783     Result.AddChunk(CodeCompletionString::CK_LeftParen);
3784     Result.AddChunk(CodeCompletionString::CK_CurrentParameter, "...");
3785     Result.AddChunk(CodeCompletionString::CK_RightParen);
3786     return Result.TakeString();
3787   }
3788 
3789   if (FDecl) {
3790     if (IncludeBriefComments) {
3791       if (auto RC = getParameterComment(S.getASTContext(), *this, CurrentArg))
3792         Result.addBriefComment(RC->getBriefText(S.getASTContext()));
3793     }
3794     AddResultTypeChunk(S.Context, Policy, FDecl, QualType(), Result);
3795 
3796     std::string Name;
3797     llvm::raw_string_ostream OS(Name);
3798     FDecl->getDeclName().print(OS, Policy);
3799     Result.AddTextChunk(Result.getAllocator().CopyString(OS.str()));
3800   } else {
3801     Result.AddResultTypeChunk(Result.getAllocator().CopyString(
3802         Proto->getReturnType().getAsString(Policy)));
3803   }
3804 
3805   Result.AddChunk(CodeCompletionString::CK_LeftParen);
3806   AddOverloadParameterChunks(S.getASTContext(), Policy, FDecl, Proto, Result,
3807                              CurrentArg);
3808   Result.AddChunk(CodeCompletionString::CK_RightParen);
3809 
3810   return Result.TakeString();
3811 }
3812 
3813 unsigned clang::getMacroUsagePriority(StringRef MacroName,
3814                                       const LangOptions &LangOpts,
3815                                       bool PreferredTypeIsPointer) {
3816   unsigned Priority = CCP_Macro;
3817 
3818   // Treat the "nil", "Nil" and "NULL" macros as null pointer constants.
3819   if (MacroName.equals("nil") || MacroName.equals("NULL") ||
3820       MacroName.equals("Nil")) {
3821     Priority = CCP_Constant;
3822     if (PreferredTypeIsPointer)
3823       Priority = Priority / CCF_SimilarTypeMatch;
3824   }
3825   // Treat "YES", "NO", "true", and "false" as constants.
3826   else if (MacroName.equals("YES") || MacroName.equals("NO") ||
3827            MacroName.equals("true") || MacroName.equals("false"))
3828     Priority = CCP_Constant;
3829   // Treat "bool" as a type.
3830   else if (MacroName.equals("bool"))
3831     Priority = CCP_Type + (LangOpts.ObjC ? CCD_bool_in_ObjC : 0);
3832 
3833   return Priority;
3834 }
3835 
3836 CXCursorKind clang::getCursorKindForDecl(const Decl *D) {
3837   if (!D)
3838     return CXCursor_UnexposedDecl;
3839 
3840   switch (D->getKind()) {
3841   case Decl::Enum:
3842     return CXCursor_EnumDecl;
3843   case Decl::EnumConstant:
3844     return CXCursor_EnumConstantDecl;
3845   case Decl::Field:
3846     return CXCursor_FieldDecl;
3847   case Decl::Function:
3848     return CXCursor_FunctionDecl;
3849   case Decl::ObjCCategory:
3850     return CXCursor_ObjCCategoryDecl;
3851   case Decl::ObjCCategoryImpl:
3852     return CXCursor_ObjCCategoryImplDecl;
3853   case Decl::ObjCImplementation:
3854     return CXCursor_ObjCImplementationDecl;
3855 
3856   case Decl::ObjCInterface:
3857     return CXCursor_ObjCInterfaceDecl;
3858   case Decl::ObjCIvar:
3859     return CXCursor_ObjCIvarDecl;
3860   case Decl::ObjCMethod:
3861     return cast<ObjCMethodDecl>(D)->isInstanceMethod()
3862                ? CXCursor_ObjCInstanceMethodDecl
3863                : CXCursor_ObjCClassMethodDecl;
3864   case Decl::CXXMethod:
3865     return CXCursor_CXXMethod;
3866   case Decl::CXXConstructor:
3867     return CXCursor_Constructor;
3868   case Decl::CXXDestructor:
3869     return CXCursor_Destructor;
3870   case Decl::CXXConversion:
3871     return CXCursor_ConversionFunction;
3872   case Decl::ObjCProperty:
3873     return CXCursor_ObjCPropertyDecl;
3874   case Decl::ObjCProtocol:
3875     return CXCursor_ObjCProtocolDecl;
3876   case Decl::ParmVar:
3877     return CXCursor_ParmDecl;
3878   case Decl::Typedef:
3879     return CXCursor_TypedefDecl;
3880   case Decl::TypeAlias:
3881     return CXCursor_TypeAliasDecl;
3882   case Decl::TypeAliasTemplate:
3883     return CXCursor_TypeAliasTemplateDecl;
3884   case Decl::Var:
3885     return CXCursor_VarDecl;
3886   case Decl::Namespace:
3887     return CXCursor_Namespace;
3888   case Decl::NamespaceAlias:
3889     return CXCursor_NamespaceAlias;
3890   case Decl::TemplateTypeParm:
3891     return CXCursor_TemplateTypeParameter;
3892   case Decl::NonTypeTemplateParm:
3893     return CXCursor_NonTypeTemplateParameter;
3894   case Decl::TemplateTemplateParm:
3895     return CXCursor_TemplateTemplateParameter;
3896   case Decl::FunctionTemplate:
3897     return CXCursor_FunctionTemplate;
3898   case Decl::ClassTemplate:
3899     return CXCursor_ClassTemplate;
3900   case Decl::AccessSpec:
3901     return CXCursor_CXXAccessSpecifier;
3902   case Decl::ClassTemplatePartialSpecialization:
3903     return CXCursor_ClassTemplatePartialSpecialization;
3904   case Decl::UsingDirective:
3905     return CXCursor_UsingDirective;
3906   case Decl::StaticAssert:
3907     return CXCursor_StaticAssert;
3908   case Decl::Friend:
3909     return CXCursor_FriendDecl;
3910   case Decl::TranslationUnit:
3911     return CXCursor_TranslationUnit;
3912 
3913   case Decl::Using:
3914   case Decl::UnresolvedUsingValue:
3915   case Decl::UnresolvedUsingTypename:
3916     return CXCursor_UsingDeclaration;
3917 
3918   case Decl::UsingEnum:
3919     return CXCursor_EnumDecl;
3920 
3921   case Decl::ObjCPropertyImpl:
3922     switch (cast<ObjCPropertyImplDecl>(D)->getPropertyImplementation()) {
3923     case ObjCPropertyImplDecl::Dynamic:
3924       return CXCursor_ObjCDynamicDecl;
3925 
3926     case ObjCPropertyImplDecl::Synthesize:
3927       return CXCursor_ObjCSynthesizeDecl;
3928     }
3929     llvm_unreachable("Unexpected Kind!");
3930 
3931   case Decl::Import:
3932     return CXCursor_ModuleImportDecl;
3933 
3934   case Decl::ObjCTypeParam:
3935     return CXCursor_TemplateTypeParameter;
3936 
3937   default:
3938     if (const auto *TD = dyn_cast<TagDecl>(D)) {
3939       switch (TD->getTagKind()) {
3940       case TTK_Interface: // fall through
3941       case TTK_Struct:
3942         return CXCursor_StructDecl;
3943       case TTK_Class:
3944         return CXCursor_ClassDecl;
3945       case TTK_Union:
3946         return CXCursor_UnionDecl;
3947       case TTK_Enum:
3948         return CXCursor_EnumDecl;
3949       }
3950     }
3951   }
3952 
3953   return CXCursor_UnexposedDecl;
3954 }
3955 
3956 static void AddMacroResults(Preprocessor &PP, ResultBuilder &Results,
3957                             bool LoadExternal, bool IncludeUndefined,
3958                             bool TargetTypeIsPointer = false) {
3959   typedef CodeCompletionResult Result;
3960 
3961   Results.EnterNewScope();
3962 
3963   for (Preprocessor::macro_iterator M = PP.macro_begin(LoadExternal),
3964                                     MEnd = PP.macro_end(LoadExternal);
3965        M != MEnd; ++M) {
3966     auto MD = PP.getMacroDefinition(M->first);
3967     if (IncludeUndefined || MD) {
3968       MacroInfo *MI = MD.getMacroInfo();
3969       if (MI && MI->isUsedForHeaderGuard())
3970         continue;
3971 
3972       Results.AddResult(
3973           Result(M->first, MI,
3974                  getMacroUsagePriority(M->first->getName(), PP.getLangOpts(),
3975                                        TargetTypeIsPointer)));
3976     }
3977   }
3978 
3979   Results.ExitScope();
3980 }
3981 
3982 static void AddPrettyFunctionResults(const LangOptions &LangOpts,
3983                                      ResultBuilder &Results) {
3984   typedef CodeCompletionResult Result;
3985 
3986   Results.EnterNewScope();
3987 
3988   Results.AddResult(Result("__PRETTY_FUNCTION__", CCP_Constant));
3989   Results.AddResult(Result("__FUNCTION__", CCP_Constant));
3990   if (LangOpts.C99 || LangOpts.CPlusPlus11)
3991     Results.AddResult(Result("__func__", CCP_Constant));
3992   Results.ExitScope();
3993 }
3994 
3995 static void HandleCodeCompleteResults(Sema *S,
3996                                       CodeCompleteConsumer *CodeCompleter,
3997                                       CodeCompletionContext Context,
3998                                       CodeCompletionResult *Results,
3999                                       unsigned NumResults) {
4000   if (CodeCompleter)
4001     CodeCompleter->ProcessCodeCompleteResults(*S, Context, Results, NumResults);
4002 }
4003 
4004 static CodeCompletionContext
4005 mapCodeCompletionContext(Sema &S, Sema::ParserCompletionContext PCC) {
4006   switch (PCC) {
4007   case Sema::PCC_Namespace:
4008     return CodeCompletionContext::CCC_TopLevel;
4009 
4010   case Sema::PCC_Class:
4011     return CodeCompletionContext::CCC_ClassStructUnion;
4012 
4013   case Sema::PCC_ObjCInterface:
4014     return CodeCompletionContext::CCC_ObjCInterface;
4015 
4016   case Sema::PCC_ObjCImplementation:
4017     return CodeCompletionContext::CCC_ObjCImplementation;
4018 
4019   case Sema::PCC_ObjCInstanceVariableList:
4020     return CodeCompletionContext::CCC_ObjCIvarList;
4021 
4022   case Sema::PCC_Template:
4023   case Sema::PCC_MemberTemplate:
4024     if (S.CurContext->isFileContext())
4025       return CodeCompletionContext::CCC_TopLevel;
4026     if (S.CurContext->isRecord())
4027       return CodeCompletionContext::CCC_ClassStructUnion;
4028     return CodeCompletionContext::CCC_Other;
4029 
4030   case Sema::PCC_RecoveryInFunction:
4031     return CodeCompletionContext::CCC_Recovery;
4032 
4033   case Sema::PCC_ForInit:
4034     if (S.getLangOpts().CPlusPlus || S.getLangOpts().C99 ||
4035         S.getLangOpts().ObjC)
4036       return CodeCompletionContext::CCC_ParenthesizedExpression;
4037     else
4038       return CodeCompletionContext::CCC_Expression;
4039 
4040   case Sema::PCC_Expression:
4041     return CodeCompletionContext::CCC_Expression;
4042   case Sema::PCC_Condition:
4043     return CodeCompletionContext(CodeCompletionContext::CCC_Expression,
4044                                  S.getASTContext().BoolTy);
4045 
4046   case Sema::PCC_Statement:
4047     return CodeCompletionContext::CCC_Statement;
4048 
4049   case Sema::PCC_Type:
4050     return CodeCompletionContext::CCC_Type;
4051 
4052   case Sema::PCC_ParenthesizedExpression:
4053     return CodeCompletionContext::CCC_ParenthesizedExpression;
4054 
4055   case Sema::PCC_LocalDeclarationSpecifiers:
4056     return CodeCompletionContext::CCC_Type;
4057   }
4058 
4059   llvm_unreachable("Invalid ParserCompletionContext!");
4060 }
4061 
4062 /// If we're in a C++ virtual member function, add completion results
4063 /// that invoke the functions we override, since it's common to invoke the
4064 /// overridden function as well as adding new functionality.
4065 ///
4066 /// \param S The semantic analysis object for which we are generating results.
4067 ///
4068 /// \param InContext This context in which the nested-name-specifier preceding
4069 /// the code-completion point
4070 static void MaybeAddOverrideCalls(Sema &S, DeclContext *InContext,
4071                                   ResultBuilder &Results) {
4072   // Look through blocks.
4073   DeclContext *CurContext = S.CurContext;
4074   while (isa<BlockDecl>(CurContext))
4075     CurContext = CurContext->getParent();
4076 
4077   CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(CurContext);
4078   if (!Method || !Method->isVirtual())
4079     return;
4080 
4081   // We need to have names for all of the parameters, if we're going to
4082   // generate a forwarding call.
4083   for (auto P : Method->parameters())
4084     if (!P->getDeclName())
4085       return;
4086 
4087   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
4088   for (const CXXMethodDecl *Overridden : Method->overridden_methods()) {
4089     CodeCompletionBuilder Builder(Results.getAllocator(),
4090                                   Results.getCodeCompletionTUInfo());
4091     if (Overridden->getCanonicalDecl() == Method->getCanonicalDecl())
4092       continue;
4093 
4094     // If we need a nested-name-specifier, add one now.
4095     if (!InContext) {
4096       NestedNameSpecifier *NNS = getRequiredQualification(
4097           S.Context, CurContext, Overridden->getDeclContext());
4098       if (NNS) {
4099         std::string Str;
4100         llvm::raw_string_ostream OS(Str);
4101         NNS->print(OS, Policy);
4102         Builder.AddTextChunk(Results.getAllocator().CopyString(OS.str()));
4103       }
4104     } else if (!InContext->Equals(Overridden->getDeclContext()))
4105       continue;
4106 
4107     Builder.AddTypedTextChunk(
4108         Results.getAllocator().CopyString(Overridden->getNameAsString()));
4109     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4110     bool FirstParam = true;
4111     for (auto P : Method->parameters()) {
4112       if (FirstParam)
4113         FirstParam = false;
4114       else
4115         Builder.AddChunk(CodeCompletionString::CK_Comma);
4116 
4117       Builder.AddPlaceholderChunk(
4118           Results.getAllocator().CopyString(P->getIdentifier()->getName()));
4119     }
4120     Builder.AddChunk(CodeCompletionString::CK_RightParen);
4121     Results.AddResult(CodeCompletionResult(
4122         Builder.TakeString(), CCP_SuperCompletion, CXCursor_CXXMethod,
4123         CXAvailability_Available, Overridden));
4124     Results.Ignore(Overridden);
4125   }
4126 }
4127 
4128 void Sema::CodeCompleteModuleImport(SourceLocation ImportLoc,
4129                                     ModuleIdPath Path) {
4130   typedef CodeCompletionResult Result;
4131   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4132                         CodeCompleter->getCodeCompletionTUInfo(),
4133                         CodeCompletionContext::CCC_Other);
4134   Results.EnterNewScope();
4135 
4136   CodeCompletionAllocator &Allocator = Results.getAllocator();
4137   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
4138   typedef CodeCompletionResult Result;
4139   if (Path.empty()) {
4140     // Enumerate all top-level modules.
4141     SmallVector<Module *, 8> Modules;
4142     PP.getHeaderSearchInfo().collectAllModules(Modules);
4143     for (unsigned I = 0, N = Modules.size(); I != N; ++I) {
4144       Builder.AddTypedTextChunk(
4145           Builder.getAllocator().CopyString(Modules[I]->Name));
4146       Results.AddResult(Result(
4147           Builder.TakeString(), CCP_Declaration, CXCursor_ModuleImportDecl,
4148           Modules[I]->isAvailable() ? CXAvailability_Available
4149                                     : CXAvailability_NotAvailable));
4150     }
4151   } else if (getLangOpts().Modules) {
4152     // Load the named module.
4153     Module *Mod =
4154         PP.getModuleLoader().loadModule(ImportLoc, Path, Module::AllVisible,
4155                                         /*IsInclusionDirective=*/false);
4156     // Enumerate submodules.
4157     if (Mod) {
4158       for (Module::submodule_iterator Sub = Mod->submodule_begin(),
4159                                       SubEnd = Mod->submodule_end();
4160            Sub != SubEnd; ++Sub) {
4161 
4162         Builder.AddTypedTextChunk(
4163             Builder.getAllocator().CopyString((*Sub)->Name));
4164         Results.AddResult(Result(
4165             Builder.TakeString(), CCP_Declaration, CXCursor_ModuleImportDecl,
4166             (*Sub)->isAvailable() ? CXAvailability_Available
4167                                   : CXAvailability_NotAvailable));
4168       }
4169     }
4170   }
4171   Results.ExitScope();
4172   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4173                             Results.data(), Results.size());
4174 }
4175 
4176 void Sema::CodeCompleteOrdinaryName(Scope *S,
4177                                     ParserCompletionContext CompletionContext) {
4178   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4179                         CodeCompleter->getCodeCompletionTUInfo(),
4180                         mapCodeCompletionContext(*this, CompletionContext));
4181   Results.EnterNewScope();
4182 
4183   // Determine how to filter results, e.g., so that the names of
4184   // values (functions, enumerators, function templates, etc.) are
4185   // only allowed where we can have an expression.
4186   switch (CompletionContext) {
4187   case PCC_Namespace:
4188   case PCC_Class:
4189   case PCC_ObjCInterface:
4190   case PCC_ObjCImplementation:
4191   case PCC_ObjCInstanceVariableList:
4192   case PCC_Template:
4193   case PCC_MemberTemplate:
4194   case PCC_Type:
4195   case PCC_LocalDeclarationSpecifiers:
4196     Results.setFilter(&ResultBuilder::IsOrdinaryNonValueName);
4197     break;
4198 
4199   case PCC_Statement:
4200   case PCC_ParenthesizedExpression:
4201   case PCC_Expression:
4202   case PCC_ForInit:
4203   case PCC_Condition:
4204     if (WantTypesInContext(CompletionContext, getLangOpts()))
4205       Results.setFilter(&ResultBuilder::IsOrdinaryName);
4206     else
4207       Results.setFilter(&ResultBuilder::IsOrdinaryNonTypeName);
4208 
4209     if (getLangOpts().CPlusPlus)
4210       MaybeAddOverrideCalls(*this, /*InContext=*/nullptr, Results);
4211     break;
4212 
4213   case PCC_RecoveryInFunction:
4214     // Unfiltered
4215     break;
4216   }
4217 
4218   // If we are in a C++ non-static member function, check the qualifiers on
4219   // the member function to filter/prioritize the results list.
4220   auto ThisType = getCurrentThisType();
4221   if (!ThisType.isNull())
4222     Results.setObjectTypeQualifiers(ThisType->getPointeeType().getQualifiers(),
4223                                     VK_LValue);
4224 
4225   CodeCompletionDeclConsumer Consumer(Results, CurContext);
4226   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
4227                      CodeCompleter->includeGlobals(),
4228                      CodeCompleter->loadExternal());
4229 
4230   AddOrdinaryNameResults(CompletionContext, S, *this, Results);
4231   Results.ExitScope();
4232 
4233   switch (CompletionContext) {
4234   case PCC_ParenthesizedExpression:
4235   case PCC_Expression:
4236   case PCC_Statement:
4237   case PCC_RecoveryInFunction:
4238     if (S->getFnParent())
4239       AddPrettyFunctionResults(getLangOpts(), Results);
4240     break;
4241 
4242   case PCC_Namespace:
4243   case PCC_Class:
4244   case PCC_ObjCInterface:
4245   case PCC_ObjCImplementation:
4246   case PCC_ObjCInstanceVariableList:
4247   case PCC_Template:
4248   case PCC_MemberTemplate:
4249   case PCC_ForInit:
4250   case PCC_Condition:
4251   case PCC_Type:
4252   case PCC_LocalDeclarationSpecifiers:
4253     break;
4254   }
4255 
4256   if (CodeCompleter->includeMacros())
4257     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
4258 
4259   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4260                             Results.data(), Results.size());
4261 }
4262 
4263 static void AddClassMessageCompletions(Sema &SemaRef, Scope *S,
4264                                        ParsedType Receiver,
4265                                        ArrayRef<IdentifierInfo *> SelIdents,
4266                                        bool AtArgumentExpression, bool IsSuper,
4267                                        ResultBuilder &Results);
4268 
4269 void Sema::CodeCompleteDeclSpec(Scope *S, DeclSpec &DS,
4270                                 bool AllowNonIdentifiers,
4271                                 bool AllowNestedNameSpecifiers) {
4272   typedef CodeCompletionResult Result;
4273   ResultBuilder Results(
4274       *this, CodeCompleter->getAllocator(),
4275       CodeCompleter->getCodeCompletionTUInfo(),
4276       AllowNestedNameSpecifiers
4277           // FIXME: Try to separate codepath leading here to deduce whether we
4278           // need an existing symbol or a new one.
4279           ? CodeCompletionContext::CCC_SymbolOrNewName
4280           : CodeCompletionContext::CCC_NewName);
4281   Results.EnterNewScope();
4282 
4283   // Type qualifiers can come after names.
4284   Results.AddResult(Result("const"));
4285   Results.AddResult(Result("volatile"));
4286   if (getLangOpts().C99)
4287     Results.AddResult(Result("restrict"));
4288 
4289   if (getLangOpts().CPlusPlus) {
4290     if (getLangOpts().CPlusPlus11 &&
4291         (DS.getTypeSpecType() == DeclSpec::TST_class ||
4292          DS.getTypeSpecType() == DeclSpec::TST_struct))
4293       Results.AddResult("final");
4294 
4295     if (AllowNonIdentifiers) {
4296       Results.AddResult(Result("operator"));
4297     }
4298 
4299     // Add nested-name-specifiers.
4300     if (AllowNestedNameSpecifiers) {
4301       Results.allowNestedNameSpecifiers();
4302       Results.setFilter(&ResultBuilder::IsImpossibleToSatisfy);
4303       CodeCompletionDeclConsumer Consumer(Results, CurContext);
4304       LookupVisibleDecls(S, LookupNestedNameSpecifierName, Consumer,
4305                          CodeCompleter->includeGlobals(),
4306                          CodeCompleter->loadExternal());
4307       Results.setFilter(nullptr);
4308     }
4309   }
4310   Results.ExitScope();
4311 
4312   // If we're in a context where we might have an expression (rather than a
4313   // declaration), and what we've seen so far is an Objective-C type that could
4314   // be a receiver of a class message, this may be a class message send with
4315   // the initial opening bracket '[' missing. Add appropriate completions.
4316   if (AllowNonIdentifiers && !AllowNestedNameSpecifiers &&
4317       DS.getParsedSpecifiers() == DeclSpec::PQ_TypeSpecifier &&
4318       DS.getTypeSpecType() == DeclSpec::TST_typename &&
4319       DS.getTypeSpecComplex() == DeclSpec::TSC_unspecified &&
4320       DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified &&
4321       !DS.isTypeAltiVecVector() && S &&
4322       (S->getFlags() & Scope::DeclScope) != 0 &&
4323       (S->getFlags() & (Scope::ClassScope | Scope::TemplateParamScope |
4324                         Scope::FunctionPrototypeScope | Scope::AtCatchScope)) ==
4325           0) {
4326     ParsedType T = DS.getRepAsType();
4327     if (!T.get().isNull() && T.get()->isObjCObjectOrInterfaceType())
4328       AddClassMessageCompletions(*this, S, T, None, false, false, Results);
4329   }
4330 
4331   // Note that we intentionally suppress macro results here, since we do not
4332   // encourage using macros to produce the names of entities.
4333 
4334   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4335                             Results.data(), Results.size());
4336 }
4337 
4338 struct Sema::CodeCompleteExpressionData {
4339   CodeCompleteExpressionData(QualType PreferredType = QualType(),
4340                              bool IsParenthesized = false)
4341       : PreferredType(PreferredType), IntegralConstantExpression(false),
4342         ObjCCollection(false), IsParenthesized(IsParenthesized) {}
4343 
4344   QualType PreferredType;
4345   bool IntegralConstantExpression;
4346   bool ObjCCollection;
4347   bool IsParenthesized;
4348   SmallVector<Decl *, 4> IgnoreDecls;
4349 };
4350 
4351 namespace {
4352 /// Information that allows to avoid completing redundant enumerators.
4353 struct CoveredEnumerators {
4354   llvm::SmallPtrSet<EnumConstantDecl *, 8> Seen;
4355   NestedNameSpecifier *SuggestedQualifier = nullptr;
4356 };
4357 } // namespace
4358 
4359 static void AddEnumerators(ResultBuilder &Results, ASTContext &Context,
4360                            EnumDecl *Enum, DeclContext *CurContext,
4361                            const CoveredEnumerators &Enumerators) {
4362   NestedNameSpecifier *Qualifier = Enumerators.SuggestedQualifier;
4363   if (Context.getLangOpts().CPlusPlus && !Qualifier && Enumerators.Seen.empty()) {
4364     // If there are no prior enumerators in C++, check whether we have to
4365     // qualify the names of the enumerators that we suggest, because they
4366     // may not be visible in this scope.
4367     Qualifier = getRequiredQualification(Context, CurContext, Enum);
4368   }
4369 
4370   Results.EnterNewScope();
4371   for (auto *E : Enum->enumerators()) {
4372     if (Enumerators.Seen.count(E))
4373       continue;
4374 
4375     CodeCompletionResult R(E, CCP_EnumInCase, Qualifier);
4376     Results.AddResult(R, CurContext, nullptr, false);
4377   }
4378   Results.ExitScope();
4379 }
4380 
4381 /// Try to find a corresponding FunctionProtoType for function-like types (e.g.
4382 /// function pointers, std::function, etc).
4383 static const FunctionProtoType *TryDeconstructFunctionLike(QualType T) {
4384   assert(!T.isNull());
4385   // Try to extract first template argument from std::function<> and similar.
4386   // Note we only handle the sugared types, they closely match what users wrote.
4387   // We explicitly choose to not handle ClassTemplateSpecializationDecl.
4388   if (auto *Specialization = T->getAs<TemplateSpecializationType>()) {
4389     if (Specialization->getNumArgs() != 1)
4390       return nullptr;
4391     const TemplateArgument &Argument = Specialization->getArg(0);
4392     if (Argument.getKind() != TemplateArgument::Type)
4393       return nullptr;
4394     return Argument.getAsType()->getAs<FunctionProtoType>();
4395   }
4396   // Handle other cases.
4397   if (T->isPointerType())
4398     T = T->getPointeeType();
4399   return T->getAs<FunctionProtoType>();
4400 }
4401 
4402 /// Adds a pattern completion for a lambda expression with the specified
4403 /// parameter types and placeholders for parameter names.
4404 static void AddLambdaCompletion(ResultBuilder &Results,
4405                                 llvm::ArrayRef<QualType> Parameters,
4406                                 const LangOptions &LangOpts) {
4407   if (!Results.includeCodePatterns())
4408     return;
4409   CodeCompletionBuilder Completion(Results.getAllocator(),
4410                                    Results.getCodeCompletionTUInfo());
4411   // [](<parameters>) {}
4412   Completion.AddChunk(CodeCompletionString::CK_LeftBracket);
4413   Completion.AddPlaceholderChunk("=");
4414   Completion.AddChunk(CodeCompletionString::CK_RightBracket);
4415   if (!Parameters.empty()) {
4416     Completion.AddChunk(CodeCompletionString::CK_LeftParen);
4417     bool First = true;
4418     for (auto Parameter : Parameters) {
4419       if (!First)
4420         Completion.AddChunk(CodeCompletionString::ChunkKind::CK_Comma);
4421       else
4422         First = false;
4423 
4424       constexpr llvm::StringLiteral NamePlaceholder = "!#!NAME_GOES_HERE!#!";
4425       std::string Type = std::string(NamePlaceholder);
4426       Parameter.getAsStringInternal(Type, PrintingPolicy(LangOpts));
4427       llvm::StringRef Prefix, Suffix;
4428       std::tie(Prefix, Suffix) = llvm::StringRef(Type).split(NamePlaceholder);
4429       Prefix = Prefix.rtrim();
4430       Suffix = Suffix.ltrim();
4431 
4432       Completion.AddTextChunk(Completion.getAllocator().CopyString(Prefix));
4433       Completion.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4434       Completion.AddPlaceholderChunk("parameter");
4435       Completion.AddTextChunk(Completion.getAllocator().CopyString(Suffix));
4436     };
4437     Completion.AddChunk(CodeCompletionString::CK_RightParen);
4438   }
4439   Completion.AddChunk(clang::CodeCompletionString::CK_HorizontalSpace);
4440   Completion.AddChunk(CodeCompletionString::CK_LeftBrace);
4441   Completion.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4442   Completion.AddPlaceholderChunk("body");
4443   Completion.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4444   Completion.AddChunk(CodeCompletionString::CK_RightBrace);
4445 
4446   Results.AddResult(Completion.TakeString());
4447 }
4448 
4449 /// Perform code-completion in an expression context when we know what
4450 /// type we're looking for.
4451 void Sema::CodeCompleteExpression(Scope *S,
4452                                   const CodeCompleteExpressionData &Data) {
4453   ResultBuilder Results(
4454       *this, CodeCompleter->getAllocator(),
4455       CodeCompleter->getCodeCompletionTUInfo(),
4456       CodeCompletionContext(
4457           Data.IsParenthesized
4458               ? CodeCompletionContext::CCC_ParenthesizedExpression
4459               : CodeCompletionContext::CCC_Expression,
4460           Data.PreferredType));
4461   auto PCC =
4462       Data.IsParenthesized ? PCC_ParenthesizedExpression : PCC_Expression;
4463   if (Data.ObjCCollection)
4464     Results.setFilter(&ResultBuilder::IsObjCCollection);
4465   else if (Data.IntegralConstantExpression)
4466     Results.setFilter(&ResultBuilder::IsIntegralConstantValue);
4467   else if (WantTypesInContext(PCC, getLangOpts()))
4468     Results.setFilter(&ResultBuilder::IsOrdinaryName);
4469   else
4470     Results.setFilter(&ResultBuilder::IsOrdinaryNonTypeName);
4471 
4472   if (!Data.PreferredType.isNull())
4473     Results.setPreferredType(Data.PreferredType.getNonReferenceType());
4474 
4475   // Ignore any declarations that we were told that we don't care about.
4476   for (unsigned I = 0, N = Data.IgnoreDecls.size(); I != N; ++I)
4477     Results.Ignore(Data.IgnoreDecls[I]);
4478 
4479   CodeCompletionDeclConsumer Consumer(Results, CurContext);
4480   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
4481                      CodeCompleter->includeGlobals(),
4482                      CodeCompleter->loadExternal());
4483 
4484   Results.EnterNewScope();
4485   AddOrdinaryNameResults(PCC, S, *this, Results);
4486   Results.ExitScope();
4487 
4488   bool PreferredTypeIsPointer = false;
4489   if (!Data.PreferredType.isNull()) {
4490     PreferredTypeIsPointer = Data.PreferredType->isAnyPointerType() ||
4491                              Data.PreferredType->isMemberPointerType() ||
4492                              Data.PreferredType->isBlockPointerType();
4493     if (Data.PreferredType->isEnumeralType()) {
4494       EnumDecl *Enum = Data.PreferredType->castAs<EnumType>()->getDecl();
4495       if (auto *Def = Enum->getDefinition())
4496         Enum = Def;
4497       // FIXME: collect covered enumerators in cases like:
4498       //        if (x == my_enum::one) { ... } else if (x == ^) {}
4499       AddEnumerators(Results, Context, Enum, CurContext, CoveredEnumerators());
4500     }
4501   }
4502 
4503   if (S->getFnParent() && !Data.ObjCCollection &&
4504       !Data.IntegralConstantExpression)
4505     AddPrettyFunctionResults(getLangOpts(), Results);
4506 
4507   if (CodeCompleter->includeMacros())
4508     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false,
4509                     PreferredTypeIsPointer);
4510 
4511   // Complete a lambda expression when preferred type is a function.
4512   if (!Data.PreferredType.isNull() && getLangOpts().CPlusPlus11) {
4513     if (const FunctionProtoType *F =
4514             TryDeconstructFunctionLike(Data.PreferredType))
4515       AddLambdaCompletion(Results, F->getParamTypes(), getLangOpts());
4516   }
4517 
4518   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4519                             Results.data(), Results.size());
4520 }
4521 
4522 void Sema::CodeCompleteExpression(Scope *S, QualType PreferredType,
4523                                   bool IsParenthesized) {
4524   return CodeCompleteExpression(
4525       S, CodeCompleteExpressionData(PreferredType, IsParenthesized));
4526 }
4527 
4528 void Sema::CodeCompletePostfixExpression(Scope *S, ExprResult E,
4529                                          QualType PreferredType) {
4530   if (E.isInvalid())
4531     CodeCompleteExpression(S, PreferredType);
4532   else if (getLangOpts().ObjC)
4533     CodeCompleteObjCInstanceMessage(S, E.get(), None, false);
4534 }
4535 
4536 /// The set of properties that have already been added, referenced by
4537 /// property name.
4538 typedef llvm::SmallPtrSet<IdentifierInfo *, 16> AddedPropertiesSet;
4539 
4540 /// Retrieve the container definition, if any?
4541 static ObjCContainerDecl *getContainerDef(ObjCContainerDecl *Container) {
4542   if (ObjCInterfaceDecl *Interface = dyn_cast<ObjCInterfaceDecl>(Container)) {
4543     if (Interface->hasDefinition())
4544       return Interface->getDefinition();
4545 
4546     return Interface;
4547   }
4548 
4549   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
4550     if (Protocol->hasDefinition())
4551       return Protocol->getDefinition();
4552 
4553     return Protocol;
4554   }
4555   return Container;
4556 }
4557 
4558 /// Adds a block invocation code completion result for the given block
4559 /// declaration \p BD.
4560 static void AddObjCBlockCall(ASTContext &Context, const PrintingPolicy &Policy,
4561                              CodeCompletionBuilder &Builder,
4562                              const NamedDecl *BD,
4563                              const FunctionTypeLoc &BlockLoc,
4564                              const FunctionProtoTypeLoc &BlockProtoLoc) {
4565   Builder.AddResultTypeChunk(
4566       GetCompletionTypeString(BlockLoc.getReturnLoc().getType(), Context,
4567                               Policy, Builder.getAllocator()));
4568 
4569   AddTypedNameChunk(Context, Policy, BD, Builder);
4570   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4571 
4572   if (BlockProtoLoc && BlockProtoLoc.getTypePtr()->isVariadic()) {
4573     Builder.AddPlaceholderChunk("...");
4574   } else {
4575     for (unsigned I = 0, N = BlockLoc.getNumParams(); I != N; ++I) {
4576       if (I)
4577         Builder.AddChunk(CodeCompletionString::CK_Comma);
4578 
4579       // Format the placeholder string.
4580       std::string PlaceholderStr =
4581           FormatFunctionParameter(Policy, BlockLoc.getParam(I));
4582 
4583       if (I == N - 1 && BlockProtoLoc &&
4584           BlockProtoLoc.getTypePtr()->isVariadic())
4585         PlaceholderStr += ", ...";
4586 
4587       // Add the placeholder string.
4588       Builder.AddPlaceholderChunk(
4589           Builder.getAllocator().CopyString(PlaceholderStr));
4590     }
4591   }
4592 
4593   Builder.AddChunk(CodeCompletionString::CK_RightParen);
4594 }
4595 
4596 static void
4597 AddObjCProperties(const CodeCompletionContext &CCContext,
4598                   ObjCContainerDecl *Container, bool AllowCategories,
4599                   bool AllowNullaryMethods, DeclContext *CurContext,
4600                   AddedPropertiesSet &AddedProperties, ResultBuilder &Results,
4601                   bool IsBaseExprStatement = false,
4602                   bool IsClassProperty = false, bool InOriginalClass = true) {
4603   typedef CodeCompletionResult Result;
4604 
4605   // Retrieve the definition.
4606   Container = getContainerDef(Container);
4607 
4608   // Add properties in this container.
4609   const auto AddProperty = [&](const ObjCPropertyDecl *P) {
4610     if (!AddedProperties.insert(P->getIdentifier()).second)
4611       return;
4612 
4613     // FIXME: Provide block invocation completion for non-statement
4614     // expressions.
4615     if (!P->getType().getTypePtr()->isBlockPointerType() ||
4616         !IsBaseExprStatement) {
4617       Result R = Result(P, Results.getBasePriority(P), nullptr);
4618       if (!InOriginalClass)
4619         setInBaseClass(R);
4620       Results.MaybeAddResult(R, CurContext);
4621       return;
4622     }
4623 
4624     // Block setter and invocation completion is provided only when we are able
4625     // to find the FunctionProtoTypeLoc with parameter names for the block.
4626     FunctionTypeLoc BlockLoc;
4627     FunctionProtoTypeLoc BlockProtoLoc;
4628     findTypeLocationForBlockDecl(P->getTypeSourceInfo(), BlockLoc,
4629                                  BlockProtoLoc);
4630     if (!BlockLoc) {
4631       Result R = Result(P, Results.getBasePriority(P), nullptr);
4632       if (!InOriginalClass)
4633         setInBaseClass(R);
4634       Results.MaybeAddResult(R, CurContext);
4635       return;
4636     }
4637 
4638     // The default completion result for block properties should be the block
4639     // invocation completion when the base expression is a statement.
4640     CodeCompletionBuilder Builder(Results.getAllocator(),
4641                                   Results.getCodeCompletionTUInfo());
4642     AddObjCBlockCall(Container->getASTContext(),
4643                      getCompletionPrintingPolicy(Results.getSema()), Builder, P,
4644                      BlockLoc, BlockProtoLoc);
4645     Result R = Result(Builder.TakeString(), P, Results.getBasePriority(P));
4646     if (!InOriginalClass)
4647       setInBaseClass(R);
4648     Results.MaybeAddResult(R, CurContext);
4649 
4650     // Provide additional block setter completion iff the base expression is a
4651     // statement and the block property is mutable.
4652     if (!P->isReadOnly()) {
4653       CodeCompletionBuilder Builder(Results.getAllocator(),
4654                                     Results.getCodeCompletionTUInfo());
4655       AddResultTypeChunk(Container->getASTContext(),
4656                          getCompletionPrintingPolicy(Results.getSema()), P,
4657                          CCContext.getBaseType(), Builder);
4658       Builder.AddTypedTextChunk(
4659           Results.getAllocator().CopyString(P->getName()));
4660       Builder.AddChunk(CodeCompletionString::CK_Equal);
4661 
4662       std::string PlaceholderStr = formatBlockPlaceholder(
4663           getCompletionPrintingPolicy(Results.getSema()), P, BlockLoc,
4664           BlockProtoLoc, /*SuppressBlockName=*/true);
4665       // Add the placeholder string.
4666       Builder.AddPlaceholderChunk(
4667           Builder.getAllocator().CopyString(PlaceholderStr));
4668 
4669       // When completing blocks properties that return void the default
4670       // property completion result should show up before the setter,
4671       // otherwise the setter completion should show up before the default
4672       // property completion, as we normally want to use the result of the
4673       // call.
4674       Result R =
4675           Result(Builder.TakeString(), P,
4676                  Results.getBasePriority(P) +
4677                      (BlockLoc.getTypePtr()->getReturnType()->isVoidType()
4678                           ? CCD_BlockPropertySetter
4679                           : -CCD_BlockPropertySetter));
4680       if (!InOriginalClass)
4681         setInBaseClass(R);
4682       Results.MaybeAddResult(R, CurContext);
4683     }
4684   };
4685 
4686   if (IsClassProperty) {
4687     for (const auto *P : Container->class_properties())
4688       AddProperty(P);
4689   } else {
4690     for (const auto *P : Container->instance_properties())
4691       AddProperty(P);
4692   }
4693 
4694   // Add nullary methods or implicit class properties
4695   if (AllowNullaryMethods) {
4696     ASTContext &Context = Container->getASTContext();
4697     PrintingPolicy Policy = getCompletionPrintingPolicy(Results.getSema());
4698     // Adds a method result
4699     const auto AddMethod = [&](const ObjCMethodDecl *M) {
4700       IdentifierInfo *Name = M->getSelector().getIdentifierInfoForSlot(0);
4701       if (!Name)
4702         return;
4703       if (!AddedProperties.insert(Name).second)
4704         return;
4705       CodeCompletionBuilder Builder(Results.getAllocator(),
4706                                     Results.getCodeCompletionTUInfo());
4707       AddResultTypeChunk(Context, Policy, M, CCContext.getBaseType(), Builder);
4708       Builder.AddTypedTextChunk(
4709           Results.getAllocator().CopyString(Name->getName()));
4710       Result R = Result(Builder.TakeString(), M,
4711                         CCP_MemberDeclaration + CCD_MethodAsProperty);
4712       if (!InOriginalClass)
4713         setInBaseClass(R);
4714       Results.MaybeAddResult(R, CurContext);
4715     };
4716 
4717     if (IsClassProperty) {
4718       for (const auto *M : Container->methods()) {
4719         // Gather the class method that can be used as implicit property
4720         // getters. Methods with arguments or methods that return void aren't
4721         // added to the results as they can't be used as a getter.
4722         if (!M->getSelector().isUnarySelector() ||
4723             M->getReturnType()->isVoidType() || M->isInstanceMethod())
4724           continue;
4725         AddMethod(M);
4726       }
4727     } else {
4728       for (auto *M : Container->methods()) {
4729         if (M->getSelector().isUnarySelector())
4730           AddMethod(M);
4731       }
4732     }
4733   }
4734 
4735   // Add properties in referenced protocols.
4736   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
4737     for (auto *P : Protocol->protocols())
4738       AddObjCProperties(CCContext, P, AllowCategories, AllowNullaryMethods,
4739                         CurContext, AddedProperties, Results,
4740                         IsBaseExprStatement, IsClassProperty,
4741                         /*InOriginalClass*/ false);
4742   } else if (ObjCInterfaceDecl *IFace =
4743                  dyn_cast<ObjCInterfaceDecl>(Container)) {
4744     if (AllowCategories) {
4745       // Look through categories.
4746       for (auto *Cat : IFace->known_categories())
4747         AddObjCProperties(CCContext, Cat, AllowCategories, AllowNullaryMethods,
4748                           CurContext, AddedProperties, Results,
4749                           IsBaseExprStatement, IsClassProperty,
4750                           InOriginalClass);
4751     }
4752 
4753     // Look through protocols.
4754     for (auto *I : IFace->all_referenced_protocols())
4755       AddObjCProperties(CCContext, I, AllowCategories, AllowNullaryMethods,
4756                         CurContext, AddedProperties, Results,
4757                         IsBaseExprStatement, IsClassProperty,
4758                         /*InOriginalClass*/ false);
4759 
4760     // Look in the superclass.
4761     if (IFace->getSuperClass())
4762       AddObjCProperties(CCContext, IFace->getSuperClass(), AllowCategories,
4763                         AllowNullaryMethods, CurContext, AddedProperties,
4764                         Results, IsBaseExprStatement, IsClassProperty,
4765                         /*InOriginalClass*/ false);
4766   } else if (const auto *Category =
4767                  dyn_cast<ObjCCategoryDecl>(Container)) {
4768     // Look through protocols.
4769     for (auto *P : Category->protocols())
4770       AddObjCProperties(CCContext, P, AllowCategories, AllowNullaryMethods,
4771                         CurContext, AddedProperties, Results,
4772                         IsBaseExprStatement, IsClassProperty,
4773                         /*InOriginalClass*/ false);
4774   }
4775 }
4776 
4777 static void AddRecordMembersCompletionResults(
4778     Sema &SemaRef, ResultBuilder &Results, Scope *S, QualType BaseType,
4779     ExprValueKind BaseKind, RecordDecl *RD, Optional<FixItHint> AccessOpFixIt) {
4780   // Indicate that we are performing a member access, and the cv-qualifiers
4781   // for the base object type.
4782   Results.setObjectTypeQualifiers(BaseType.getQualifiers(), BaseKind);
4783 
4784   // Access to a C/C++ class, struct, or union.
4785   Results.allowNestedNameSpecifiers();
4786   std::vector<FixItHint> FixIts;
4787   if (AccessOpFixIt)
4788     FixIts.emplace_back(AccessOpFixIt.getValue());
4789   CodeCompletionDeclConsumer Consumer(Results, RD, BaseType, std::move(FixIts));
4790   SemaRef.LookupVisibleDecls(RD, Sema::LookupMemberName, Consumer,
4791                              SemaRef.CodeCompleter->includeGlobals(),
4792                              /*IncludeDependentBases=*/true,
4793                              SemaRef.CodeCompleter->loadExternal());
4794 
4795   if (SemaRef.getLangOpts().CPlusPlus) {
4796     if (!Results.empty()) {
4797       // The "template" keyword can follow "->" or "." in the grammar.
4798       // However, we only want to suggest the template keyword if something
4799       // is dependent.
4800       bool IsDependent = BaseType->isDependentType();
4801       if (!IsDependent) {
4802         for (Scope *DepScope = S; DepScope; DepScope = DepScope->getParent())
4803           if (DeclContext *Ctx = DepScope->getEntity()) {
4804             IsDependent = Ctx->isDependentContext();
4805             break;
4806           }
4807       }
4808 
4809       if (IsDependent)
4810         Results.AddResult(CodeCompletionResult("template"));
4811     }
4812   }
4813 }
4814 
4815 // Returns the RecordDecl inside the BaseType, falling back to primary template
4816 // in case of specializations. Since we might not have a decl for the
4817 // instantiation/specialization yet, e.g. dependent code.
4818 static RecordDecl *getAsRecordDecl(const QualType BaseType) {
4819   if (auto *RD = BaseType->getAsRecordDecl()) {
4820     if (const auto *CTSD =
4821             llvm::dyn_cast<ClassTemplateSpecializationDecl>(RD)) {
4822       // Template might not be instantiated yet, fall back to primary template
4823       // in such cases.
4824       if (CTSD->getTemplateSpecializationKind() == TSK_Undeclared)
4825         RD = CTSD->getSpecializedTemplate()->getTemplatedDecl();
4826     }
4827     return RD;
4828   }
4829 
4830   if (const auto *TST = BaseType->getAs<TemplateSpecializationType>()) {
4831     if (const auto *TD = dyn_cast_or_null<ClassTemplateDecl>(
4832             TST->getTemplateName().getAsTemplateDecl())) {
4833       return TD->getTemplatedDecl();
4834     }
4835   }
4836 
4837   return nullptr;
4838 }
4839 
4840 namespace {
4841 // Collects completion-relevant information about a concept-constrainted type T.
4842 // In particular, examines the constraint expressions to find members of T.
4843 //
4844 // The design is very simple: we walk down each constraint looking for
4845 // expressions of the form T.foo().
4846 // If we're extra lucky, the return type is specified.
4847 // We don't do any clever handling of && or || in constraint expressions, we
4848 // take members from both branches.
4849 //
4850 // For example, given:
4851 //   template <class T> concept X = requires (T t, string& s) { t.print(s); };
4852 //   template <X U> void foo(U u) { u.^ }
4853 // We want to suggest the inferred member function 'print(string)'.
4854 // We see that u has type U, so X<U> holds.
4855 // X<U> requires t.print(s) to be valid, where t has type U (substituted for T).
4856 // By looking at the CallExpr we find the signature of print().
4857 //
4858 // While we tend to know in advance which kind of members (access via . -> ::)
4859 // we want, it's simpler just to gather them all and post-filter.
4860 //
4861 // FIXME: some of this machinery could be used for non-concept type-parms too,
4862 // enabling completion for type parameters based on other uses of that param.
4863 //
4864 // FIXME: there are other cases where a type can be constrained by a concept,
4865 // e.g. inside `if constexpr(ConceptSpecializationExpr) { ... }`
4866 class ConceptInfo {
4867 public:
4868   // Describes a likely member of a type, inferred by concept constraints.
4869   // Offered as a code completion for T. T-> and T:: contexts.
4870   struct Member {
4871     // Always non-null: we only handle members with ordinary identifier names.
4872     const IdentifierInfo *Name = nullptr;
4873     // Set for functions we've seen called.
4874     // We don't have the declared parameter types, only the actual types of
4875     // arguments we've seen. These are still valuable, as it's hard to render
4876     // a useful function completion with neither parameter types nor names!
4877     llvm::Optional<SmallVector<QualType, 1>> ArgTypes;
4878     // Whether this is accessed as T.member, T->member, or T::member.
4879     enum AccessOperator {
4880       Colons,
4881       Arrow,
4882       Dot,
4883     } Operator = Dot;
4884     // What's known about the type of a variable or return type of a function.
4885     const TypeConstraint *ResultType = nullptr;
4886     // FIXME: also track:
4887     //   - kind of entity (function/variable/type), to expose structured results
4888     //   - template args kinds/types, as a proxy for template params
4889 
4890     // For now we simply return these results as "pattern" strings.
4891     CodeCompletionString *render(Sema &S, CodeCompletionAllocator &Alloc,
4892                                  CodeCompletionTUInfo &Info) const {
4893       CodeCompletionBuilder B(Alloc, Info);
4894       // Result type
4895       if (ResultType) {
4896         std::string AsString;
4897         {
4898           llvm::raw_string_ostream OS(AsString);
4899           QualType ExactType = deduceType(*ResultType);
4900           if (!ExactType.isNull())
4901             ExactType.print(OS, getCompletionPrintingPolicy(S));
4902           else
4903             ResultType->print(OS, getCompletionPrintingPolicy(S));
4904         }
4905         B.AddResultTypeChunk(Alloc.CopyString(AsString));
4906       }
4907       // Member name
4908       B.AddTypedTextChunk(Alloc.CopyString(Name->getName()));
4909       // Function argument list
4910       if (ArgTypes) {
4911         B.AddChunk(clang::CodeCompletionString::CK_LeftParen);
4912         bool First = true;
4913         for (QualType Arg : *ArgTypes) {
4914           if (First)
4915             First = false;
4916           else {
4917             B.AddChunk(clang::CodeCompletionString::CK_Comma);
4918             B.AddChunk(clang::CodeCompletionString::CK_HorizontalSpace);
4919           }
4920           B.AddPlaceholderChunk(Alloc.CopyString(
4921               Arg.getAsString(getCompletionPrintingPolicy(S))));
4922         }
4923         B.AddChunk(clang::CodeCompletionString::CK_RightParen);
4924       }
4925       return B.TakeString();
4926     }
4927   };
4928 
4929   // BaseType is the type parameter T to infer members from.
4930   // T must be accessible within S, as we use it to find the template entity
4931   // that T is attached to in order to gather the relevant constraints.
4932   ConceptInfo(const TemplateTypeParmType &BaseType, Scope *S) {
4933     auto *TemplatedEntity = getTemplatedEntity(BaseType.getDecl(), S);
4934     for (const Expr *E : constraintsForTemplatedEntity(TemplatedEntity))
4935       believe(E, &BaseType);
4936   }
4937 
4938   std::vector<Member> members() {
4939     std::vector<Member> Results;
4940     for (const auto &E : this->Results)
4941       Results.push_back(E.second);
4942     llvm::sort(Results, [](const Member &L, const Member &R) {
4943       return L.Name->getName() < R.Name->getName();
4944     });
4945     return Results;
4946   }
4947 
4948 private:
4949   // Infer members of T, given that the expression E (dependent on T) is true.
4950   void believe(const Expr *E, const TemplateTypeParmType *T) {
4951     if (!E || !T)
4952       return;
4953     if (auto *CSE = dyn_cast<ConceptSpecializationExpr>(E)) {
4954       // If the concept is
4955       //   template <class A, class B> concept CD = f<A, B>();
4956       // And the concept specialization is
4957       //   CD<int, T>
4958       // Then we're substituting T for B, so we want to make f<A, B>() true
4959       // by adding members to B - i.e. believe(f<A, B>(), B);
4960       //
4961       // For simplicity:
4962       // - we don't attempt to substitute int for A
4963       // - when T is used in other ways (like CD<T*>) we ignore it
4964       ConceptDecl *CD = CSE->getNamedConcept();
4965       TemplateParameterList *Params = CD->getTemplateParameters();
4966       unsigned Index = 0;
4967       for (const auto &Arg : CSE->getTemplateArguments()) {
4968         if (Index >= Params->size())
4969           break; // Won't happen in valid code.
4970         if (isApprox(Arg, T)) {
4971           auto *TTPD = dyn_cast<TemplateTypeParmDecl>(Params->getParam(Index));
4972           if (!TTPD)
4973             continue;
4974           // T was used as an argument, and bound to the parameter TT.
4975           auto *TT = cast<TemplateTypeParmType>(TTPD->getTypeForDecl());
4976           // So now we know the constraint as a function of TT is true.
4977           believe(CD->getConstraintExpr(), TT);
4978           // (concepts themselves have no associated constraints to require)
4979         }
4980 
4981         ++Index;
4982       }
4983     } else if (auto *BO = dyn_cast<BinaryOperator>(E)) {
4984       // For A && B, we can infer members from both branches.
4985       // For A || B, the union is still more useful than the intersection.
4986       if (BO->getOpcode() == BO_LAnd || BO->getOpcode() == BO_LOr) {
4987         believe(BO->getLHS(), T);
4988         believe(BO->getRHS(), T);
4989       }
4990     } else if (auto *RE = dyn_cast<RequiresExpr>(E)) {
4991       // A requires(){...} lets us infer members from each requirement.
4992       for (const concepts::Requirement *Req : RE->getRequirements()) {
4993         if (!Req->isDependent())
4994           continue; // Can't tell us anything about T.
4995         // Now Req cannot a substitution-error: those aren't dependent.
4996 
4997         if (auto *TR = dyn_cast<concepts::TypeRequirement>(Req)) {
4998           // Do a full traversal so we get `foo` from `typename T::foo::bar`.
4999           QualType AssertedType = TR->getType()->getType();
5000           ValidVisitor(this, T).TraverseType(AssertedType);
5001         } else if (auto *ER = dyn_cast<concepts::ExprRequirement>(Req)) {
5002           ValidVisitor Visitor(this, T);
5003           // If we have a type constraint on the value of the expression,
5004           // AND the whole outer expression describes a member, then we'll
5005           // be able to use the constraint to provide the return type.
5006           if (ER->getReturnTypeRequirement().isTypeConstraint()) {
5007             Visitor.OuterType =
5008                 ER->getReturnTypeRequirement().getTypeConstraint();
5009             Visitor.OuterExpr = ER->getExpr();
5010           }
5011           Visitor.TraverseStmt(ER->getExpr());
5012         } else if (auto *NR = dyn_cast<concepts::NestedRequirement>(Req)) {
5013           believe(NR->getConstraintExpr(), T);
5014         }
5015       }
5016     }
5017   }
5018 
5019   // This visitor infers members of T based on traversing expressions/types
5020   // that involve T. It is invoked with code known to be valid for T.
5021   class ValidVisitor : public RecursiveASTVisitor<ValidVisitor> {
5022     ConceptInfo *Outer;
5023     const TemplateTypeParmType *T;
5024 
5025     CallExpr *Caller = nullptr;
5026     Expr *Callee = nullptr;
5027 
5028   public:
5029     // If set, OuterExpr is constrained by OuterType.
5030     Expr *OuterExpr = nullptr;
5031     const TypeConstraint *OuterType = nullptr;
5032 
5033     ValidVisitor(ConceptInfo *Outer, const TemplateTypeParmType *T)
5034         : Outer(Outer), T(T) {
5035       assert(T);
5036     }
5037 
5038     // In T.foo or T->foo, `foo` is a member function/variable.
5039     bool VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E) {
5040       const Type *Base = E->getBaseType().getTypePtr();
5041       bool IsArrow = E->isArrow();
5042       if (Base->isPointerType() && IsArrow) {
5043         IsArrow = false;
5044         Base = Base->getPointeeType().getTypePtr();
5045       }
5046       if (isApprox(Base, T))
5047         addValue(E, E->getMember(), IsArrow ? Member::Arrow : Member::Dot);
5048       return true;
5049     }
5050 
5051     // In T::foo, `foo` is a static member function/variable.
5052     bool VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) {
5053       if (E->getQualifier() && isApprox(E->getQualifier()->getAsType(), T))
5054         addValue(E, E->getDeclName(), Member::Colons);
5055       return true;
5056     }
5057 
5058     // In T::typename foo, `foo` is a type.
5059     bool VisitDependentNameType(DependentNameType *DNT) {
5060       const auto *Q = DNT->getQualifier();
5061       if (Q && isApprox(Q->getAsType(), T))
5062         addType(DNT->getIdentifier());
5063       return true;
5064     }
5065 
5066     // In T::foo::bar, `foo` must be a type.
5067     // VisitNNS() doesn't exist, and TraverseNNS isn't always called :-(
5068     bool TraverseNestedNameSpecifierLoc(NestedNameSpecifierLoc NNSL) {
5069       if (NNSL) {
5070         NestedNameSpecifier *NNS = NNSL.getNestedNameSpecifier();
5071         const auto *Q = NNS->getPrefix();
5072         if (Q && isApprox(Q->getAsType(), T))
5073           addType(NNS->getAsIdentifier());
5074       }
5075       // FIXME: also handle T::foo<X>::bar
5076       return RecursiveASTVisitor::TraverseNestedNameSpecifierLoc(NNSL);
5077     }
5078 
5079     // FIXME also handle T::foo<X>
5080 
5081     // Track the innermost caller/callee relationship so we can tell if a
5082     // nested expr is being called as a function.
5083     bool VisitCallExpr(CallExpr *CE) {
5084       Caller = CE;
5085       Callee = CE->getCallee();
5086       return true;
5087     }
5088 
5089   private:
5090     void addResult(Member &&M) {
5091       auto R = Outer->Results.try_emplace(M.Name);
5092       Member &O = R.first->second;
5093       // Overwrite existing if the new member has more info.
5094       // The preference of . vs :: vs -> is fairly arbitrary.
5095       if (/*Inserted*/ R.second ||
5096           std::make_tuple(M.ArgTypes.hasValue(), M.ResultType != nullptr,
5097                           M.Operator) > std::make_tuple(O.ArgTypes.hasValue(),
5098                                                         O.ResultType != nullptr,
5099                                                         O.Operator))
5100         O = std::move(M);
5101     }
5102 
5103     void addType(const IdentifierInfo *Name) {
5104       if (!Name)
5105         return;
5106       Member M;
5107       M.Name = Name;
5108       M.Operator = Member::Colons;
5109       addResult(std::move(M));
5110     }
5111 
5112     void addValue(Expr *E, DeclarationName Name,
5113                   Member::AccessOperator Operator) {
5114       if (!Name.isIdentifier())
5115         return;
5116       Member Result;
5117       Result.Name = Name.getAsIdentifierInfo();
5118       Result.Operator = Operator;
5119       // If this is the callee of an immediately-enclosing CallExpr, then
5120       // treat it as a method, otherwise it's a variable.
5121       if (Caller != nullptr && Callee == E) {
5122         Result.ArgTypes.emplace();
5123         for (const auto *Arg : Caller->arguments())
5124           Result.ArgTypes->push_back(Arg->getType());
5125         if (Caller == OuterExpr) {
5126           Result.ResultType = OuterType;
5127         }
5128       } else {
5129         if (E == OuterExpr)
5130           Result.ResultType = OuterType;
5131       }
5132       addResult(std::move(Result));
5133     }
5134   };
5135 
5136   static bool isApprox(const TemplateArgument &Arg, const Type *T) {
5137     return Arg.getKind() == TemplateArgument::Type &&
5138            isApprox(Arg.getAsType().getTypePtr(), T);
5139   }
5140 
5141   static bool isApprox(const Type *T1, const Type *T2) {
5142     return T1 && T2 &&
5143            T1->getCanonicalTypeUnqualified() ==
5144                T2->getCanonicalTypeUnqualified();
5145   }
5146 
5147   // Returns the DeclContext immediately enclosed by the template parameter
5148   // scope. For primary templates, this is the templated (e.g.) CXXRecordDecl.
5149   // For specializations, this is e.g. ClassTemplatePartialSpecializationDecl.
5150   static DeclContext *getTemplatedEntity(const TemplateTypeParmDecl *D,
5151                                          Scope *S) {
5152     if (D == nullptr)
5153       return nullptr;
5154     Scope *Inner = nullptr;
5155     while (S) {
5156       if (S->isTemplateParamScope() && S->isDeclScope(D))
5157         return Inner ? Inner->getEntity() : nullptr;
5158       Inner = S;
5159       S = S->getParent();
5160     }
5161     return nullptr;
5162   }
5163 
5164   // Gets all the type constraint expressions that might apply to the type
5165   // variables associated with DC (as returned by getTemplatedEntity()).
5166   static SmallVector<const Expr *, 1>
5167   constraintsForTemplatedEntity(DeclContext *DC) {
5168     SmallVector<const Expr *, 1> Result;
5169     if (DC == nullptr)
5170       return Result;
5171     // Primary templates can have constraints.
5172     if (const auto *TD = cast<Decl>(DC)->getDescribedTemplate())
5173       TD->getAssociatedConstraints(Result);
5174     // Partial specializations may have constraints.
5175     if (const auto *CTPSD =
5176             dyn_cast<ClassTemplatePartialSpecializationDecl>(DC))
5177       CTPSD->getAssociatedConstraints(Result);
5178     if (const auto *VTPSD = dyn_cast<VarTemplatePartialSpecializationDecl>(DC))
5179       VTPSD->getAssociatedConstraints(Result);
5180     return Result;
5181   }
5182 
5183   // Attempt to find the unique type satisfying a constraint.
5184   // This lets us show e.g. `int` instead of `std::same_as<int>`.
5185   static QualType deduceType(const TypeConstraint &T) {
5186     // Assume a same_as<T> return type constraint is std::same_as or equivalent.
5187     // In this case the return type is T.
5188     DeclarationName DN = T.getNamedConcept()->getDeclName();
5189     if (DN.isIdentifier() && DN.getAsIdentifierInfo()->isStr("same_as"))
5190       if (const auto *Args = T.getTemplateArgsAsWritten())
5191         if (Args->getNumTemplateArgs() == 1) {
5192           const auto &Arg = Args->arguments().front().getArgument();
5193           if (Arg.getKind() == TemplateArgument::Type)
5194             return Arg.getAsType();
5195         }
5196     return {};
5197   }
5198 
5199   llvm::DenseMap<const IdentifierInfo *, Member> Results;
5200 };
5201 
5202 // Returns a type for E that yields acceptable member completions.
5203 // In particular, when E->getType() is DependentTy, try to guess a likely type.
5204 // We accept some lossiness (like dropping parameters).
5205 // We only try to handle common expressions on the LHS of MemberExpr.
5206 QualType getApproximateType(const Expr *E) {
5207   QualType Unresolved = E->getType();
5208   if (Unresolved.isNull() ||
5209       !Unresolved->isSpecificBuiltinType(BuiltinType::Dependent))
5210     return Unresolved;
5211   E = E->IgnoreParens();
5212   // A call: approximate-resolve callee to a function type, get its return type
5213   if (const CallExpr *CE = llvm::dyn_cast<CallExpr>(E)) {
5214     QualType Callee = getApproximateType(CE->getCallee());
5215     if (Callee.isNull() ||
5216         Callee->isSpecificPlaceholderType(BuiltinType::BoundMember))
5217       Callee = Expr::findBoundMemberType(CE->getCallee());
5218     if (Callee.isNull())
5219       return Unresolved;
5220 
5221     if (const auto *FnTypePtr = Callee->getAs<PointerType>()) {
5222       Callee = FnTypePtr->getPointeeType();
5223     } else if (const auto *BPT = Callee->getAs<BlockPointerType>()) {
5224       Callee = BPT->getPointeeType();
5225     }
5226     if (const FunctionType *FnType = Callee->getAs<FunctionType>())
5227       return FnType->getReturnType().getNonReferenceType();
5228 
5229     // Unresolved call: try to guess the return type.
5230     if (const auto *OE = llvm::dyn_cast<OverloadExpr>(CE->getCallee())) {
5231       // If all candidates have the same approximate return type, use it.
5232       // Discard references and const to allow more to be "the same".
5233       // (In particular, if there's one candidate + ADL, resolve it).
5234       const Type *Common = nullptr;
5235       for (const auto *D : OE->decls()) {
5236         QualType ReturnType;
5237         if (const auto *FD = llvm::dyn_cast<FunctionDecl>(D))
5238           ReturnType = FD->getReturnType();
5239         else if (const auto *FTD = llvm::dyn_cast<FunctionTemplateDecl>(D))
5240           ReturnType = FTD->getTemplatedDecl()->getReturnType();
5241         if (ReturnType.isNull())
5242           continue;
5243         const Type *Candidate =
5244             ReturnType.getNonReferenceType().getCanonicalType().getTypePtr();
5245         if (Common && Common != Candidate)
5246           return Unresolved; // Multiple candidates.
5247         Common = Candidate;
5248       }
5249       if (Common != nullptr)
5250         return QualType(Common, 0);
5251     }
5252   }
5253   // A dependent member: approximate-resolve the base, then lookup.
5254   if (const auto *CDSME = llvm::dyn_cast<CXXDependentScopeMemberExpr>(E)) {
5255     QualType Base = CDSME->isImplicitAccess()
5256                         ? CDSME->getBaseType()
5257                         : getApproximateType(CDSME->getBase());
5258     if (CDSME->isArrow() && !Base.isNull())
5259       Base = Base->getPointeeType(); // could handle unique_ptr etc here?
5260     RecordDecl *RD = Base.isNull() ? nullptr : getAsRecordDecl(Base);
5261     if (RD && RD->isCompleteDefinition()) {
5262       for (const auto *Member : RD->lookup(CDSME->getMember()))
5263         if (const ValueDecl *VD = llvm::dyn_cast<ValueDecl>(Member))
5264           return VD->getType().getNonReferenceType();
5265     }
5266   }
5267   return Unresolved;
5268 }
5269 
5270 // If \p Base is ParenListExpr, assume a chain of comma operators and pick the
5271 // last expr. We expect other ParenListExprs to be resolved to e.g. constructor
5272 // calls before here. (So the ParenListExpr should be nonempty, but check just
5273 // in case)
5274 Expr *unwrapParenList(Expr *Base) {
5275   if (auto *PLE = llvm::dyn_cast_or_null<ParenListExpr>(Base)) {
5276     if (PLE->getNumExprs() == 0)
5277       return nullptr;
5278     Base = PLE->getExpr(PLE->getNumExprs() - 1);
5279   }
5280   return Base;
5281 }
5282 
5283 } // namespace
5284 
5285 void Sema::CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
5286                                            Expr *OtherOpBase,
5287                                            SourceLocation OpLoc, bool IsArrow,
5288                                            bool IsBaseExprStatement,
5289                                            QualType PreferredType) {
5290   Base = unwrapParenList(Base);
5291   OtherOpBase = unwrapParenList(OtherOpBase);
5292   if (!Base || !CodeCompleter)
5293     return;
5294 
5295   ExprResult ConvertedBase = PerformMemberExprBaseConversion(Base, IsArrow);
5296   if (ConvertedBase.isInvalid())
5297     return;
5298   QualType ConvertedBaseType = getApproximateType(ConvertedBase.get());
5299 
5300   enum CodeCompletionContext::Kind contextKind;
5301 
5302   if (IsArrow) {
5303     if (const auto *Ptr = ConvertedBaseType->getAs<PointerType>())
5304       ConvertedBaseType = Ptr->getPointeeType();
5305   }
5306 
5307   if (IsArrow) {
5308     contextKind = CodeCompletionContext::CCC_ArrowMemberAccess;
5309   } else {
5310     if (ConvertedBaseType->isObjCObjectPointerType() ||
5311         ConvertedBaseType->isObjCObjectOrInterfaceType()) {
5312       contextKind = CodeCompletionContext::CCC_ObjCPropertyAccess;
5313     } else {
5314       contextKind = CodeCompletionContext::CCC_DotMemberAccess;
5315     }
5316   }
5317 
5318   CodeCompletionContext CCContext(contextKind, ConvertedBaseType);
5319   CCContext.setPreferredType(PreferredType);
5320   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5321                         CodeCompleter->getCodeCompletionTUInfo(), CCContext,
5322                         &ResultBuilder::IsMember);
5323 
5324   auto DoCompletion = [&](Expr *Base, bool IsArrow,
5325                           Optional<FixItHint> AccessOpFixIt) -> bool {
5326     if (!Base)
5327       return false;
5328 
5329     ExprResult ConvertedBase = PerformMemberExprBaseConversion(Base, IsArrow);
5330     if (ConvertedBase.isInvalid())
5331       return false;
5332     Base = ConvertedBase.get();
5333 
5334     QualType BaseType = getApproximateType(Base);
5335     if (BaseType.isNull())
5336       return false;
5337     ExprValueKind BaseKind = Base->getValueKind();
5338 
5339     if (IsArrow) {
5340       if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
5341         BaseType = Ptr->getPointeeType();
5342         BaseKind = VK_LValue;
5343       } else if (BaseType->isObjCObjectPointerType() ||
5344                  BaseType->isTemplateTypeParmType()) {
5345         // Both cases (dot/arrow) handled below.
5346       } else {
5347         return false;
5348       }
5349     }
5350 
5351     if (RecordDecl *RD = getAsRecordDecl(BaseType)) {
5352       AddRecordMembersCompletionResults(*this, Results, S, BaseType, BaseKind,
5353                                         RD, std::move(AccessOpFixIt));
5354     } else if (const auto *TTPT =
5355                    dyn_cast<TemplateTypeParmType>(BaseType.getTypePtr())) {
5356       auto Operator =
5357           IsArrow ? ConceptInfo::Member::Arrow : ConceptInfo::Member::Dot;
5358       for (const auto &R : ConceptInfo(*TTPT, S).members()) {
5359         if (R.Operator != Operator)
5360           continue;
5361         CodeCompletionResult Result(
5362             R.render(*this, CodeCompleter->getAllocator(),
5363                      CodeCompleter->getCodeCompletionTUInfo()));
5364         if (AccessOpFixIt)
5365           Result.FixIts.push_back(*AccessOpFixIt);
5366         Results.AddResult(std::move(Result));
5367       }
5368     } else if (!IsArrow && BaseType->isObjCObjectPointerType()) {
5369       // Objective-C property reference. Bail if we're performing fix-it code
5370       // completion since Objective-C properties are normally backed by ivars,
5371       // most Objective-C fix-its here would have little value.
5372       if (AccessOpFixIt.hasValue()) {
5373         return false;
5374       }
5375       AddedPropertiesSet AddedProperties;
5376 
5377       if (const ObjCObjectPointerType *ObjCPtr =
5378               BaseType->getAsObjCInterfacePointerType()) {
5379         // Add property results based on our interface.
5380         assert(ObjCPtr && "Non-NULL pointer guaranteed above!");
5381         AddObjCProperties(CCContext, ObjCPtr->getInterfaceDecl(), true,
5382                           /*AllowNullaryMethods=*/true, CurContext,
5383                           AddedProperties, Results, IsBaseExprStatement);
5384       }
5385 
5386       // Add properties from the protocols in a qualified interface.
5387       for (auto *I : BaseType->castAs<ObjCObjectPointerType>()->quals())
5388         AddObjCProperties(CCContext, I, true, /*AllowNullaryMethods=*/true,
5389                           CurContext, AddedProperties, Results,
5390                           IsBaseExprStatement, /*IsClassProperty*/ false,
5391                           /*InOriginalClass*/ false);
5392     } else if ((IsArrow && BaseType->isObjCObjectPointerType()) ||
5393                (!IsArrow && BaseType->isObjCObjectType())) {
5394       // Objective-C instance variable access. Bail if we're performing fix-it
5395       // code completion since Objective-C properties are normally backed by
5396       // ivars, most Objective-C fix-its here would have little value.
5397       if (AccessOpFixIt.hasValue()) {
5398         return false;
5399       }
5400       ObjCInterfaceDecl *Class = nullptr;
5401       if (const ObjCObjectPointerType *ObjCPtr =
5402               BaseType->getAs<ObjCObjectPointerType>())
5403         Class = ObjCPtr->getInterfaceDecl();
5404       else
5405         Class = BaseType->castAs<ObjCObjectType>()->getInterface();
5406 
5407       // Add all ivars from this class and its superclasses.
5408       if (Class) {
5409         CodeCompletionDeclConsumer Consumer(Results, Class, BaseType);
5410         Results.setFilter(&ResultBuilder::IsObjCIvar);
5411         LookupVisibleDecls(
5412             Class, LookupMemberName, Consumer, CodeCompleter->includeGlobals(),
5413             /*IncludeDependentBases=*/false, CodeCompleter->loadExternal());
5414       }
5415     }
5416 
5417     // FIXME: How do we cope with isa?
5418     return true;
5419   };
5420 
5421   Results.EnterNewScope();
5422 
5423   bool CompletionSucceded = DoCompletion(Base, IsArrow, None);
5424   if (CodeCompleter->includeFixIts()) {
5425     const CharSourceRange OpRange =
5426         CharSourceRange::getTokenRange(OpLoc, OpLoc);
5427     CompletionSucceded |= DoCompletion(
5428         OtherOpBase, !IsArrow,
5429         FixItHint::CreateReplacement(OpRange, IsArrow ? "." : "->"));
5430   }
5431 
5432   Results.ExitScope();
5433 
5434   if (!CompletionSucceded)
5435     return;
5436 
5437   // Hand off the results found for code completion.
5438   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5439                             Results.data(), Results.size());
5440 }
5441 
5442 void Sema::CodeCompleteObjCClassPropertyRefExpr(Scope *S,
5443                                                 IdentifierInfo &ClassName,
5444                                                 SourceLocation ClassNameLoc,
5445                                                 bool IsBaseExprStatement) {
5446   IdentifierInfo *ClassNamePtr = &ClassName;
5447   ObjCInterfaceDecl *IFace = getObjCInterfaceDecl(ClassNamePtr, ClassNameLoc);
5448   if (!IFace)
5449     return;
5450   CodeCompletionContext CCContext(
5451       CodeCompletionContext::CCC_ObjCPropertyAccess);
5452   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5453                         CodeCompleter->getCodeCompletionTUInfo(), CCContext,
5454                         &ResultBuilder::IsMember);
5455   Results.EnterNewScope();
5456   AddedPropertiesSet AddedProperties;
5457   AddObjCProperties(CCContext, IFace, true,
5458                     /*AllowNullaryMethods=*/true, CurContext, AddedProperties,
5459                     Results, IsBaseExprStatement,
5460                     /*IsClassProperty=*/true);
5461   Results.ExitScope();
5462   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5463                             Results.data(), Results.size());
5464 }
5465 
5466 void Sema::CodeCompleteTag(Scope *S, unsigned TagSpec) {
5467   if (!CodeCompleter)
5468     return;
5469 
5470   ResultBuilder::LookupFilter Filter = nullptr;
5471   enum CodeCompletionContext::Kind ContextKind =
5472       CodeCompletionContext::CCC_Other;
5473   switch ((DeclSpec::TST)TagSpec) {
5474   case DeclSpec::TST_enum:
5475     Filter = &ResultBuilder::IsEnum;
5476     ContextKind = CodeCompletionContext::CCC_EnumTag;
5477     break;
5478 
5479   case DeclSpec::TST_union:
5480     Filter = &ResultBuilder::IsUnion;
5481     ContextKind = CodeCompletionContext::CCC_UnionTag;
5482     break;
5483 
5484   case DeclSpec::TST_struct:
5485   case DeclSpec::TST_class:
5486   case DeclSpec::TST_interface:
5487     Filter = &ResultBuilder::IsClassOrStruct;
5488     ContextKind = CodeCompletionContext::CCC_ClassOrStructTag;
5489     break;
5490 
5491   default:
5492     llvm_unreachable("Unknown type specifier kind in CodeCompleteTag");
5493   }
5494 
5495   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5496                         CodeCompleter->getCodeCompletionTUInfo(), ContextKind);
5497   CodeCompletionDeclConsumer Consumer(Results, CurContext);
5498 
5499   // First pass: look for tags.
5500   Results.setFilter(Filter);
5501   LookupVisibleDecls(S, LookupTagName, Consumer,
5502                      CodeCompleter->includeGlobals(),
5503                      CodeCompleter->loadExternal());
5504 
5505   if (CodeCompleter->includeGlobals()) {
5506     // Second pass: look for nested name specifiers.
5507     Results.setFilter(&ResultBuilder::IsNestedNameSpecifier);
5508     LookupVisibleDecls(S, LookupNestedNameSpecifierName, Consumer,
5509                        CodeCompleter->includeGlobals(),
5510                        CodeCompleter->loadExternal());
5511   }
5512 
5513   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5514                             Results.data(), Results.size());
5515 }
5516 
5517 static void AddTypeQualifierResults(DeclSpec &DS, ResultBuilder &Results,
5518                                     const LangOptions &LangOpts) {
5519   if (!(DS.getTypeQualifiers() & DeclSpec::TQ_const))
5520     Results.AddResult("const");
5521   if (!(DS.getTypeQualifiers() & DeclSpec::TQ_volatile))
5522     Results.AddResult("volatile");
5523   if (LangOpts.C99 && !(DS.getTypeQualifiers() & DeclSpec::TQ_restrict))
5524     Results.AddResult("restrict");
5525   if (LangOpts.C11 && !(DS.getTypeQualifiers() & DeclSpec::TQ_atomic))
5526     Results.AddResult("_Atomic");
5527   if (LangOpts.MSVCCompat && !(DS.getTypeQualifiers() & DeclSpec::TQ_unaligned))
5528     Results.AddResult("__unaligned");
5529 }
5530 
5531 void Sema::CodeCompleteTypeQualifiers(DeclSpec &DS) {
5532   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5533                         CodeCompleter->getCodeCompletionTUInfo(),
5534                         CodeCompletionContext::CCC_TypeQualifiers);
5535   Results.EnterNewScope();
5536   AddTypeQualifierResults(DS, Results, LangOpts);
5537   Results.ExitScope();
5538   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5539                             Results.data(), Results.size());
5540 }
5541 
5542 void Sema::CodeCompleteFunctionQualifiers(DeclSpec &DS, Declarator &D,
5543                                           const VirtSpecifiers *VS) {
5544   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5545                         CodeCompleter->getCodeCompletionTUInfo(),
5546                         CodeCompletionContext::CCC_TypeQualifiers);
5547   Results.EnterNewScope();
5548   AddTypeQualifierResults(DS, Results, LangOpts);
5549   if (LangOpts.CPlusPlus11) {
5550     Results.AddResult("noexcept");
5551     if (D.getContext() == DeclaratorContext::Member && !D.isCtorOrDtor() &&
5552         !D.isStaticMember()) {
5553       if (!VS || !VS->isFinalSpecified())
5554         Results.AddResult("final");
5555       if (!VS || !VS->isOverrideSpecified())
5556         Results.AddResult("override");
5557     }
5558   }
5559   Results.ExitScope();
5560   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5561                             Results.data(), Results.size());
5562 }
5563 
5564 void Sema::CodeCompleteBracketDeclarator(Scope *S) {
5565   CodeCompleteExpression(S, QualType(getASTContext().getSizeType()));
5566 }
5567 
5568 void Sema::CodeCompleteCase(Scope *S) {
5569   if (getCurFunction()->SwitchStack.empty() || !CodeCompleter)
5570     return;
5571 
5572   SwitchStmt *Switch = getCurFunction()->SwitchStack.back().getPointer();
5573   // Condition expression might be invalid, do not continue in this case.
5574   if (!Switch->getCond())
5575     return;
5576   QualType type = Switch->getCond()->IgnoreImplicit()->getType();
5577   if (!type->isEnumeralType()) {
5578     CodeCompleteExpressionData Data(type);
5579     Data.IntegralConstantExpression = true;
5580     CodeCompleteExpression(S, Data);
5581     return;
5582   }
5583 
5584   // Code-complete the cases of a switch statement over an enumeration type
5585   // by providing the list of
5586   EnumDecl *Enum = type->castAs<EnumType>()->getDecl();
5587   if (EnumDecl *Def = Enum->getDefinition())
5588     Enum = Def;
5589 
5590   // Determine which enumerators we have already seen in the switch statement.
5591   // FIXME: Ideally, we would also be able to look *past* the code-completion
5592   // token, in case we are code-completing in the middle of the switch and not
5593   // at the end. However, we aren't able to do so at the moment.
5594   CoveredEnumerators Enumerators;
5595   for (SwitchCase *SC = Switch->getSwitchCaseList(); SC;
5596        SC = SC->getNextSwitchCase()) {
5597     CaseStmt *Case = dyn_cast<CaseStmt>(SC);
5598     if (!Case)
5599       continue;
5600 
5601     Expr *CaseVal = Case->getLHS()->IgnoreParenCasts();
5602     if (auto *DRE = dyn_cast<DeclRefExpr>(CaseVal))
5603       if (auto *Enumerator =
5604               dyn_cast<EnumConstantDecl>(DRE->getDecl())) {
5605         // We look into the AST of the case statement to determine which
5606         // enumerator was named. Alternatively, we could compute the value of
5607         // the integral constant expression, then compare it against the
5608         // values of each enumerator. However, value-based approach would not
5609         // work as well with C++ templates where enumerators declared within a
5610         // template are type- and value-dependent.
5611         Enumerators.Seen.insert(Enumerator);
5612 
5613         // If this is a qualified-id, keep track of the nested-name-specifier
5614         // so that we can reproduce it as part of code completion, e.g.,
5615         //
5616         //   switch (TagD.getKind()) {
5617         //     case TagDecl::TK_enum:
5618         //       break;
5619         //     case XXX
5620         //
5621         // At the XXX, our completions are TagDecl::TK_union,
5622         // TagDecl::TK_struct, and TagDecl::TK_class, rather than TK_union,
5623         // TK_struct, and TK_class.
5624         Enumerators.SuggestedQualifier = DRE->getQualifier();
5625       }
5626   }
5627 
5628   // Add any enumerators that have not yet been mentioned.
5629   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5630                         CodeCompleter->getCodeCompletionTUInfo(),
5631                         CodeCompletionContext::CCC_Expression);
5632   AddEnumerators(Results, Context, Enum, CurContext, Enumerators);
5633 
5634   if (CodeCompleter->includeMacros()) {
5635     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
5636   }
5637   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5638                             Results.data(), Results.size());
5639 }
5640 
5641 static bool anyNullArguments(ArrayRef<Expr *> Args) {
5642   if (Args.size() && !Args.data())
5643     return true;
5644 
5645   for (unsigned I = 0; I != Args.size(); ++I)
5646     if (!Args[I])
5647       return true;
5648 
5649   return false;
5650 }
5651 
5652 typedef CodeCompleteConsumer::OverloadCandidate ResultCandidate;
5653 
5654 static void mergeCandidatesWithResults(
5655     Sema &SemaRef, SmallVectorImpl<ResultCandidate> &Results,
5656     OverloadCandidateSet &CandidateSet, SourceLocation Loc, size_t ArgSize) {
5657   // Sort the overload candidate set by placing the best overloads first.
5658   llvm::stable_sort(CandidateSet, [&](const OverloadCandidate &X,
5659                                       const OverloadCandidate &Y) {
5660     return isBetterOverloadCandidate(SemaRef, X, Y, Loc,
5661                                      CandidateSet.getKind());
5662   });
5663 
5664   // Add the remaining viable overload candidates as code-completion results.
5665   for (OverloadCandidate &Candidate : CandidateSet) {
5666     if (Candidate.Function) {
5667       if (Candidate.Function->isDeleted())
5668         continue;
5669       if (!Candidate.Function->isVariadic() &&
5670           Candidate.Function->getNumParams() <= ArgSize &&
5671           // Having zero args is annoying, normally we don't surface a function
5672           // with 2 params, if you already have 2 params, because you are
5673           // inserting the 3rd now. But with zero, it helps the user to figure
5674           // out there are no overloads that take any arguments. Hence we are
5675           // keeping the overload.
5676           ArgSize > 0)
5677         continue;
5678     }
5679     if (Candidate.Viable)
5680       Results.push_back(ResultCandidate(Candidate.Function));
5681   }
5682 }
5683 
5684 /// Get the type of the Nth parameter from a given set of overload
5685 /// candidates.
5686 static QualType getParamType(Sema &SemaRef,
5687                              ArrayRef<ResultCandidate> Candidates, unsigned N) {
5688 
5689   // Given the overloads 'Candidates' for a function call matching all arguments
5690   // up to N, return the type of the Nth parameter if it is the same for all
5691   // overload candidates.
5692   QualType ParamType;
5693   for (auto &Candidate : Candidates) {
5694     if (const auto *FType = Candidate.getFunctionType())
5695       if (const auto *Proto = dyn_cast<FunctionProtoType>(FType))
5696         if (N < Proto->getNumParams()) {
5697           if (ParamType.isNull())
5698             ParamType = Proto->getParamType(N);
5699           else if (!SemaRef.Context.hasSameUnqualifiedType(
5700                        ParamType.getNonReferenceType(),
5701                        Proto->getParamType(N).getNonReferenceType()))
5702             // Otherwise return a default-constructed QualType.
5703             return QualType();
5704         }
5705   }
5706 
5707   return ParamType;
5708 }
5709 
5710 static QualType
5711 ProduceSignatureHelp(Sema &SemaRef, Scope *S,
5712                      MutableArrayRef<ResultCandidate> Candidates,
5713                      unsigned CurrentArg, SourceLocation OpenParLoc) {
5714   if (Candidates.empty())
5715     return QualType();
5716   if (SemaRef.getPreprocessor().isCodeCompletionReached())
5717     SemaRef.CodeCompleter->ProcessOverloadCandidates(
5718         SemaRef, CurrentArg, Candidates.data(), Candidates.size(), OpenParLoc);
5719   return getParamType(SemaRef, Candidates, CurrentArg);
5720 }
5721 
5722 QualType Sema::ProduceCallSignatureHelp(Scope *S, Expr *Fn,
5723                                         ArrayRef<Expr *> Args,
5724                                         SourceLocation OpenParLoc) {
5725   Fn = unwrapParenList(Fn);
5726   if (!CodeCompleter || !Fn)
5727     return QualType();
5728 
5729   // FIXME: Provide support for variadic template functions.
5730   // Ignore type-dependent call expressions entirely.
5731   if (Fn->isTypeDependent() || anyNullArguments(Args))
5732     return QualType();
5733   // In presence of dependent args we surface all possible signatures using the
5734   // non-dependent args in the prefix. Afterwards we do a post filtering to make
5735   // sure provided candidates satisfy parameter count restrictions.
5736   auto ArgsWithoutDependentTypes =
5737       Args.take_while([](Expr *Arg) { return !Arg->isTypeDependent(); });
5738 
5739   SmallVector<ResultCandidate, 8> Results;
5740 
5741   Expr *NakedFn = Fn->IgnoreParenCasts();
5742   // Build an overload candidate set based on the functions we find.
5743   SourceLocation Loc = Fn->getExprLoc();
5744   OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal);
5745 
5746   if (auto ULE = dyn_cast<UnresolvedLookupExpr>(NakedFn)) {
5747     AddOverloadedCallCandidates(ULE, ArgsWithoutDependentTypes, CandidateSet,
5748                                 /*PartialOverloading=*/true);
5749   } else if (auto UME = dyn_cast<UnresolvedMemberExpr>(NakedFn)) {
5750     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = nullptr;
5751     if (UME->hasExplicitTemplateArgs()) {
5752       UME->copyTemplateArgumentsInto(TemplateArgsBuffer);
5753       TemplateArgs = &TemplateArgsBuffer;
5754     }
5755 
5756     // Add the base as first argument (use a nullptr if the base is implicit).
5757     SmallVector<Expr *, 12> ArgExprs(
5758         1, UME->isImplicitAccess() ? nullptr : UME->getBase());
5759     ArgExprs.append(ArgsWithoutDependentTypes.begin(),
5760                     ArgsWithoutDependentTypes.end());
5761     UnresolvedSet<8> Decls;
5762     Decls.append(UME->decls_begin(), UME->decls_end());
5763     const bool FirstArgumentIsBase = !UME->isImplicitAccess() && UME->getBase();
5764     AddFunctionCandidates(Decls, ArgExprs, CandidateSet, TemplateArgs,
5765                           /*SuppressUserConversions=*/false,
5766                           /*PartialOverloading=*/true, FirstArgumentIsBase);
5767   } else {
5768     FunctionDecl *FD = nullptr;
5769     if (auto *MCE = dyn_cast<MemberExpr>(NakedFn))
5770       FD = dyn_cast<FunctionDecl>(MCE->getMemberDecl());
5771     else if (auto *DRE = dyn_cast<DeclRefExpr>(NakedFn))
5772       FD = dyn_cast<FunctionDecl>(DRE->getDecl());
5773     if (FD) { // We check whether it's a resolved function declaration.
5774       if (!getLangOpts().CPlusPlus ||
5775           !FD->getType()->getAs<FunctionProtoType>())
5776         Results.push_back(ResultCandidate(FD));
5777       else
5778         AddOverloadCandidate(FD, DeclAccessPair::make(FD, FD->getAccess()),
5779                              ArgsWithoutDependentTypes, CandidateSet,
5780                              /*SuppressUserConversions=*/false,
5781                              /*PartialOverloading=*/true);
5782 
5783     } else if (auto DC = NakedFn->getType()->getAsCXXRecordDecl()) {
5784       // If expression's type is CXXRecordDecl, it may overload the function
5785       // call operator, so we check if it does and add them as candidates.
5786       // A complete type is needed to lookup for member function call operators.
5787       if (isCompleteType(Loc, NakedFn->getType())) {
5788         DeclarationName OpName =
5789             Context.DeclarationNames.getCXXOperatorName(OO_Call);
5790         LookupResult R(*this, OpName, Loc, LookupOrdinaryName);
5791         LookupQualifiedName(R, DC);
5792         R.suppressDiagnostics();
5793         SmallVector<Expr *, 12> ArgExprs(1, NakedFn);
5794         ArgExprs.append(ArgsWithoutDependentTypes.begin(),
5795                         ArgsWithoutDependentTypes.end());
5796         AddFunctionCandidates(R.asUnresolvedSet(), ArgExprs, CandidateSet,
5797                               /*ExplicitArgs=*/nullptr,
5798                               /*SuppressUserConversions=*/false,
5799                               /*PartialOverloading=*/true);
5800       }
5801     } else {
5802       // Lastly we check whether expression's type is function pointer or
5803       // function.
5804       QualType T = NakedFn->getType();
5805       if (!T->getPointeeType().isNull())
5806         T = T->getPointeeType();
5807 
5808       if (auto FP = T->getAs<FunctionProtoType>()) {
5809         if (!TooManyArguments(FP->getNumParams(),
5810                               ArgsWithoutDependentTypes.size(),
5811                               /*PartialOverloading=*/true) ||
5812             FP->isVariadic())
5813           Results.push_back(ResultCandidate(FP));
5814       } else if (auto FT = T->getAs<FunctionType>())
5815         // No prototype and declaration, it may be a K & R style function.
5816         Results.push_back(ResultCandidate(FT));
5817     }
5818   }
5819   mergeCandidatesWithResults(*this, Results, CandidateSet, Loc, Args.size());
5820   QualType ParamType =
5821       ProduceSignatureHelp(*this, S, Results, Args.size(), OpenParLoc);
5822   return !CandidateSet.empty() ? ParamType : QualType();
5823 }
5824 
5825 QualType Sema::ProduceConstructorSignatureHelp(Scope *S, QualType Type,
5826                                                SourceLocation Loc,
5827                                                ArrayRef<Expr *> Args,
5828                                                SourceLocation OpenParLoc) {
5829   if (!CodeCompleter)
5830     return QualType();
5831 
5832   // A complete type is needed to lookup for constructors.
5833   CXXRecordDecl *RD =
5834       isCompleteType(Loc, Type) ? Type->getAsCXXRecordDecl() : nullptr;
5835   if (!RD)
5836     return Type;
5837 
5838   // FIXME: Provide support for member initializers.
5839   // FIXME: Provide support for variadic template constructors.
5840 
5841   OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal);
5842 
5843   for (NamedDecl *C : LookupConstructors(RD)) {
5844     if (auto *FD = dyn_cast<FunctionDecl>(C)) {
5845       AddOverloadCandidate(FD, DeclAccessPair::make(FD, C->getAccess()), Args,
5846                            CandidateSet,
5847                            /*SuppressUserConversions=*/false,
5848                            /*PartialOverloading=*/true,
5849                            /*AllowExplicit*/ true);
5850     } else if (auto *FTD = dyn_cast<FunctionTemplateDecl>(C)) {
5851       AddTemplateOverloadCandidate(
5852           FTD, DeclAccessPair::make(FTD, C->getAccess()),
5853           /*ExplicitTemplateArgs=*/nullptr, Args, CandidateSet,
5854           /*SuppressUserConversions=*/false,
5855           /*PartialOverloading=*/true);
5856     }
5857   }
5858 
5859   SmallVector<ResultCandidate, 8> Results;
5860   mergeCandidatesWithResults(*this, Results, CandidateSet, Loc, Args.size());
5861   return ProduceSignatureHelp(*this, S, Results, Args.size(), OpenParLoc);
5862 }
5863 
5864 QualType Sema::ProduceCtorInitMemberSignatureHelp(
5865     Scope *S, Decl *ConstructorDecl, CXXScopeSpec SS, ParsedType TemplateTypeTy,
5866     ArrayRef<Expr *> ArgExprs, IdentifierInfo *II, SourceLocation OpenParLoc) {
5867   if (!CodeCompleter)
5868     return QualType();
5869 
5870   CXXConstructorDecl *Constructor =
5871       dyn_cast<CXXConstructorDecl>(ConstructorDecl);
5872   if (!Constructor)
5873     return QualType();
5874   // FIXME: Add support for Base class constructors as well.
5875   if (ValueDecl *MemberDecl = tryLookupCtorInitMemberDecl(
5876           Constructor->getParent(), SS, TemplateTypeTy, II))
5877     return ProduceConstructorSignatureHelp(getCurScope(), MemberDecl->getType(),
5878                                            MemberDecl->getLocation(), ArgExprs,
5879                                            OpenParLoc);
5880   return QualType();
5881 }
5882 
5883 static QualType getDesignatedType(QualType BaseType, const Designation &Desig) {
5884   for (unsigned I = 0; I < Desig.getNumDesignators(); ++I) {
5885     if (BaseType.isNull())
5886       break;
5887     QualType NextType;
5888     const auto &D = Desig.getDesignator(I);
5889     if (D.isArrayDesignator() || D.isArrayRangeDesignator()) {
5890       if (BaseType->isArrayType())
5891         NextType = BaseType->getAsArrayTypeUnsafe()->getElementType();
5892     } else {
5893       assert(D.isFieldDesignator());
5894       auto *RD = getAsRecordDecl(BaseType);
5895       if (RD && RD->isCompleteDefinition()) {
5896         for (const auto *Member : RD->lookup(D.getField()))
5897           if (const FieldDecl *FD = llvm::dyn_cast<FieldDecl>(Member)) {
5898             NextType = FD->getType();
5899             break;
5900           }
5901       }
5902     }
5903     BaseType = NextType;
5904   }
5905   return BaseType;
5906 }
5907 
5908 void Sema::CodeCompleteDesignator(QualType BaseType,
5909                                   llvm::ArrayRef<Expr *> InitExprs,
5910                                   const Designation &D) {
5911   BaseType = getDesignatedType(BaseType, D);
5912   if (BaseType.isNull())
5913     return;
5914   const auto *RD = getAsRecordDecl(BaseType);
5915   if (!RD || RD->fields().empty())
5916     return;
5917 
5918   CodeCompletionContext CCC(CodeCompletionContext::CCC_DotMemberAccess,
5919                             BaseType);
5920   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5921                         CodeCompleter->getCodeCompletionTUInfo(), CCC);
5922 
5923   Results.EnterNewScope();
5924   for (const auto *FD : RD->fields()) {
5925     // FIXME: Make use of previous designators to mark any fields before those
5926     // inaccessible, and also compute the next initializer priority.
5927     ResultBuilder::Result Result(FD, Results.getBasePriority(FD));
5928     Results.AddResult(Result, CurContext, /*Hiding=*/nullptr);
5929   }
5930   Results.ExitScope();
5931   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5932                             Results.data(), Results.size());
5933 }
5934 
5935 void Sema::CodeCompleteInitializer(Scope *S, Decl *D) {
5936   ValueDecl *VD = dyn_cast_or_null<ValueDecl>(D);
5937   if (!VD) {
5938     CodeCompleteOrdinaryName(S, PCC_Expression);
5939     return;
5940   }
5941 
5942   CodeCompleteExpressionData Data;
5943   Data.PreferredType = VD->getType();
5944   // Ignore VD to avoid completing the variable itself, e.g. in 'int foo = ^'.
5945   Data.IgnoreDecls.push_back(VD);
5946 
5947   CodeCompleteExpression(S, Data);
5948 }
5949 
5950 void Sema::CodeCompleteAfterIf(Scope *S, bool IsBracedThen) {
5951   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5952                         CodeCompleter->getCodeCompletionTUInfo(),
5953                         mapCodeCompletionContext(*this, PCC_Statement));
5954   Results.setFilter(&ResultBuilder::IsOrdinaryName);
5955   Results.EnterNewScope();
5956 
5957   CodeCompletionDeclConsumer Consumer(Results, CurContext);
5958   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
5959                      CodeCompleter->includeGlobals(),
5960                      CodeCompleter->loadExternal());
5961 
5962   AddOrdinaryNameResults(PCC_Statement, S, *this, Results);
5963 
5964   // "else" block
5965   CodeCompletionBuilder Builder(Results.getAllocator(),
5966                                 Results.getCodeCompletionTUInfo());
5967 
5968   auto AddElseBodyPattern = [&] {
5969     if (IsBracedThen) {
5970       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
5971       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
5972       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
5973       Builder.AddPlaceholderChunk("statements");
5974       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
5975       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
5976     } else {
5977       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
5978       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
5979       Builder.AddPlaceholderChunk("statement");
5980       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
5981     }
5982   };
5983   Builder.AddTypedTextChunk("else");
5984   if (Results.includeCodePatterns())
5985     AddElseBodyPattern();
5986   Results.AddResult(Builder.TakeString());
5987 
5988   // "else if" block
5989   Builder.AddTypedTextChunk("else if");
5990   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
5991   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
5992   if (getLangOpts().CPlusPlus)
5993     Builder.AddPlaceholderChunk("condition");
5994   else
5995     Builder.AddPlaceholderChunk("expression");
5996   Builder.AddChunk(CodeCompletionString::CK_RightParen);
5997   if (Results.includeCodePatterns()) {
5998     AddElseBodyPattern();
5999   }
6000   Results.AddResult(Builder.TakeString());
6001 
6002   Results.ExitScope();
6003 
6004   if (S->getFnParent())
6005     AddPrettyFunctionResults(getLangOpts(), Results);
6006 
6007   if (CodeCompleter->includeMacros())
6008     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
6009 
6010   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6011                             Results.data(), Results.size());
6012 }
6013 
6014 void Sema::CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS,
6015                                    bool EnteringContext,
6016                                    bool IsUsingDeclaration, QualType BaseType,
6017                                    QualType PreferredType) {
6018   if (SS.isEmpty() || !CodeCompleter)
6019     return;
6020 
6021   CodeCompletionContext CC(CodeCompletionContext::CCC_Symbol, PreferredType);
6022   CC.setIsUsingDeclaration(IsUsingDeclaration);
6023   CC.setCXXScopeSpecifier(SS);
6024 
6025   // We want to keep the scope specifier even if it's invalid (e.g. the scope
6026   // "a::b::" is not corresponding to any context/namespace in the AST), since
6027   // it can be useful for global code completion which have information about
6028   // contexts/symbols that are not in the AST.
6029   if (SS.isInvalid()) {
6030     // As SS is invalid, we try to collect accessible contexts from the current
6031     // scope with a dummy lookup so that the completion consumer can try to
6032     // guess what the specified scope is.
6033     ResultBuilder DummyResults(*this, CodeCompleter->getAllocator(),
6034                                CodeCompleter->getCodeCompletionTUInfo(), CC);
6035     if (!PreferredType.isNull())
6036       DummyResults.setPreferredType(PreferredType);
6037     if (S->getEntity()) {
6038       CodeCompletionDeclConsumer Consumer(DummyResults, S->getEntity(),
6039                                           BaseType);
6040       LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6041                          /*IncludeGlobalScope=*/false,
6042                          /*LoadExternal=*/false);
6043     }
6044     HandleCodeCompleteResults(this, CodeCompleter,
6045                               DummyResults.getCompletionContext(), nullptr, 0);
6046     return;
6047   }
6048   // Always pretend to enter a context to ensure that a dependent type
6049   // resolves to a dependent record.
6050   DeclContext *Ctx = computeDeclContext(SS, /*EnteringContext=*/true);
6051 
6052   // Try to instantiate any non-dependent declaration contexts before
6053   // we look in them. Bail out if we fail.
6054   NestedNameSpecifier *NNS = SS.getScopeRep();
6055   if (NNS != nullptr && SS.isValid() && !NNS->isDependent()) {
6056     if (Ctx == nullptr || RequireCompleteDeclContext(SS, Ctx))
6057       return;
6058   }
6059 
6060   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6061                         CodeCompleter->getCodeCompletionTUInfo(), CC);
6062   if (!PreferredType.isNull())
6063     Results.setPreferredType(PreferredType);
6064   Results.EnterNewScope();
6065 
6066   // The "template" keyword can follow "::" in the grammar, but only
6067   // put it into the grammar if the nested-name-specifier is dependent.
6068   // FIXME: results is always empty, this appears to be dead.
6069   if (!Results.empty() && NNS->isDependent())
6070     Results.AddResult("template");
6071 
6072   // If the scope is a concept-constrained type parameter, infer nested
6073   // members based on the constraints.
6074   if (const auto *TTPT =
6075           dyn_cast_or_null<TemplateTypeParmType>(NNS->getAsType())) {
6076     for (const auto &R : ConceptInfo(*TTPT, S).members()) {
6077       if (R.Operator != ConceptInfo::Member::Colons)
6078         continue;
6079       Results.AddResult(CodeCompletionResult(
6080           R.render(*this, CodeCompleter->getAllocator(),
6081                    CodeCompleter->getCodeCompletionTUInfo())));
6082     }
6083   }
6084 
6085   // Add calls to overridden virtual functions, if there are any.
6086   //
6087   // FIXME: This isn't wonderful, because we don't know whether we're actually
6088   // in a context that permits expressions. This is a general issue with
6089   // qualified-id completions.
6090   if (Ctx && !EnteringContext)
6091     MaybeAddOverrideCalls(*this, Ctx, Results);
6092   Results.ExitScope();
6093 
6094   if (Ctx &&
6095       (CodeCompleter->includeNamespaceLevelDecls() || !Ctx->isFileContext())) {
6096     CodeCompletionDeclConsumer Consumer(Results, Ctx, BaseType);
6097     LookupVisibleDecls(Ctx, LookupOrdinaryName, Consumer,
6098                        /*IncludeGlobalScope=*/true,
6099                        /*IncludeDependentBases=*/true,
6100                        CodeCompleter->loadExternal());
6101   }
6102 
6103   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6104                             Results.data(), Results.size());
6105 }
6106 
6107 void Sema::CodeCompleteUsing(Scope *S) {
6108   if (!CodeCompleter)
6109     return;
6110 
6111   // This can be both a using alias or using declaration, in the former we
6112   // expect a new name and a symbol in the latter case.
6113   CodeCompletionContext Context(CodeCompletionContext::CCC_SymbolOrNewName);
6114   Context.setIsUsingDeclaration(true);
6115 
6116   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6117                         CodeCompleter->getCodeCompletionTUInfo(), Context,
6118                         &ResultBuilder::IsNestedNameSpecifier);
6119   Results.EnterNewScope();
6120 
6121   // If we aren't in class scope, we could see the "namespace" keyword.
6122   if (!S->isClassScope())
6123     Results.AddResult(CodeCompletionResult("namespace"));
6124 
6125   // After "using", we can see anything that would start a
6126   // nested-name-specifier.
6127   CodeCompletionDeclConsumer Consumer(Results, CurContext);
6128   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6129                      CodeCompleter->includeGlobals(),
6130                      CodeCompleter->loadExternal());
6131   Results.ExitScope();
6132 
6133   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6134                             Results.data(), Results.size());
6135 }
6136 
6137 void Sema::CodeCompleteUsingDirective(Scope *S) {
6138   if (!CodeCompleter)
6139     return;
6140 
6141   // After "using namespace", we expect to see a namespace name or namespace
6142   // alias.
6143   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6144                         CodeCompleter->getCodeCompletionTUInfo(),
6145                         CodeCompletionContext::CCC_Namespace,
6146                         &ResultBuilder::IsNamespaceOrAlias);
6147   Results.EnterNewScope();
6148   CodeCompletionDeclConsumer Consumer(Results, CurContext);
6149   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6150                      CodeCompleter->includeGlobals(),
6151                      CodeCompleter->loadExternal());
6152   Results.ExitScope();
6153   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6154                             Results.data(), Results.size());
6155 }
6156 
6157 void Sema::CodeCompleteNamespaceDecl(Scope *S) {
6158   if (!CodeCompleter)
6159     return;
6160 
6161   DeclContext *Ctx = S->getEntity();
6162   if (!S->getParent())
6163     Ctx = Context.getTranslationUnitDecl();
6164 
6165   bool SuppressedGlobalResults =
6166       Ctx && !CodeCompleter->includeGlobals() && isa<TranslationUnitDecl>(Ctx);
6167 
6168   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6169                         CodeCompleter->getCodeCompletionTUInfo(),
6170                         SuppressedGlobalResults
6171                             ? CodeCompletionContext::CCC_Namespace
6172                             : CodeCompletionContext::CCC_Other,
6173                         &ResultBuilder::IsNamespace);
6174 
6175   if (Ctx && Ctx->isFileContext() && !SuppressedGlobalResults) {
6176     // We only want to see those namespaces that have already been defined
6177     // within this scope, because its likely that the user is creating an
6178     // extended namespace declaration. Keep track of the most recent
6179     // definition of each namespace.
6180     std::map<NamespaceDecl *, NamespaceDecl *> OrigToLatest;
6181     for (DeclContext::specific_decl_iterator<NamespaceDecl>
6182              NS(Ctx->decls_begin()),
6183          NSEnd(Ctx->decls_end());
6184          NS != NSEnd; ++NS)
6185       OrigToLatest[NS->getOriginalNamespace()] = *NS;
6186 
6187     // Add the most recent definition (or extended definition) of each
6188     // namespace to the list of results.
6189     Results.EnterNewScope();
6190     for (std::map<NamespaceDecl *, NamespaceDecl *>::iterator
6191              NS = OrigToLatest.begin(),
6192              NSEnd = OrigToLatest.end();
6193          NS != NSEnd; ++NS)
6194       Results.AddResult(
6195           CodeCompletionResult(NS->second, Results.getBasePriority(NS->second),
6196                                nullptr),
6197           CurContext, nullptr, false);
6198     Results.ExitScope();
6199   }
6200 
6201   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6202                             Results.data(), Results.size());
6203 }
6204 
6205 void Sema::CodeCompleteNamespaceAliasDecl(Scope *S) {
6206   if (!CodeCompleter)
6207     return;
6208 
6209   // After "namespace", we expect to see a namespace or alias.
6210   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6211                         CodeCompleter->getCodeCompletionTUInfo(),
6212                         CodeCompletionContext::CCC_Namespace,
6213                         &ResultBuilder::IsNamespaceOrAlias);
6214   CodeCompletionDeclConsumer Consumer(Results, CurContext);
6215   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6216                      CodeCompleter->includeGlobals(),
6217                      CodeCompleter->loadExternal());
6218   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6219                             Results.data(), Results.size());
6220 }
6221 
6222 void Sema::CodeCompleteOperatorName(Scope *S) {
6223   if (!CodeCompleter)
6224     return;
6225 
6226   typedef CodeCompletionResult Result;
6227   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6228                         CodeCompleter->getCodeCompletionTUInfo(),
6229                         CodeCompletionContext::CCC_Type,
6230                         &ResultBuilder::IsType);
6231   Results.EnterNewScope();
6232 
6233   // Add the names of overloadable operators. Note that OO_Conditional is not
6234   // actually overloadable.
6235 #define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly)  \
6236   if (OO_##Name != OO_Conditional)                                             \
6237     Results.AddResult(Result(Spelling));
6238 #include "clang/Basic/OperatorKinds.def"
6239 
6240   // Add any type names visible from the current scope
6241   Results.allowNestedNameSpecifiers();
6242   CodeCompletionDeclConsumer Consumer(Results, CurContext);
6243   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6244                      CodeCompleter->includeGlobals(),
6245                      CodeCompleter->loadExternal());
6246 
6247   // Add any type specifiers
6248   AddTypeSpecifierResults(getLangOpts(), Results);
6249   Results.ExitScope();
6250 
6251   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6252                             Results.data(), Results.size());
6253 }
6254 
6255 void Sema::CodeCompleteConstructorInitializer(
6256     Decl *ConstructorD, ArrayRef<CXXCtorInitializer *> Initializers) {
6257   if (!ConstructorD)
6258     return;
6259 
6260   AdjustDeclIfTemplate(ConstructorD);
6261 
6262   auto *Constructor = dyn_cast<CXXConstructorDecl>(ConstructorD);
6263   if (!Constructor)
6264     return;
6265 
6266   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6267                         CodeCompleter->getCodeCompletionTUInfo(),
6268                         CodeCompletionContext::CCC_Symbol);
6269   Results.EnterNewScope();
6270 
6271   // Fill in any already-initialized fields or base classes.
6272   llvm::SmallPtrSet<FieldDecl *, 4> InitializedFields;
6273   llvm::SmallPtrSet<CanQualType, 4> InitializedBases;
6274   for (unsigned I = 0, E = Initializers.size(); I != E; ++I) {
6275     if (Initializers[I]->isBaseInitializer())
6276       InitializedBases.insert(Context.getCanonicalType(
6277           QualType(Initializers[I]->getBaseClass(), 0)));
6278     else
6279       InitializedFields.insert(
6280           cast<FieldDecl>(Initializers[I]->getAnyMember()));
6281   }
6282 
6283   // Add completions for base classes.
6284   PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
6285   bool SawLastInitializer = Initializers.empty();
6286   CXXRecordDecl *ClassDecl = Constructor->getParent();
6287 
6288   auto GenerateCCS = [&](const NamedDecl *ND, const char *Name) {
6289     CodeCompletionBuilder Builder(Results.getAllocator(),
6290                                   Results.getCodeCompletionTUInfo());
6291     Builder.AddTypedTextChunk(Name);
6292     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6293     if (const auto *Function = dyn_cast<FunctionDecl>(ND))
6294       AddFunctionParameterChunks(PP, Policy, Function, Builder);
6295     else if (const auto *FunTemplDecl = dyn_cast<FunctionTemplateDecl>(ND))
6296       AddFunctionParameterChunks(PP, Policy, FunTemplDecl->getTemplatedDecl(),
6297                                  Builder);
6298     Builder.AddChunk(CodeCompletionString::CK_RightParen);
6299     return Builder.TakeString();
6300   };
6301   auto AddDefaultCtorInit = [&](const char *Name, const char *Type,
6302                                 const NamedDecl *ND) {
6303     CodeCompletionBuilder Builder(Results.getAllocator(),
6304                                   Results.getCodeCompletionTUInfo());
6305     Builder.AddTypedTextChunk(Name);
6306     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6307     Builder.AddPlaceholderChunk(Type);
6308     Builder.AddChunk(CodeCompletionString::CK_RightParen);
6309     if (ND) {
6310       auto CCR = CodeCompletionResult(
6311           Builder.TakeString(), ND,
6312           SawLastInitializer ? CCP_NextInitializer : CCP_MemberDeclaration);
6313       if (isa<FieldDecl>(ND))
6314         CCR.CursorKind = CXCursor_MemberRef;
6315       return Results.AddResult(CCR);
6316     }
6317     return Results.AddResult(CodeCompletionResult(
6318         Builder.TakeString(),
6319         SawLastInitializer ? CCP_NextInitializer : CCP_MemberDeclaration));
6320   };
6321   auto AddCtorsWithName = [&](const CXXRecordDecl *RD, unsigned int Priority,
6322                               const char *Name, const FieldDecl *FD) {
6323     if (!RD)
6324       return AddDefaultCtorInit(Name,
6325                                 FD ? Results.getAllocator().CopyString(
6326                                          FD->getType().getAsString(Policy))
6327                                    : Name,
6328                                 FD);
6329     auto Ctors = getConstructors(Context, RD);
6330     if (Ctors.begin() == Ctors.end())
6331       return AddDefaultCtorInit(Name, Name, RD);
6332     for (const NamedDecl *Ctor : Ctors) {
6333       auto CCR = CodeCompletionResult(GenerateCCS(Ctor, Name), RD, Priority);
6334       CCR.CursorKind = getCursorKindForDecl(Ctor);
6335       Results.AddResult(CCR);
6336     }
6337   };
6338   auto AddBase = [&](const CXXBaseSpecifier &Base) {
6339     const char *BaseName =
6340         Results.getAllocator().CopyString(Base.getType().getAsString(Policy));
6341     const auto *RD = Base.getType()->getAsCXXRecordDecl();
6342     AddCtorsWithName(
6343         RD, SawLastInitializer ? CCP_NextInitializer : CCP_MemberDeclaration,
6344         BaseName, nullptr);
6345   };
6346   auto AddField = [&](const FieldDecl *FD) {
6347     const char *FieldName =
6348         Results.getAllocator().CopyString(FD->getIdentifier()->getName());
6349     const CXXRecordDecl *RD = FD->getType()->getAsCXXRecordDecl();
6350     AddCtorsWithName(
6351         RD, SawLastInitializer ? CCP_NextInitializer : CCP_MemberDeclaration,
6352         FieldName, FD);
6353   };
6354 
6355   for (const auto &Base : ClassDecl->bases()) {
6356     if (!InitializedBases.insert(Context.getCanonicalType(Base.getType()))
6357              .second) {
6358       SawLastInitializer =
6359           !Initializers.empty() && Initializers.back()->isBaseInitializer() &&
6360           Context.hasSameUnqualifiedType(
6361               Base.getType(), QualType(Initializers.back()->getBaseClass(), 0));
6362       continue;
6363     }
6364 
6365     AddBase(Base);
6366     SawLastInitializer = false;
6367   }
6368 
6369   // Add completions for virtual base classes.
6370   for (const auto &Base : ClassDecl->vbases()) {
6371     if (!InitializedBases.insert(Context.getCanonicalType(Base.getType()))
6372              .second) {
6373       SawLastInitializer =
6374           !Initializers.empty() && Initializers.back()->isBaseInitializer() &&
6375           Context.hasSameUnqualifiedType(
6376               Base.getType(), QualType(Initializers.back()->getBaseClass(), 0));
6377       continue;
6378     }
6379 
6380     AddBase(Base);
6381     SawLastInitializer = false;
6382   }
6383 
6384   // Add completions for members.
6385   for (auto *Field : ClassDecl->fields()) {
6386     if (!InitializedFields.insert(cast<FieldDecl>(Field->getCanonicalDecl()))
6387              .second) {
6388       SawLastInitializer = !Initializers.empty() &&
6389                            Initializers.back()->isAnyMemberInitializer() &&
6390                            Initializers.back()->getAnyMember() == Field;
6391       continue;
6392     }
6393 
6394     if (!Field->getDeclName())
6395       continue;
6396 
6397     AddField(Field);
6398     SawLastInitializer = false;
6399   }
6400   Results.ExitScope();
6401 
6402   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6403                             Results.data(), Results.size());
6404 }
6405 
6406 /// Determine whether this scope denotes a namespace.
6407 static bool isNamespaceScope(Scope *S) {
6408   DeclContext *DC = S->getEntity();
6409   if (!DC)
6410     return false;
6411 
6412   return DC->isFileContext();
6413 }
6414 
6415 void Sema::CodeCompleteLambdaIntroducer(Scope *S, LambdaIntroducer &Intro,
6416                                         bool AfterAmpersand) {
6417   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6418                         CodeCompleter->getCodeCompletionTUInfo(),
6419                         CodeCompletionContext::CCC_Other);
6420   Results.EnterNewScope();
6421 
6422   // Note what has already been captured.
6423   llvm::SmallPtrSet<IdentifierInfo *, 4> Known;
6424   bool IncludedThis = false;
6425   for (const auto &C : Intro.Captures) {
6426     if (C.Kind == LCK_This) {
6427       IncludedThis = true;
6428       continue;
6429     }
6430 
6431     Known.insert(C.Id);
6432   }
6433 
6434   // Look for other capturable variables.
6435   for (; S && !isNamespaceScope(S); S = S->getParent()) {
6436     for (const auto *D : S->decls()) {
6437       const auto *Var = dyn_cast<VarDecl>(D);
6438       if (!Var || !Var->hasLocalStorage() || Var->hasAttr<BlocksAttr>())
6439         continue;
6440 
6441       if (Known.insert(Var->getIdentifier()).second)
6442         Results.AddResult(CodeCompletionResult(Var, CCP_LocalDeclaration),
6443                           CurContext, nullptr, false);
6444     }
6445   }
6446 
6447   // Add 'this', if it would be valid.
6448   if (!IncludedThis && !AfterAmpersand && Intro.Default != LCD_ByCopy)
6449     addThisCompletion(*this, Results);
6450 
6451   Results.ExitScope();
6452 
6453   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6454                             Results.data(), Results.size());
6455 }
6456 
6457 void Sema::CodeCompleteAfterFunctionEquals(Declarator &D) {
6458   if (!LangOpts.CPlusPlus11)
6459     return;
6460   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6461                         CodeCompleter->getCodeCompletionTUInfo(),
6462                         CodeCompletionContext::CCC_Other);
6463   auto ShouldAddDefault = [&D, this]() {
6464     if (!D.isFunctionDeclarator())
6465       return false;
6466     auto &Id = D.getName();
6467     if (Id.getKind() == UnqualifiedIdKind::IK_DestructorName)
6468       return true;
6469     // FIXME(liuhui): Ideally, we should check the constructor parameter list to
6470     // verify that it is the default, copy or move constructor?
6471     if (Id.getKind() == UnqualifiedIdKind::IK_ConstructorName &&
6472         D.getFunctionTypeInfo().NumParams <= 1)
6473       return true;
6474     if (Id.getKind() == UnqualifiedIdKind::IK_OperatorFunctionId) {
6475       auto Op = Id.OperatorFunctionId.Operator;
6476       // FIXME(liuhui): Ideally, we should check the function parameter list to
6477       // verify that it is the copy or move assignment?
6478       if (Op == OverloadedOperatorKind::OO_Equal)
6479         return true;
6480       if (LangOpts.CPlusPlus20 &&
6481           (Op == OverloadedOperatorKind::OO_EqualEqual ||
6482            Op == OverloadedOperatorKind::OO_ExclaimEqual ||
6483            Op == OverloadedOperatorKind::OO_Less ||
6484            Op == OverloadedOperatorKind::OO_LessEqual ||
6485            Op == OverloadedOperatorKind::OO_Greater ||
6486            Op == OverloadedOperatorKind::OO_GreaterEqual ||
6487            Op == OverloadedOperatorKind::OO_Spaceship))
6488         return true;
6489     }
6490     return false;
6491   };
6492 
6493   Results.EnterNewScope();
6494   if (ShouldAddDefault())
6495     Results.AddResult("default");
6496   // FIXME(liuhui): Ideally, we should only provide `delete` completion for the
6497   // first function declaration.
6498   Results.AddResult("delete");
6499   Results.ExitScope();
6500   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6501                             Results.data(), Results.size());
6502 }
6503 
6504 /// Macro that optionally prepends an "@" to the string literal passed in via
6505 /// Keyword, depending on whether NeedAt is true or false.
6506 #define OBJC_AT_KEYWORD_NAME(NeedAt, Keyword) ((NeedAt) ? "@" Keyword : Keyword)
6507 
6508 static void AddObjCImplementationResults(const LangOptions &LangOpts,
6509                                          ResultBuilder &Results, bool NeedAt) {
6510   typedef CodeCompletionResult Result;
6511   // Since we have an implementation, we can end it.
6512   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "end")));
6513 
6514   CodeCompletionBuilder Builder(Results.getAllocator(),
6515                                 Results.getCodeCompletionTUInfo());
6516   if (LangOpts.ObjC) {
6517     // @dynamic
6518     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "dynamic"));
6519     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6520     Builder.AddPlaceholderChunk("property");
6521     Results.AddResult(Result(Builder.TakeString()));
6522 
6523     // @synthesize
6524     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "synthesize"));
6525     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6526     Builder.AddPlaceholderChunk("property");
6527     Results.AddResult(Result(Builder.TakeString()));
6528   }
6529 }
6530 
6531 static void AddObjCInterfaceResults(const LangOptions &LangOpts,
6532                                     ResultBuilder &Results, bool NeedAt) {
6533   typedef CodeCompletionResult Result;
6534 
6535   // Since we have an interface or protocol, we can end it.
6536   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "end")));
6537 
6538   if (LangOpts.ObjC) {
6539     // @property
6540     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "property")));
6541 
6542     // @required
6543     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "required")));
6544 
6545     // @optional
6546     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "optional")));
6547   }
6548 }
6549 
6550 static void AddObjCTopLevelResults(ResultBuilder &Results, bool NeedAt) {
6551   typedef CodeCompletionResult Result;
6552   CodeCompletionBuilder Builder(Results.getAllocator(),
6553                                 Results.getCodeCompletionTUInfo());
6554 
6555   // @class name ;
6556   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "class"));
6557   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6558   Builder.AddPlaceholderChunk("name");
6559   Results.AddResult(Result(Builder.TakeString()));
6560 
6561   if (Results.includeCodePatterns()) {
6562     // @interface name
6563     // FIXME: Could introduce the whole pattern, including superclasses and
6564     // such.
6565     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "interface"));
6566     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6567     Builder.AddPlaceholderChunk("class");
6568     Results.AddResult(Result(Builder.TakeString()));
6569 
6570     // @protocol name
6571     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "protocol"));
6572     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6573     Builder.AddPlaceholderChunk("protocol");
6574     Results.AddResult(Result(Builder.TakeString()));
6575 
6576     // @implementation name
6577     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "implementation"));
6578     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6579     Builder.AddPlaceholderChunk("class");
6580     Results.AddResult(Result(Builder.TakeString()));
6581   }
6582 
6583   // @compatibility_alias name
6584   Builder.AddTypedTextChunk(
6585       OBJC_AT_KEYWORD_NAME(NeedAt, "compatibility_alias"));
6586   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6587   Builder.AddPlaceholderChunk("alias");
6588   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6589   Builder.AddPlaceholderChunk("class");
6590   Results.AddResult(Result(Builder.TakeString()));
6591 
6592   if (Results.getSema().getLangOpts().Modules) {
6593     // @import name
6594     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "import"));
6595     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6596     Builder.AddPlaceholderChunk("module");
6597     Results.AddResult(Result(Builder.TakeString()));
6598   }
6599 }
6600 
6601 void Sema::CodeCompleteObjCAtDirective(Scope *S) {
6602   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6603                         CodeCompleter->getCodeCompletionTUInfo(),
6604                         CodeCompletionContext::CCC_Other);
6605   Results.EnterNewScope();
6606   if (isa<ObjCImplDecl>(CurContext))
6607     AddObjCImplementationResults(getLangOpts(), Results, false);
6608   else if (CurContext->isObjCContainer())
6609     AddObjCInterfaceResults(getLangOpts(), Results, false);
6610   else
6611     AddObjCTopLevelResults(Results, false);
6612   Results.ExitScope();
6613   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6614                             Results.data(), Results.size());
6615 }
6616 
6617 static void AddObjCExpressionResults(ResultBuilder &Results, bool NeedAt) {
6618   typedef CodeCompletionResult Result;
6619   CodeCompletionBuilder Builder(Results.getAllocator(),
6620                                 Results.getCodeCompletionTUInfo());
6621 
6622   // @encode ( type-name )
6623   const char *EncodeType = "char[]";
6624   if (Results.getSema().getLangOpts().CPlusPlus ||
6625       Results.getSema().getLangOpts().ConstStrings)
6626     EncodeType = "const char[]";
6627   Builder.AddResultTypeChunk(EncodeType);
6628   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "encode"));
6629   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6630   Builder.AddPlaceholderChunk("type-name");
6631   Builder.AddChunk(CodeCompletionString::CK_RightParen);
6632   Results.AddResult(Result(Builder.TakeString()));
6633 
6634   // @protocol ( protocol-name )
6635   Builder.AddResultTypeChunk("Protocol *");
6636   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "protocol"));
6637   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6638   Builder.AddPlaceholderChunk("protocol-name");
6639   Builder.AddChunk(CodeCompletionString::CK_RightParen);
6640   Results.AddResult(Result(Builder.TakeString()));
6641 
6642   // @selector ( selector )
6643   Builder.AddResultTypeChunk("SEL");
6644   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "selector"));
6645   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6646   Builder.AddPlaceholderChunk("selector");
6647   Builder.AddChunk(CodeCompletionString::CK_RightParen);
6648   Results.AddResult(Result(Builder.TakeString()));
6649 
6650   // @"string"
6651   Builder.AddResultTypeChunk("NSString *");
6652   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "\""));
6653   Builder.AddPlaceholderChunk("string");
6654   Builder.AddTextChunk("\"");
6655   Results.AddResult(Result(Builder.TakeString()));
6656 
6657   // @[objects, ...]
6658   Builder.AddResultTypeChunk("NSArray *");
6659   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "["));
6660   Builder.AddPlaceholderChunk("objects, ...");
6661   Builder.AddChunk(CodeCompletionString::CK_RightBracket);
6662   Results.AddResult(Result(Builder.TakeString()));
6663 
6664   // @{key : object, ...}
6665   Builder.AddResultTypeChunk("NSDictionary *");
6666   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "{"));
6667   Builder.AddPlaceholderChunk("key");
6668   Builder.AddChunk(CodeCompletionString::CK_Colon);
6669   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6670   Builder.AddPlaceholderChunk("object, ...");
6671   Builder.AddChunk(CodeCompletionString::CK_RightBrace);
6672   Results.AddResult(Result(Builder.TakeString()));
6673 
6674   // @(expression)
6675   Builder.AddResultTypeChunk("id");
6676   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "("));
6677   Builder.AddPlaceholderChunk("expression");
6678   Builder.AddChunk(CodeCompletionString::CK_RightParen);
6679   Results.AddResult(Result(Builder.TakeString()));
6680 }
6681 
6682 static void AddObjCStatementResults(ResultBuilder &Results, bool NeedAt) {
6683   typedef CodeCompletionResult Result;
6684   CodeCompletionBuilder Builder(Results.getAllocator(),
6685                                 Results.getCodeCompletionTUInfo());
6686 
6687   if (Results.includeCodePatterns()) {
6688     // @try { statements } @catch ( declaration ) { statements } @finally
6689     //   { statements }
6690     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "try"));
6691     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
6692     Builder.AddPlaceholderChunk("statements");
6693     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
6694     Builder.AddTextChunk("@catch");
6695     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6696     Builder.AddPlaceholderChunk("parameter");
6697     Builder.AddChunk(CodeCompletionString::CK_RightParen);
6698     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
6699     Builder.AddPlaceholderChunk("statements");
6700     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
6701     Builder.AddTextChunk("@finally");
6702     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
6703     Builder.AddPlaceholderChunk("statements");
6704     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
6705     Results.AddResult(Result(Builder.TakeString()));
6706   }
6707 
6708   // @throw
6709   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "throw"));
6710   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6711   Builder.AddPlaceholderChunk("expression");
6712   Results.AddResult(Result(Builder.TakeString()));
6713 
6714   if (Results.includeCodePatterns()) {
6715     // @synchronized ( expression ) { statements }
6716     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "synchronized"));
6717     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6718     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6719     Builder.AddPlaceholderChunk("expression");
6720     Builder.AddChunk(CodeCompletionString::CK_RightParen);
6721     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
6722     Builder.AddPlaceholderChunk("statements");
6723     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
6724     Results.AddResult(Result(Builder.TakeString()));
6725   }
6726 }
6727 
6728 static void AddObjCVisibilityResults(const LangOptions &LangOpts,
6729                                      ResultBuilder &Results, bool NeedAt) {
6730   typedef CodeCompletionResult Result;
6731   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "private")));
6732   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "protected")));
6733   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "public")));
6734   if (LangOpts.ObjC)
6735     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "package")));
6736 }
6737 
6738 void Sema::CodeCompleteObjCAtVisibility(Scope *S) {
6739   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6740                         CodeCompleter->getCodeCompletionTUInfo(),
6741                         CodeCompletionContext::CCC_Other);
6742   Results.EnterNewScope();
6743   AddObjCVisibilityResults(getLangOpts(), Results, false);
6744   Results.ExitScope();
6745   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6746                             Results.data(), Results.size());
6747 }
6748 
6749 void Sema::CodeCompleteObjCAtStatement(Scope *S) {
6750   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6751                         CodeCompleter->getCodeCompletionTUInfo(),
6752                         CodeCompletionContext::CCC_Other);
6753   Results.EnterNewScope();
6754   AddObjCStatementResults(Results, false);
6755   AddObjCExpressionResults(Results, false);
6756   Results.ExitScope();
6757   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6758                             Results.data(), Results.size());
6759 }
6760 
6761 void Sema::CodeCompleteObjCAtExpression(Scope *S) {
6762   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6763                         CodeCompleter->getCodeCompletionTUInfo(),
6764                         CodeCompletionContext::CCC_Other);
6765   Results.EnterNewScope();
6766   AddObjCExpressionResults(Results, false);
6767   Results.ExitScope();
6768   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6769                             Results.data(), Results.size());
6770 }
6771 
6772 /// Determine whether the addition of the given flag to an Objective-C
6773 /// property's attributes will cause a conflict.
6774 static bool ObjCPropertyFlagConflicts(unsigned Attributes, unsigned NewFlag) {
6775   // Check if we've already added this flag.
6776   if (Attributes & NewFlag)
6777     return true;
6778 
6779   Attributes |= NewFlag;
6780 
6781   // Check for collisions with "readonly".
6782   if ((Attributes & ObjCPropertyAttribute::kind_readonly) &&
6783       (Attributes & ObjCPropertyAttribute::kind_readwrite))
6784     return true;
6785 
6786   // Check for more than one of { assign, copy, retain, strong, weak }.
6787   unsigned AssignCopyRetMask =
6788       Attributes &
6789       (ObjCPropertyAttribute::kind_assign |
6790        ObjCPropertyAttribute::kind_unsafe_unretained |
6791        ObjCPropertyAttribute::kind_copy | ObjCPropertyAttribute::kind_retain |
6792        ObjCPropertyAttribute::kind_strong | ObjCPropertyAttribute::kind_weak);
6793   if (AssignCopyRetMask &&
6794       AssignCopyRetMask != ObjCPropertyAttribute::kind_assign &&
6795       AssignCopyRetMask != ObjCPropertyAttribute::kind_unsafe_unretained &&
6796       AssignCopyRetMask != ObjCPropertyAttribute::kind_copy &&
6797       AssignCopyRetMask != ObjCPropertyAttribute::kind_retain &&
6798       AssignCopyRetMask != ObjCPropertyAttribute::kind_strong &&
6799       AssignCopyRetMask != ObjCPropertyAttribute::kind_weak)
6800     return true;
6801 
6802   return false;
6803 }
6804 
6805 void Sema::CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS) {
6806   if (!CodeCompleter)
6807     return;
6808 
6809   unsigned Attributes = ODS.getPropertyAttributes();
6810 
6811   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6812                         CodeCompleter->getCodeCompletionTUInfo(),
6813                         CodeCompletionContext::CCC_Other);
6814   Results.EnterNewScope();
6815   if (!ObjCPropertyFlagConflicts(Attributes,
6816                                  ObjCPropertyAttribute::kind_readonly))
6817     Results.AddResult(CodeCompletionResult("readonly"));
6818   if (!ObjCPropertyFlagConflicts(Attributes,
6819                                  ObjCPropertyAttribute::kind_assign))
6820     Results.AddResult(CodeCompletionResult("assign"));
6821   if (!ObjCPropertyFlagConflicts(Attributes,
6822                                  ObjCPropertyAttribute::kind_unsafe_unretained))
6823     Results.AddResult(CodeCompletionResult("unsafe_unretained"));
6824   if (!ObjCPropertyFlagConflicts(Attributes,
6825                                  ObjCPropertyAttribute::kind_readwrite))
6826     Results.AddResult(CodeCompletionResult("readwrite"));
6827   if (!ObjCPropertyFlagConflicts(Attributes,
6828                                  ObjCPropertyAttribute::kind_retain))
6829     Results.AddResult(CodeCompletionResult("retain"));
6830   if (!ObjCPropertyFlagConflicts(Attributes,
6831                                  ObjCPropertyAttribute::kind_strong))
6832     Results.AddResult(CodeCompletionResult("strong"));
6833   if (!ObjCPropertyFlagConflicts(Attributes, ObjCPropertyAttribute::kind_copy))
6834     Results.AddResult(CodeCompletionResult("copy"));
6835   if (!ObjCPropertyFlagConflicts(Attributes,
6836                                  ObjCPropertyAttribute::kind_nonatomic))
6837     Results.AddResult(CodeCompletionResult("nonatomic"));
6838   if (!ObjCPropertyFlagConflicts(Attributes,
6839                                  ObjCPropertyAttribute::kind_atomic))
6840     Results.AddResult(CodeCompletionResult("atomic"));
6841 
6842   // Only suggest "weak" if we're compiling for ARC-with-weak-references or GC.
6843   if (getLangOpts().ObjCWeak || getLangOpts().getGC() != LangOptions::NonGC)
6844     if (!ObjCPropertyFlagConflicts(Attributes,
6845                                    ObjCPropertyAttribute::kind_weak))
6846       Results.AddResult(CodeCompletionResult("weak"));
6847 
6848   if (!ObjCPropertyFlagConflicts(Attributes,
6849                                  ObjCPropertyAttribute::kind_setter)) {
6850     CodeCompletionBuilder Setter(Results.getAllocator(),
6851                                  Results.getCodeCompletionTUInfo());
6852     Setter.AddTypedTextChunk("setter");
6853     Setter.AddTextChunk("=");
6854     Setter.AddPlaceholderChunk("method");
6855     Results.AddResult(CodeCompletionResult(Setter.TakeString()));
6856   }
6857   if (!ObjCPropertyFlagConflicts(Attributes,
6858                                  ObjCPropertyAttribute::kind_getter)) {
6859     CodeCompletionBuilder Getter(Results.getAllocator(),
6860                                  Results.getCodeCompletionTUInfo());
6861     Getter.AddTypedTextChunk("getter");
6862     Getter.AddTextChunk("=");
6863     Getter.AddPlaceholderChunk("method");
6864     Results.AddResult(CodeCompletionResult(Getter.TakeString()));
6865   }
6866   if (!ObjCPropertyFlagConflicts(Attributes,
6867                                  ObjCPropertyAttribute::kind_nullability)) {
6868     Results.AddResult(CodeCompletionResult("nonnull"));
6869     Results.AddResult(CodeCompletionResult("nullable"));
6870     Results.AddResult(CodeCompletionResult("null_unspecified"));
6871     Results.AddResult(CodeCompletionResult("null_resettable"));
6872   }
6873   Results.ExitScope();
6874   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6875                             Results.data(), Results.size());
6876 }
6877 
6878 /// Describes the kind of Objective-C method that we want to find
6879 /// via code completion.
6880 enum ObjCMethodKind {
6881   MK_Any, ///< Any kind of method, provided it means other specified criteria.
6882   MK_ZeroArgSelector, ///< Zero-argument (unary) selector.
6883   MK_OneArgSelector   ///< One-argument selector.
6884 };
6885 
6886 static bool isAcceptableObjCSelector(Selector Sel, ObjCMethodKind WantKind,
6887                                      ArrayRef<IdentifierInfo *> SelIdents,
6888                                      bool AllowSameLength = true) {
6889   unsigned NumSelIdents = SelIdents.size();
6890   if (NumSelIdents > Sel.getNumArgs())
6891     return false;
6892 
6893   switch (WantKind) {
6894   case MK_Any:
6895     break;
6896   case MK_ZeroArgSelector:
6897     return Sel.isUnarySelector();
6898   case MK_OneArgSelector:
6899     return Sel.getNumArgs() == 1;
6900   }
6901 
6902   if (!AllowSameLength && NumSelIdents && NumSelIdents == Sel.getNumArgs())
6903     return false;
6904 
6905   for (unsigned I = 0; I != NumSelIdents; ++I)
6906     if (SelIdents[I] != Sel.getIdentifierInfoForSlot(I))
6907       return false;
6908 
6909   return true;
6910 }
6911 
6912 static bool isAcceptableObjCMethod(ObjCMethodDecl *Method,
6913                                    ObjCMethodKind WantKind,
6914                                    ArrayRef<IdentifierInfo *> SelIdents,
6915                                    bool AllowSameLength = true) {
6916   return isAcceptableObjCSelector(Method->getSelector(), WantKind, SelIdents,
6917                                   AllowSameLength);
6918 }
6919 
6920 /// A set of selectors, which is used to avoid introducing multiple
6921 /// completions with the same selector into the result set.
6922 typedef llvm::SmallPtrSet<Selector, 16> VisitedSelectorSet;
6923 
6924 /// Add all of the Objective-C methods in the given Objective-C
6925 /// container to the set of results.
6926 ///
6927 /// The container will be a class, protocol, category, or implementation of
6928 /// any of the above. This mether will recurse to include methods from
6929 /// the superclasses of classes along with their categories, protocols, and
6930 /// implementations.
6931 ///
6932 /// \param Container the container in which we'll look to find methods.
6933 ///
6934 /// \param WantInstanceMethods Whether to add instance methods (only); if
6935 /// false, this routine will add factory methods (only).
6936 ///
6937 /// \param CurContext the context in which we're performing the lookup that
6938 /// finds methods.
6939 ///
6940 /// \param AllowSameLength Whether we allow a method to be added to the list
6941 /// when it has the same number of parameters as we have selector identifiers.
6942 ///
6943 /// \param Results the structure into which we'll add results.
6944 static void AddObjCMethods(ObjCContainerDecl *Container,
6945                            bool WantInstanceMethods, ObjCMethodKind WantKind,
6946                            ArrayRef<IdentifierInfo *> SelIdents,
6947                            DeclContext *CurContext,
6948                            VisitedSelectorSet &Selectors, bool AllowSameLength,
6949                            ResultBuilder &Results, bool InOriginalClass = true,
6950                            bool IsRootClass = false) {
6951   typedef CodeCompletionResult Result;
6952   Container = getContainerDef(Container);
6953   ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container);
6954   IsRootClass = IsRootClass || (IFace && !IFace->getSuperClass());
6955   for (ObjCMethodDecl *M : Container->methods()) {
6956     // The instance methods on the root class can be messaged via the
6957     // metaclass.
6958     if (M->isInstanceMethod() == WantInstanceMethods ||
6959         (IsRootClass && !WantInstanceMethods)) {
6960       // Check whether the selector identifiers we've been given are a
6961       // subset of the identifiers for this particular method.
6962       if (!isAcceptableObjCMethod(M, WantKind, SelIdents, AllowSameLength))
6963         continue;
6964 
6965       if (!Selectors.insert(M->getSelector()).second)
6966         continue;
6967 
6968       Result R = Result(M, Results.getBasePriority(M), nullptr);
6969       R.StartParameter = SelIdents.size();
6970       R.AllParametersAreInformative = (WantKind != MK_Any);
6971       if (!InOriginalClass)
6972         setInBaseClass(R);
6973       Results.MaybeAddResult(R, CurContext);
6974     }
6975   }
6976 
6977   // Visit the protocols of protocols.
6978   if (const auto *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
6979     if (Protocol->hasDefinition()) {
6980       const ObjCList<ObjCProtocolDecl> &Protocols =
6981           Protocol->getReferencedProtocols();
6982       for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
6983                                                 E = Protocols.end();
6984            I != E; ++I)
6985         AddObjCMethods(*I, WantInstanceMethods, WantKind, SelIdents, CurContext,
6986                        Selectors, AllowSameLength, Results, false, IsRootClass);
6987     }
6988   }
6989 
6990   if (!IFace || !IFace->hasDefinition())
6991     return;
6992 
6993   // Add methods in protocols.
6994   for (ObjCProtocolDecl *I : IFace->protocols())
6995     AddObjCMethods(I, WantInstanceMethods, WantKind, SelIdents, CurContext,
6996                    Selectors, AllowSameLength, Results, false, IsRootClass);
6997 
6998   // Add methods in categories.
6999   for (ObjCCategoryDecl *CatDecl : IFace->known_categories()) {
7000     AddObjCMethods(CatDecl, WantInstanceMethods, WantKind, SelIdents,
7001                    CurContext, Selectors, AllowSameLength, Results,
7002                    InOriginalClass, IsRootClass);
7003 
7004     // Add a categories protocol methods.
7005     const ObjCList<ObjCProtocolDecl> &Protocols =
7006         CatDecl->getReferencedProtocols();
7007     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
7008                                               E = Protocols.end();
7009          I != E; ++I)
7010       AddObjCMethods(*I, WantInstanceMethods, WantKind, SelIdents, CurContext,
7011                      Selectors, AllowSameLength, Results, false, IsRootClass);
7012 
7013     // Add methods in category implementations.
7014     if (ObjCCategoryImplDecl *Impl = CatDecl->getImplementation())
7015       AddObjCMethods(Impl, WantInstanceMethods, WantKind, SelIdents, CurContext,
7016                      Selectors, AllowSameLength, Results, InOriginalClass,
7017                      IsRootClass);
7018   }
7019 
7020   // Add methods in superclass.
7021   // Avoid passing in IsRootClass since root classes won't have super classes.
7022   if (IFace->getSuperClass())
7023     AddObjCMethods(IFace->getSuperClass(), WantInstanceMethods, WantKind,
7024                    SelIdents, CurContext, Selectors, AllowSameLength, Results,
7025                    /*IsRootClass=*/false);
7026 
7027   // Add methods in our implementation, if any.
7028   if (ObjCImplementationDecl *Impl = IFace->getImplementation())
7029     AddObjCMethods(Impl, WantInstanceMethods, WantKind, SelIdents, CurContext,
7030                    Selectors, AllowSameLength, Results, InOriginalClass,
7031                    IsRootClass);
7032 }
7033 
7034 void Sema::CodeCompleteObjCPropertyGetter(Scope *S) {
7035   // Try to find the interface where getters might live.
7036   ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurContext);
7037   if (!Class) {
7038     if (ObjCCategoryDecl *Category =
7039             dyn_cast_or_null<ObjCCategoryDecl>(CurContext))
7040       Class = Category->getClassInterface();
7041 
7042     if (!Class)
7043       return;
7044   }
7045 
7046   // Find all of the potential getters.
7047   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7048                         CodeCompleter->getCodeCompletionTUInfo(),
7049                         CodeCompletionContext::CCC_Other);
7050   Results.EnterNewScope();
7051 
7052   VisitedSelectorSet Selectors;
7053   AddObjCMethods(Class, true, MK_ZeroArgSelector, None, CurContext, Selectors,
7054                  /*AllowSameLength=*/true, Results);
7055   Results.ExitScope();
7056   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7057                             Results.data(), Results.size());
7058 }
7059 
7060 void Sema::CodeCompleteObjCPropertySetter(Scope *S) {
7061   // Try to find the interface where setters might live.
7062   ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurContext);
7063   if (!Class) {
7064     if (ObjCCategoryDecl *Category =
7065             dyn_cast_or_null<ObjCCategoryDecl>(CurContext))
7066       Class = Category->getClassInterface();
7067 
7068     if (!Class)
7069       return;
7070   }
7071 
7072   // Find all of the potential getters.
7073   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7074                         CodeCompleter->getCodeCompletionTUInfo(),
7075                         CodeCompletionContext::CCC_Other);
7076   Results.EnterNewScope();
7077 
7078   VisitedSelectorSet Selectors;
7079   AddObjCMethods(Class, true, MK_OneArgSelector, None, CurContext, Selectors,
7080                  /*AllowSameLength=*/true, Results);
7081 
7082   Results.ExitScope();
7083   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7084                             Results.data(), Results.size());
7085 }
7086 
7087 void Sema::CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
7088                                        bool IsParameter) {
7089   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7090                         CodeCompleter->getCodeCompletionTUInfo(),
7091                         CodeCompletionContext::CCC_Type);
7092   Results.EnterNewScope();
7093 
7094   // Add context-sensitive, Objective-C parameter-passing keywords.
7095   bool AddedInOut = false;
7096   if ((DS.getObjCDeclQualifier() &
7097        (ObjCDeclSpec::DQ_In | ObjCDeclSpec::DQ_Inout)) == 0) {
7098     Results.AddResult("in");
7099     Results.AddResult("inout");
7100     AddedInOut = true;
7101   }
7102   if ((DS.getObjCDeclQualifier() &
7103        (ObjCDeclSpec::DQ_Out | ObjCDeclSpec::DQ_Inout)) == 0) {
7104     Results.AddResult("out");
7105     if (!AddedInOut)
7106       Results.AddResult("inout");
7107   }
7108   if ((DS.getObjCDeclQualifier() &
7109        (ObjCDeclSpec::DQ_Bycopy | ObjCDeclSpec::DQ_Byref |
7110         ObjCDeclSpec::DQ_Oneway)) == 0) {
7111     Results.AddResult("bycopy");
7112     Results.AddResult("byref");
7113     Results.AddResult("oneway");
7114   }
7115   if ((DS.getObjCDeclQualifier() & ObjCDeclSpec::DQ_CSNullability) == 0) {
7116     Results.AddResult("nonnull");
7117     Results.AddResult("nullable");
7118     Results.AddResult("null_unspecified");
7119   }
7120 
7121   // If we're completing the return type of an Objective-C method and the
7122   // identifier IBAction refers to a macro, provide a completion item for
7123   // an action, e.g.,
7124   //   IBAction)<#selector#>:(id)sender
7125   if (DS.getObjCDeclQualifier() == 0 && !IsParameter &&
7126       PP.isMacroDefined("IBAction")) {
7127     CodeCompletionBuilder Builder(Results.getAllocator(),
7128                                   Results.getCodeCompletionTUInfo(),
7129                                   CCP_CodePattern, CXAvailability_Available);
7130     Builder.AddTypedTextChunk("IBAction");
7131     Builder.AddChunk(CodeCompletionString::CK_RightParen);
7132     Builder.AddPlaceholderChunk("selector");
7133     Builder.AddChunk(CodeCompletionString::CK_Colon);
7134     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
7135     Builder.AddTextChunk("id");
7136     Builder.AddChunk(CodeCompletionString::CK_RightParen);
7137     Builder.AddTextChunk("sender");
7138     Results.AddResult(CodeCompletionResult(Builder.TakeString()));
7139   }
7140 
7141   // If we're completing the return type, provide 'instancetype'.
7142   if (!IsParameter) {
7143     Results.AddResult(CodeCompletionResult("instancetype"));
7144   }
7145 
7146   // Add various builtin type names and specifiers.
7147   AddOrdinaryNameResults(PCC_Type, S, *this, Results);
7148   Results.ExitScope();
7149 
7150   // Add the various type names
7151   Results.setFilter(&ResultBuilder::IsOrdinaryNonValueName);
7152   CodeCompletionDeclConsumer Consumer(Results, CurContext);
7153   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
7154                      CodeCompleter->includeGlobals(),
7155                      CodeCompleter->loadExternal());
7156 
7157   if (CodeCompleter->includeMacros())
7158     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
7159 
7160   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7161                             Results.data(), Results.size());
7162 }
7163 
7164 /// When we have an expression with type "id", we may assume
7165 /// that it has some more-specific class type based on knowledge of
7166 /// common uses of Objective-C. This routine returns that class type,
7167 /// or NULL if no better result could be determined.
7168 static ObjCInterfaceDecl *GetAssumedMessageSendExprType(Expr *E) {
7169   auto *Msg = dyn_cast_or_null<ObjCMessageExpr>(E);
7170   if (!Msg)
7171     return nullptr;
7172 
7173   Selector Sel = Msg->getSelector();
7174   if (Sel.isNull())
7175     return nullptr;
7176 
7177   IdentifierInfo *Id = Sel.getIdentifierInfoForSlot(0);
7178   if (!Id)
7179     return nullptr;
7180 
7181   ObjCMethodDecl *Method = Msg->getMethodDecl();
7182   if (!Method)
7183     return nullptr;
7184 
7185   // Determine the class that we're sending the message to.
7186   ObjCInterfaceDecl *IFace = nullptr;
7187   switch (Msg->getReceiverKind()) {
7188   case ObjCMessageExpr::Class:
7189     if (const ObjCObjectType *ObjType =
7190             Msg->getClassReceiver()->getAs<ObjCObjectType>())
7191       IFace = ObjType->getInterface();
7192     break;
7193 
7194   case ObjCMessageExpr::Instance: {
7195     QualType T = Msg->getInstanceReceiver()->getType();
7196     if (const ObjCObjectPointerType *Ptr = T->getAs<ObjCObjectPointerType>())
7197       IFace = Ptr->getInterfaceDecl();
7198     break;
7199   }
7200 
7201   case ObjCMessageExpr::SuperInstance:
7202   case ObjCMessageExpr::SuperClass:
7203     break;
7204   }
7205 
7206   if (!IFace)
7207     return nullptr;
7208 
7209   ObjCInterfaceDecl *Super = IFace->getSuperClass();
7210   if (Method->isInstanceMethod())
7211     return llvm::StringSwitch<ObjCInterfaceDecl *>(Id->getName())
7212         .Case("retain", IFace)
7213         .Case("strong", IFace)
7214         .Case("autorelease", IFace)
7215         .Case("copy", IFace)
7216         .Case("copyWithZone", IFace)
7217         .Case("mutableCopy", IFace)
7218         .Case("mutableCopyWithZone", IFace)
7219         .Case("awakeFromCoder", IFace)
7220         .Case("replacementObjectFromCoder", IFace)
7221         .Case("class", IFace)
7222         .Case("classForCoder", IFace)
7223         .Case("superclass", Super)
7224         .Default(nullptr);
7225 
7226   return llvm::StringSwitch<ObjCInterfaceDecl *>(Id->getName())
7227       .Case("new", IFace)
7228       .Case("alloc", IFace)
7229       .Case("allocWithZone", IFace)
7230       .Case("class", IFace)
7231       .Case("superclass", Super)
7232       .Default(nullptr);
7233 }
7234 
7235 // Add a special completion for a message send to "super", which fills in the
7236 // most likely case of forwarding all of our arguments to the superclass
7237 // function.
7238 ///
7239 /// \param S The semantic analysis object.
7240 ///
7241 /// \param NeedSuperKeyword Whether we need to prefix this completion with
7242 /// the "super" keyword. Otherwise, we just need to provide the arguments.
7243 ///
7244 /// \param SelIdents The identifiers in the selector that have already been
7245 /// provided as arguments for a send to "super".
7246 ///
7247 /// \param Results The set of results to augment.
7248 ///
7249 /// \returns the Objective-C method declaration that would be invoked by
7250 /// this "super" completion. If NULL, no completion was added.
7251 static ObjCMethodDecl *
7252 AddSuperSendCompletion(Sema &S, bool NeedSuperKeyword,
7253                        ArrayRef<IdentifierInfo *> SelIdents,
7254                        ResultBuilder &Results) {
7255   ObjCMethodDecl *CurMethod = S.getCurMethodDecl();
7256   if (!CurMethod)
7257     return nullptr;
7258 
7259   ObjCInterfaceDecl *Class = CurMethod->getClassInterface();
7260   if (!Class)
7261     return nullptr;
7262 
7263   // Try to find a superclass method with the same selector.
7264   ObjCMethodDecl *SuperMethod = nullptr;
7265   while ((Class = Class->getSuperClass()) && !SuperMethod) {
7266     // Check in the class
7267     SuperMethod = Class->getMethod(CurMethod->getSelector(),
7268                                    CurMethod->isInstanceMethod());
7269 
7270     // Check in categories or class extensions.
7271     if (!SuperMethod) {
7272       for (const auto *Cat : Class->known_categories()) {
7273         if ((SuperMethod = Cat->getMethod(CurMethod->getSelector(),
7274                                           CurMethod->isInstanceMethod())))
7275           break;
7276       }
7277     }
7278   }
7279 
7280   if (!SuperMethod)
7281     return nullptr;
7282 
7283   // Check whether the superclass method has the same signature.
7284   if (CurMethod->param_size() != SuperMethod->param_size() ||
7285       CurMethod->isVariadic() != SuperMethod->isVariadic())
7286     return nullptr;
7287 
7288   for (ObjCMethodDecl::param_iterator CurP = CurMethod->param_begin(),
7289                                       CurPEnd = CurMethod->param_end(),
7290                                       SuperP = SuperMethod->param_begin();
7291        CurP != CurPEnd; ++CurP, ++SuperP) {
7292     // Make sure the parameter types are compatible.
7293     if (!S.Context.hasSameUnqualifiedType((*CurP)->getType(),
7294                                           (*SuperP)->getType()))
7295       return nullptr;
7296 
7297     // Make sure we have a parameter name to forward!
7298     if (!(*CurP)->getIdentifier())
7299       return nullptr;
7300   }
7301 
7302   // We have a superclass method. Now, form the send-to-super completion.
7303   CodeCompletionBuilder Builder(Results.getAllocator(),
7304                                 Results.getCodeCompletionTUInfo());
7305 
7306   // Give this completion a return type.
7307   AddResultTypeChunk(S.Context, getCompletionPrintingPolicy(S), SuperMethod,
7308                      Results.getCompletionContext().getBaseType(), Builder);
7309 
7310   // If we need the "super" keyword, add it (plus some spacing).
7311   if (NeedSuperKeyword) {
7312     Builder.AddTypedTextChunk("super");
7313     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7314   }
7315 
7316   Selector Sel = CurMethod->getSelector();
7317   if (Sel.isUnarySelector()) {
7318     if (NeedSuperKeyword)
7319       Builder.AddTextChunk(
7320           Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
7321     else
7322       Builder.AddTypedTextChunk(
7323           Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
7324   } else {
7325     ObjCMethodDecl::param_iterator CurP = CurMethod->param_begin();
7326     for (unsigned I = 0, N = Sel.getNumArgs(); I != N; ++I, ++CurP) {
7327       if (I > SelIdents.size())
7328         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7329 
7330       if (I < SelIdents.size())
7331         Builder.AddInformativeChunk(
7332             Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
7333       else if (NeedSuperKeyword || I > SelIdents.size()) {
7334         Builder.AddTextChunk(
7335             Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
7336         Builder.AddPlaceholderChunk(Builder.getAllocator().CopyString(
7337             (*CurP)->getIdentifier()->getName()));
7338       } else {
7339         Builder.AddTypedTextChunk(
7340             Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
7341         Builder.AddPlaceholderChunk(Builder.getAllocator().CopyString(
7342             (*CurP)->getIdentifier()->getName()));
7343       }
7344     }
7345   }
7346 
7347   Results.AddResult(CodeCompletionResult(Builder.TakeString(), SuperMethod,
7348                                          CCP_SuperCompletion));
7349   return SuperMethod;
7350 }
7351 
7352 void Sema::CodeCompleteObjCMessageReceiver(Scope *S) {
7353   typedef CodeCompletionResult Result;
7354   ResultBuilder Results(
7355       *this, CodeCompleter->getAllocator(),
7356       CodeCompleter->getCodeCompletionTUInfo(),
7357       CodeCompletionContext::CCC_ObjCMessageReceiver,
7358       getLangOpts().CPlusPlus11
7359           ? &ResultBuilder::IsObjCMessageReceiverOrLambdaCapture
7360           : &ResultBuilder::IsObjCMessageReceiver);
7361 
7362   CodeCompletionDeclConsumer Consumer(Results, CurContext);
7363   Results.EnterNewScope();
7364   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
7365                      CodeCompleter->includeGlobals(),
7366                      CodeCompleter->loadExternal());
7367 
7368   // If we are in an Objective-C method inside a class that has a superclass,
7369   // add "super" as an option.
7370   if (ObjCMethodDecl *Method = getCurMethodDecl())
7371     if (ObjCInterfaceDecl *Iface = Method->getClassInterface())
7372       if (Iface->getSuperClass()) {
7373         Results.AddResult(Result("super"));
7374 
7375         AddSuperSendCompletion(*this, /*NeedSuperKeyword=*/true, None, Results);
7376       }
7377 
7378   if (getLangOpts().CPlusPlus11)
7379     addThisCompletion(*this, Results);
7380 
7381   Results.ExitScope();
7382 
7383   if (CodeCompleter->includeMacros())
7384     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
7385   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7386                             Results.data(), Results.size());
7387 }
7388 
7389 void Sema::CodeCompleteObjCSuperMessage(Scope *S, SourceLocation SuperLoc,
7390                                         ArrayRef<IdentifierInfo *> SelIdents,
7391                                         bool AtArgumentExpression) {
7392   ObjCInterfaceDecl *CDecl = nullptr;
7393   if (ObjCMethodDecl *CurMethod = getCurMethodDecl()) {
7394     // Figure out which interface we're in.
7395     CDecl = CurMethod->getClassInterface();
7396     if (!CDecl)
7397       return;
7398 
7399     // Find the superclass of this class.
7400     CDecl = CDecl->getSuperClass();
7401     if (!CDecl)
7402       return;
7403 
7404     if (CurMethod->isInstanceMethod()) {
7405       // We are inside an instance method, which means that the message
7406       // send [super ...] is actually calling an instance method on the
7407       // current object.
7408       return CodeCompleteObjCInstanceMessage(S, nullptr, SelIdents,
7409                                              AtArgumentExpression, CDecl);
7410     }
7411 
7412     // Fall through to send to the superclass in CDecl.
7413   } else {
7414     // "super" may be the name of a type or variable. Figure out which
7415     // it is.
7416     IdentifierInfo *Super = getSuperIdentifier();
7417     NamedDecl *ND = LookupSingleName(S, Super, SuperLoc, LookupOrdinaryName);
7418     if ((CDecl = dyn_cast_or_null<ObjCInterfaceDecl>(ND))) {
7419       // "super" names an interface. Use it.
7420     } else if (TypeDecl *TD = dyn_cast_or_null<TypeDecl>(ND)) {
7421       if (const ObjCObjectType *Iface =
7422               Context.getTypeDeclType(TD)->getAs<ObjCObjectType>())
7423         CDecl = Iface->getInterface();
7424     } else if (ND && isa<UnresolvedUsingTypenameDecl>(ND)) {
7425       // "super" names an unresolved type; we can't be more specific.
7426     } else {
7427       // Assume that "super" names some kind of value and parse that way.
7428       CXXScopeSpec SS;
7429       SourceLocation TemplateKWLoc;
7430       UnqualifiedId id;
7431       id.setIdentifier(Super, SuperLoc);
7432       ExprResult SuperExpr = ActOnIdExpression(S, SS, TemplateKWLoc, id,
7433                                                /*HasTrailingLParen=*/false,
7434                                                /*IsAddressOfOperand=*/false);
7435       return CodeCompleteObjCInstanceMessage(S, (Expr *)SuperExpr.get(),
7436                                              SelIdents, AtArgumentExpression);
7437     }
7438 
7439     // Fall through
7440   }
7441 
7442   ParsedType Receiver;
7443   if (CDecl)
7444     Receiver = ParsedType::make(Context.getObjCInterfaceType(CDecl));
7445   return CodeCompleteObjCClassMessage(S, Receiver, SelIdents,
7446                                       AtArgumentExpression,
7447                                       /*IsSuper=*/true);
7448 }
7449 
7450 /// Given a set of code-completion results for the argument of a message
7451 /// send, determine the preferred type (if any) for that argument expression.
7452 static QualType getPreferredArgumentTypeForMessageSend(ResultBuilder &Results,
7453                                                        unsigned NumSelIdents) {
7454   typedef CodeCompletionResult Result;
7455   ASTContext &Context = Results.getSema().Context;
7456 
7457   QualType PreferredType;
7458   unsigned BestPriority = CCP_Unlikely * 2;
7459   Result *ResultsData = Results.data();
7460   for (unsigned I = 0, N = Results.size(); I != N; ++I) {
7461     Result &R = ResultsData[I];
7462     if (R.Kind == Result::RK_Declaration &&
7463         isa<ObjCMethodDecl>(R.Declaration)) {
7464       if (R.Priority <= BestPriority) {
7465         const ObjCMethodDecl *Method = cast<ObjCMethodDecl>(R.Declaration);
7466         if (NumSelIdents <= Method->param_size()) {
7467           QualType MyPreferredType =
7468               Method->parameters()[NumSelIdents - 1]->getType();
7469           if (R.Priority < BestPriority || PreferredType.isNull()) {
7470             BestPriority = R.Priority;
7471             PreferredType = MyPreferredType;
7472           } else if (!Context.hasSameUnqualifiedType(PreferredType,
7473                                                      MyPreferredType)) {
7474             PreferredType = QualType();
7475           }
7476         }
7477       }
7478     }
7479   }
7480 
7481   return PreferredType;
7482 }
7483 
7484 static void AddClassMessageCompletions(Sema &SemaRef, Scope *S,
7485                                        ParsedType Receiver,
7486                                        ArrayRef<IdentifierInfo *> SelIdents,
7487                                        bool AtArgumentExpression, bool IsSuper,
7488                                        ResultBuilder &Results) {
7489   typedef CodeCompletionResult Result;
7490   ObjCInterfaceDecl *CDecl = nullptr;
7491 
7492   // If the given name refers to an interface type, retrieve the
7493   // corresponding declaration.
7494   if (Receiver) {
7495     QualType T = SemaRef.GetTypeFromParser(Receiver, nullptr);
7496     if (!T.isNull())
7497       if (const ObjCObjectType *Interface = T->getAs<ObjCObjectType>())
7498         CDecl = Interface->getInterface();
7499   }
7500 
7501   // Add all of the factory methods in this Objective-C class, its protocols,
7502   // superclasses, categories, implementation, etc.
7503   Results.EnterNewScope();
7504 
7505   // If this is a send-to-super, try to add the special "super" send
7506   // completion.
7507   if (IsSuper) {
7508     if (ObjCMethodDecl *SuperMethod =
7509             AddSuperSendCompletion(SemaRef, false, SelIdents, Results))
7510       Results.Ignore(SuperMethod);
7511   }
7512 
7513   // If we're inside an Objective-C method definition, prefer its selector to
7514   // others.
7515   if (ObjCMethodDecl *CurMethod = SemaRef.getCurMethodDecl())
7516     Results.setPreferredSelector(CurMethod->getSelector());
7517 
7518   VisitedSelectorSet Selectors;
7519   if (CDecl)
7520     AddObjCMethods(CDecl, false, MK_Any, SelIdents, SemaRef.CurContext,
7521                    Selectors, AtArgumentExpression, Results);
7522   else {
7523     // We're messaging "id" as a type; provide all class/factory methods.
7524 
7525     // If we have an external source, load the entire class method
7526     // pool from the AST file.
7527     if (SemaRef.getExternalSource()) {
7528       for (uint32_t I = 0,
7529                     N = SemaRef.getExternalSource()->GetNumExternalSelectors();
7530            I != N; ++I) {
7531         Selector Sel = SemaRef.getExternalSource()->GetExternalSelector(I);
7532         if (Sel.isNull() || SemaRef.MethodPool.count(Sel))
7533           continue;
7534 
7535         SemaRef.ReadMethodPool(Sel);
7536       }
7537     }
7538 
7539     for (Sema::GlobalMethodPool::iterator M = SemaRef.MethodPool.begin(),
7540                                           MEnd = SemaRef.MethodPool.end();
7541          M != MEnd; ++M) {
7542       for (ObjCMethodList *MethList = &M->second.second;
7543            MethList && MethList->getMethod(); MethList = MethList->getNext()) {
7544         if (!isAcceptableObjCMethod(MethList->getMethod(), MK_Any, SelIdents))
7545           continue;
7546 
7547         Result R(MethList->getMethod(),
7548                  Results.getBasePriority(MethList->getMethod()), nullptr);
7549         R.StartParameter = SelIdents.size();
7550         R.AllParametersAreInformative = false;
7551         Results.MaybeAddResult(R, SemaRef.CurContext);
7552       }
7553     }
7554   }
7555 
7556   Results.ExitScope();
7557 }
7558 
7559 void Sema::CodeCompleteObjCClassMessage(Scope *S, ParsedType Receiver,
7560                                         ArrayRef<IdentifierInfo *> SelIdents,
7561                                         bool AtArgumentExpression,
7562                                         bool IsSuper) {
7563 
7564   QualType T = this->GetTypeFromParser(Receiver);
7565 
7566   ResultBuilder Results(
7567       *this, CodeCompleter->getAllocator(),
7568       CodeCompleter->getCodeCompletionTUInfo(),
7569       CodeCompletionContext(CodeCompletionContext::CCC_ObjCClassMessage, T,
7570                             SelIdents));
7571 
7572   AddClassMessageCompletions(*this, S, Receiver, SelIdents,
7573                              AtArgumentExpression, IsSuper, Results);
7574 
7575   // If we're actually at the argument expression (rather than prior to the
7576   // selector), we're actually performing code completion for an expression.
7577   // Determine whether we have a single, best method. If so, we can
7578   // code-complete the expression using the corresponding parameter type as
7579   // our preferred type, improving completion results.
7580   if (AtArgumentExpression) {
7581     QualType PreferredType =
7582         getPreferredArgumentTypeForMessageSend(Results, SelIdents.size());
7583     if (PreferredType.isNull())
7584       CodeCompleteOrdinaryName(S, PCC_Expression);
7585     else
7586       CodeCompleteExpression(S, PreferredType);
7587     return;
7588   }
7589 
7590   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7591                             Results.data(), Results.size());
7592 }
7593 
7594 void Sema::CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver,
7595                                            ArrayRef<IdentifierInfo *> SelIdents,
7596                                            bool AtArgumentExpression,
7597                                            ObjCInterfaceDecl *Super) {
7598   typedef CodeCompletionResult Result;
7599 
7600   Expr *RecExpr = static_cast<Expr *>(Receiver);
7601 
7602   // If necessary, apply function/array conversion to the receiver.
7603   // C99 6.7.5.3p[7,8].
7604   if (RecExpr) {
7605     ExprResult Conv = DefaultFunctionArrayLvalueConversion(RecExpr);
7606     if (Conv.isInvalid()) // conversion failed. bail.
7607       return;
7608     RecExpr = Conv.get();
7609   }
7610   QualType ReceiverType = RecExpr
7611                               ? RecExpr->getType()
7612                               : Super ? Context.getObjCObjectPointerType(
7613                                             Context.getObjCInterfaceType(Super))
7614                                       : Context.getObjCIdType();
7615 
7616   // If we're messaging an expression with type "id" or "Class", check
7617   // whether we know something special about the receiver that allows
7618   // us to assume a more-specific receiver type.
7619   if (ReceiverType->isObjCIdType() || ReceiverType->isObjCClassType()) {
7620     if (ObjCInterfaceDecl *IFace = GetAssumedMessageSendExprType(RecExpr)) {
7621       if (ReceiverType->isObjCClassType())
7622         return CodeCompleteObjCClassMessage(
7623             S, ParsedType::make(Context.getObjCInterfaceType(IFace)), SelIdents,
7624             AtArgumentExpression, Super);
7625 
7626       ReceiverType =
7627           Context.getObjCObjectPointerType(Context.getObjCInterfaceType(IFace));
7628     }
7629   } else if (RecExpr && getLangOpts().CPlusPlus) {
7630     ExprResult Conv = PerformContextuallyConvertToObjCPointer(RecExpr);
7631     if (Conv.isUsable()) {
7632       RecExpr = Conv.get();
7633       ReceiverType = RecExpr->getType();
7634     }
7635   }
7636 
7637   // Build the set of methods we can see.
7638   ResultBuilder Results(
7639       *this, CodeCompleter->getAllocator(),
7640       CodeCompleter->getCodeCompletionTUInfo(),
7641       CodeCompletionContext(CodeCompletionContext::CCC_ObjCInstanceMessage,
7642                             ReceiverType, SelIdents));
7643 
7644   Results.EnterNewScope();
7645 
7646   // If this is a send-to-super, try to add the special "super" send
7647   // completion.
7648   if (Super) {
7649     if (ObjCMethodDecl *SuperMethod =
7650             AddSuperSendCompletion(*this, false, SelIdents, Results))
7651       Results.Ignore(SuperMethod);
7652   }
7653 
7654   // If we're inside an Objective-C method definition, prefer its selector to
7655   // others.
7656   if (ObjCMethodDecl *CurMethod = getCurMethodDecl())
7657     Results.setPreferredSelector(CurMethod->getSelector());
7658 
7659   // Keep track of the selectors we've already added.
7660   VisitedSelectorSet Selectors;
7661 
7662   // Handle messages to Class. This really isn't a message to an instance
7663   // method, so we treat it the same way we would treat a message send to a
7664   // class method.
7665   if (ReceiverType->isObjCClassType() ||
7666       ReceiverType->isObjCQualifiedClassType()) {
7667     if (ObjCMethodDecl *CurMethod = getCurMethodDecl()) {
7668       if (ObjCInterfaceDecl *ClassDecl = CurMethod->getClassInterface())
7669         AddObjCMethods(ClassDecl, false, MK_Any, SelIdents, CurContext,
7670                        Selectors, AtArgumentExpression, Results);
7671     }
7672   }
7673   // Handle messages to a qualified ID ("id<foo>").
7674   else if (const ObjCObjectPointerType *QualID =
7675                ReceiverType->getAsObjCQualifiedIdType()) {
7676     // Search protocols for instance methods.
7677     for (auto *I : QualID->quals())
7678       AddObjCMethods(I, true, MK_Any, SelIdents, CurContext, Selectors,
7679                      AtArgumentExpression, Results);
7680   }
7681   // Handle messages to a pointer to interface type.
7682   else if (const ObjCObjectPointerType *IFacePtr =
7683                ReceiverType->getAsObjCInterfacePointerType()) {
7684     // Search the class, its superclasses, etc., for instance methods.
7685     AddObjCMethods(IFacePtr->getInterfaceDecl(), true, MK_Any, SelIdents,
7686                    CurContext, Selectors, AtArgumentExpression, Results);
7687 
7688     // Search protocols for instance methods.
7689     for (auto *I : IFacePtr->quals())
7690       AddObjCMethods(I, true, MK_Any, SelIdents, CurContext, Selectors,
7691                      AtArgumentExpression, Results);
7692   }
7693   // Handle messages to "id".
7694   else if (ReceiverType->isObjCIdType()) {
7695     // We're messaging "id", so provide all instance methods we know
7696     // about as code-completion results.
7697 
7698     // If we have an external source, load the entire class method
7699     // pool from the AST file.
7700     if (ExternalSource) {
7701       for (uint32_t I = 0, N = ExternalSource->GetNumExternalSelectors();
7702            I != N; ++I) {
7703         Selector Sel = ExternalSource->GetExternalSelector(I);
7704         if (Sel.isNull() || MethodPool.count(Sel))
7705           continue;
7706 
7707         ReadMethodPool(Sel);
7708       }
7709     }
7710 
7711     for (GlobalMethodPool::iterator M = MethodPool.begin(),
7712                                     MEnd = MethodPool.end();
7713          M != MEnd; ++M) {
7714       for (ObjCMethodList *MethList = &M->second.first;
7715            MethList && MethList->getMethod(); MethList = MethList->getNext()) {
7716         if (!isAcceptableObjCMethod(MethList->getMethod(), MK_Any, SelIdents))
7717           continue;
7718 
7719         if (!Selectors.insert(MethList->getMethod()->getSelector()).second)
7720           continue;
7721 
7722         Result R(MethList->getMethod(),
7723                  Results.getBasePriority(MethList->getMethod()), nullptr);
7724         R.StartParameter = SelIdents.size();
7725         R.AllParametersAreInformative = false;
7726         Results.MaybeAddResult(R, CurContext);
7727       }
7728     }
7729   }
7730   Results.ExitScope();
7731 
7732   // If we're actually at the argument expression (rather than prior to the
7733   // selector), we're actually performing code completion for an expression.
7734   // Determine whether we have a single, best method. If so, we can
7735   // code-complete the expression using the corresponding parameter type as
7736   // our preferred type, improving completion results.
7737   if (AtArgumentExpression) {
7738     QualType PreferredType =
7739         getPreferredArgumentTypeForMessageSend(Results, SelIdents.size());
7740     if (PreferredType.isNull())
7741       CodeCompleteOrdinaryName(S, PCC_Expression);
7742     else
7743       CodeCompleteExpression(S, PreferredType);
7744     return;
7745   }
7746 
7747   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7748                             Results.data(), Results.size());
7749 }
7750 
7751 void Sema::CodeCompleteObjCForCollection(Scope *S,
7752                                          DeclGroupPtrTy IterationVar) {
7753   CodeCompleteExpressionData Data;
7754   Data.ObjCCollection = true;
7755 
7756   if (IterationVar.getAsOpaquePtr()) {
7757     DeclGroupRef DG = IterationVar.get();
7758     for (DeclGroupRef::iterator I = DG.begin(), End = DG.end(); I != End; ++I) {
7759       if (*I)
7760         Data.IgnoreDecls.push_back(*I);
7761     }
7762   }
7763 
7764   CodeCompleteExpression(S, Data);
7765 }
7766 
7767 void Sema::CodeCompleteObjCSelector(Scope *S,
7768                                     ArrayRef<IdentifierInfo *> SelIdents) {
7769   // If we have an external source, load the entire class method
7770   // pool from the AST file.
7771   if (ExternalSource) {
7772     for (uint32_t I = 0, N = ExternalSource->GetNumExternalSelectors(); I != N;
7773          ++I) {
7774       Selector Sel = ExternalSource->GetExternalSelector(I);
7775       if (Sel.isNull() || MethodPool.count(Sel))
7776         continue;
7777 
7778       ReadMethodPool(Sel);
7779     }
7780   }
7781 
7782   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7783                         CodeCompleter->getCodeCompletionTUInfo(),
7784                         CodeCompletionContext::CCC_SelectorName);
7785   Results.EnterNewScope();
7786   for (GlobalMethodPool::iterator M = MethodPool.begin(),
7787                                   MEnd = MethodPool.end();
7788        M != MEnd; ++M) {
7789 
7790     Selector Sel = M->first;
7791     if (!isAcceptableObjCSelector(Sel, MK_Any, SelIdents))
7792       continue;
7793 
7794     CodeCompletionBuilder Builder(Results.getAllocator(),
7795                                   Results.getCodeCompletionTUInfo());
7796     if (Sel.isUnarySelector()) {
7797       Builder.AddTypedTextChunk(
7798           Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
7799       Results.AddResult(Builder.TakeString());
7800       continue;
7801     }
7802 
7803     std::string Accumulator;
7804     for (unsigned I = 0, N = Sel.getNumArgs(); I != N; ++I) {
7805       if (I == SelIdents.size()) {
7806         if (!Accumulator.empty()) {
7807           Builder.AddInformativeChunk(
7808               Builder.getAllocator().CopyString(Accumulator));
7809           Accumulator.clear();
7810         }
7811       }
7812 
7813       Accumulator += Sel.getNameForSlot(I);
7814       Accumulator += ':';
7815     }
7816     Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(Accumulator));
7817     Results.AddResult(Builder.TakeString());
7818   }
7819   Results.ExitScope();
7820 
7821   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7822                             Results.data(), Results.size());
7823 }
7824 
7825 /// Add all of the protocol declarations that we find in the given
7826 /// (translation unit) context.
7827 static void AddProtocolResults(DeclContext *Ctx, DeclContext *CurContext,
7828                                bool OnlyForwardDeclarations,
7829                                ResultBuilder &Results) {
7830   typedef CodeCompletionResult Result;
7831 
7832   for (const auto *D : Ctx->decls()) {
7833     // Record any protocols we find.
7834     if (const auto *Proto = dyn_cast<ObjCProtocolDecl>(D))
7835       if (!OnlyForwardDeclarations || !Proto->hasDefinition())
7836         Results.AddResult(
7837             Result(Proto, Results.getBasePriority(Proto), nullptr), CurContext,
7838             nullptr, false);
7839   }
7840 }
7841 
7842 void Sema::CodeCompleteObjCProtocolReferences(
7843     ArrayRef<IdentifierLocPair> Protocols) {
7844   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7845                         CodeCompleter->getCodeCompletionTUInfo(),
7846                         CodeCompletionContext::CCC_ObjCProtocolName);
7847 
7848   if (CodeCompleter->includeGlobals()) {
7849     Results.EnterNewScope();
7850 
7851     // Tell the result set to ignore all of the protocols we have
7852     // already seen.
7853     // FIXME: This doesn't work when caching code-completion results.
7854     for (const IdentifierLocPair &Pair : Protocols)
7855       if (ObjCProtocolDecl *Protocol = LookupProtocol(Pair.first, Pair.second))
7856         Results.Ignore(Protocol);
7857 
7858     // Add all protocols.
7859     AddProtocolResults(Context.getTranslationUnitDecl(), CurContext, false,
7860                        Results);
7861 
7862     Results.ExitScope();
7863   }
7864 
7865   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7866                             Results.data(), Results.size());
7867 }
7868 
7869 void Sema::CodeCompleteObjCProtocolDecl(Scope *) {
7870   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7871                         CodeCompleter->getCodeCompletionTUInfo(),
7872                         CodeCompletionContext::CCC_ObjCProtocolName);
7873 
7874   if (CodeCompleter->includeGlobals()) {
7875     Results.EnterNewScope();
7876 
7877     // Add all protocols.
7878     AddProtocolResults(Context.getTranslationUnitDecl(), CurContext, true,
7879                        Results);
7880 
7881     Results.ExitScope();
7882   }
7883 
7884   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7885                             Results.data(), Results.size());
7886 }
7887 
7888 /// Add all of the Objective-C interface declarations that we find in
7889 /// the given (translation unit) context.
7890 static void AddInterfaceResults(DeclContext *Ctx, DeclContext *CurContext,
7891                                 bool OnlyForwardDeclarations,
7892                                 bool OnlyUnimplemented,
7893                                 ResultBuilder &Results) {
7894   typedef CodeCompletionResult Result;
7895 
7896   for (const auto *D : Ctx->decls()) {
7897     // Record any interfaces we find.
7898     if (const auto *Class = dyn_cast<ObjCInterfaceDecl>(D))
7899       if ((!OnlyForwardDeclarations || !Class->hasDefinition()) &&
7900           (!OnlyUnimplemented || !Class->getImplementation()))
7901         Results.AddResult(
7902             Result(Class, Results.getBasePriority(Class), nullptr), CurContext,
7903             nullptr, false);
7904   }
7905 }
7906 
7907 void Sema::CodeCompleteObjCInterfaceDecl(Scope *S) {
7908   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7909                         CodeCompleter->getCodeCompletionTUInfo(),
7910                         CodeCompletionContext::CCC_ObjCInterfaceName);
7911   Results.EnterNewScope();
7912 
7913   if (CodeCompleter->includeGlobals()) {
7914     // Add all classes.
7915     AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
7916                         false, Results);
7917   }
7918 
7919   Results.ExitScope();
7920 
7921   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7922                             Results.data(), Results.size());
7923 }
7924 
7925 void Sema::CodeCompleteObjCSuperclass(Scope *S, IdentifierInfo *ClassName,
7926                                       SourceLocation ClassNameLoc) {
7927   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7928                         CodeCompleter->getCodeCompletionTUInfo(),
7929                         CodeCompletionContext::CCC_ObjCInterfaceName);
7930   Results.EnterNewScope();
7931 
7932   // Make sure that we ignore the class we're currently defining.
7933   NamedDecl *CurClass =
7934       LookupSingleName(TUScope, ClassName, ClassNameLoc, LookupOrdinaryName);
7935   if (CurClass && isa<ObjCInterfaceDecl>(CurClass))
7936     Results.Ignore(CurClass);
7937 
7938   if (CodeCompleter->includeGlobals()) {
7939     // Add all classes.
7940     AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
7941                         false, Results);
7942   }
7943 
7944   Results.ExitScope();
7945 
7946   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7947                             Results.data(), Results.size());
7948 }
7949 
7950 void Sema::CodeCompleteObjCImplementationDecl(Scope *S) {
7951   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7952                         CodeCompleter->getCodeCompletionTUInfo(),
7953                         CodeCompletionContext::CCC_ObjCImplementation);
7954   Results.EnterNewScope();
7955 
7956   if (CodeCompleter->includeGlobals()) {
7957     // Add all unimplemented classes.
7958     AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
7959                         true, Results);
7960   }
7961 
7962   Results.ExitScope();
7963 
7964   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7965                             Results.data(), Results.size());
7966 }
7967 
7968 void Sema::CodeCompleteObjCInterfaceCategory(Scope *S,
7969                                              IdentifierInfo *ClassName,
7970                                              SourceLocation ClassNameLoc) {
7971   typedef CodeCompletionResult Result;
7972 
7973   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7974                         CodeCompleter->getCodeCompletionTUInfo(),
7975                         CodeCompletionContext::CCC_ObjCCategoryName);
7976 
7977   // Ignore any categories we find that have already been implemented by this
7978   // interface.
7979   llvm::SmallPtrSet<IdentifierInfo *, 16> CategoryNames;
7980   NamedDecl *CurClass =
7981       LookupSingleName(TUScope, ClassName, ClassNameLoc, LookupOrdinaryName);
7982   if (ObjCInterfaceDecl *Class =
7983           dyn_cast_or_null<ObjCInterfaceDecl>(CurClass)) {
7984     for (const auto *Cat : Class->visible_categories())
7985       CategoryNames.insert(Cat->getIdentifier());
7986   }
7987 
7988   // Add all of the categories we know about.
7989   Results.EnterNewScope();
7990   TranslationUnitDecl *TU = Context.getTranslationUnitDecl();
7991   for (const auto *D : TU->decls())
7992     if (const auto *Category = dyn_cast<ObjCCategoryDecl>(D))
7993       if (CategoryNames.insert(Category->getIdentifier()).second)
7994         Results.AddResult(
7995             Result(Category, Results.getBasePriority(Category), nullptr),
7996             CurContext, nullptr, false);
7997   Results.ExitScope();
7998 
7999   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8000                             Results.data(), Results.size());
8001 }
8002 
8003 void Sema::CodeCompleteObjCImplementationCategory(Scope *S,
8004                                                   IdentifierInfo *ClassName,
8005                                                   SourceLocation ClassNameLoc) {
8006   typedef CodeCompletionResult Result;
8007 
8008   // Find the corresponding interface. If we couldn't find the interface, the
8009   // program itself is ill-formed. However, we'll try to be helpful still by
8010   // providing the list of all of the categories we know about.
8011   NamedDecl *CurClass =
8012       LookupSingleName(TUScope, ClassName, ClassNameLoc, LookupOrdinaryName);
8013   ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurClass);
8014   if (!Class)
8015     return CodeCompleteObjCInterfaceCategory(S, ClassName, ClassNameLoc);
8016 
8017   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8018                         CodeCompleter->getCodeCompletionTUInfo(),
8019                         CodeCompletionContext::CCC_ObjCCategoryName);
8020 
8021   // Add all of the categories that have have corresponding interface
8022   // declarations in this class and any of its superclasses, except for
8023   // already-implemented categories in the class itself.
8024   llvm::SmallPtrSet<IdentifierInfo *, 16> CategoryNames;
8025   Results.EnterNewScope();
8026   bool IgnoreImplemented = true;
8027   while (Class) {
8028     for (const auto *Cat : Class->visible_categories()) {
8029       if ((!IgnoreImplemented || !Cat->getImplementation()) &&
8030           CategoryNames.insert(Cat->getIdentifier()).second)
8031         Results.AddResult(Result(Cat, Results.getBasePriority(Cat), nullptr),
8032                           CurContext, nullptr, false);
8033     }
8034 
8035     Class = Class->getSuperClass();
8036     IgnoreImplemented = false;
8037   }
8038   Results.ExitScope();
8039 
8040   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8041                             Results.data(), Results.size());
8042 }
8043 
8044 void Sema::CodeCompleteObjCPropertyDefinition(Scope *S) {
8045   CodeCompletionContext CCContext(CodeCompletionContext::CCC_Other);
8046   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8047                         CodeCompleter->getCodeCompletionTUInfo(), CCContext);
8048 
8049   // Figure out where this @synthesize lives.
8050   ObjCContainerDecl *Container =
8051       dyn_cast_or_null<ObjCContainerDecl>(CurContext);
8052   if (!Container || (!isa<ObjCImplementationDecl>(Container) &&
8053                      !isa<ObjCCategoryImplDecl>(Container)))
8054     return;
8055 
8056   // Ignore any properties that have already been implemented.
8057   Container = getContainerDef(Container);
8058   for (const auto *D : Container->decls())
8059     if (const auto *PropertyImpl = dyn_cast<ObjCPropertyImplDecl>(D))
8060       Results.Ignore(PropertyImpl->getPropertyDecl());
8061 
8062   // Add any properties that we find.
8063   AddedPropertiesSet AddedProperties;
8064   Results.EnterNewScope();
8065   if (ObjCImplementationDecl *ClassImpl =
8066           dyn_cast<ObjCImplementationDecl>(Container))
8067     AddObjCProperties(CCContext, ClassImpl->getClassInterface(), false,
8068                       /*AllowNullaryMethods=*/false, CurContext,
8069                       AddedProperties, Results);
8070   else
8071     AddObjCProperties(CCContext,
8072                       cast<ObjCCategoryImplDecl>(Container)->getCategoryDecl(),
8073                       false, /*AllowNullaryMethods=*/false, CurContext,
8074                       AddedProperties, Results);
8075   Results.ExitScope();
8076 
8077   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8078                             Results.data(), Results.size());
8079 }
8080 
8081 void Sema::CodeCompleteObjCPropertySynthesizeIvar(
8082     Scope *S, IdentifierInfo *PropertyName) {
8083   typedef CodeCompletionResult Result;
8084   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8085                         CodeCompleter->getCodeCompletionTUInfo(),
8086                         CodeCompletionContext::CCC_Other);
8087 
8088   // Figure out where this @synthesize lives.
8089   ObjCContainerDecl *Container =
8090       dyn_cast_or_null<ObjCContainerDecl>(CurContext);
8091   if (!Container || (!isa<ObjCImplementationDecl>(Container) &&
8092                      !isa<ObjCCategoryImplDecl>(Container)))
8093     return;
8094 
8095   // Figure out which interface we're looking into.
8096   ObjCInterfaceDecl *Class = nullptr;
8097   if (ObjCImplementationDecl *ClassImpl =
8098           dyn_cast<ObjCImplementationDecl>(Container))
8099     Class = ClassImpl->getClassInterface();
8100   else
8101     Class = cast<ObjCCategoryImplDecl>(Container)
8102                 ->getCategoryDecl()
8103                 ->getClassInterface();
8104 
8105   // Determine the type of the property we're synthesizing.
8106   QualType PropertyType = Context.getObjCIdType();
8107   if (Class) {
8108     if (ObjCPropertyDecl *Property = Class->FindPropertyDeclaration(
8109             PropertyName, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {
8110       PropertyType =
8111           Property->getType().getNonReferenceType().getUnqualifiedType();
8112 
8113       // Give preference to ivars
8114       Results.setPreferredType(PropertyType);
8115     }
8116   }
8117 
8118   // Add all of the instance variables in this class and its superclasses.
8119   Results.EnterNewScope();
8120   bool SawSimilarlyNamedIvar = false;
8121   std::string NameWithPrefix;
8122   NameWithPrefix += '_';
8123   NameWithPrefix += PropertyName->getName();
8124   std::string NameWithSuffix = PropertyName->getName().str();
8125   NameWithSuffix += '_';
8126   for (; Class; Class = Class->getSuperClass()) {
8127     for (ObjCIvarDecl *Ivar = Class->all_declared_ivar_begin(); Ivar;
8128          Ivar = Ivar->getNextIvar()) {
8129       Results.AddResult(Result(Ivar, Results.getBasePriority(Ivar), nullptr),
8130                         CurContext, nullptr, false);
8131 
8132       // Determine whether we've seen an ivar with a name similar to the
8133       // property.
8134       if ((PropertyName == Ivar->getIdentifier() ||
8135            NameWithPrefix == Ivar->getName() ||
8136            NameWithSuffix == Ivar->getName())) {
8137         SawSimilarlyNamedIvar = true;
8138 
8139         // Reduce the priority of this result by one, to give it a slight
8140         // advantage over other results whose names don't match so closely.
8141         if (Results.size() &&
8142             Results.data()[Results.size() - 1].Kind ==
8143                 CodeCompletionResult::RK_Declaration &&
8144             Results.data()[Results.size() - 1].Declaration == Ivar)
8145           Results.data()[Results.size() - 1].Priority--;
8146       }
8147     }
8148   }
8149 
8150   if (!SawSimilarlyNamedIvar) {
8151     // Create ivar result _propName, that the user can use to synthesize
8152     // an ivar of the appropriate type.
8153     unsigned Priority = CCP_MemberDeclaration + 1;
8154     typedef CodeCompletionResult Result;
8155     CodeCompletionAllocator &Allocator = Results.getAllocator();
8156     CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo(),
8157                                   Priority, CXAvailability_Available);
8158 
8159     PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
8160     Builder.AddResultTypeChunk(
8161         GetCompletionTypeString(PropertyType, Context, Policy, Allocator));
8162     Builder.AddTypedTextChunk(Allocator.CopyString(NameWithPrefix));
8163     Results.AddResult(
8164         Result(Builder.TakeString(), Priority, CXCursor_ObjCIvarDecl));
8165   }
8166 
8167   Results.ExitScope();
8168 
8169   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8170                             Results.data(), Results.size());
8171 }
8172 
8173 // Mapping from selectors to the methods that implement that selector, along
8174 // with the "in original class" flag.
8175 typedef llvm::DenseMap<Selector,
8176                        llvm::PointerIntPair<ObjCMethodDecl *, 1, bool>>
8177     KnownMethodsMap;
8178 
8179 /// Find all of the methods that reside in the given container
8180 /// (and its superclasses, protocols, etc.) that meet the given
8181 /// criteria. Insert those methods into the map of known methods,
8182 /// indexed by selector so they can be easily found.
8183 static void FindImplementableMethods(ASTContext &Context,
8184                                      ObjCContainerDecl *Container,
8185                                      Optional<bool> WantInstanceMethods,
8186                                      QualType ReturnType,
8187                                      KnownMethodsMap &KnownMethods,
8188                                      bool InOriginalClass = true) {
8189   if (ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container)) {
8190     // Make sure we have a definition; that's what we'll walk.
8191     if (!IFace->hasDefinition())
8192       return;
8193 
8194     IFace = IFace->getDefinition();
8195     Container = IFace;
8196 
8197     const ObjCList<ObjCProtocolDecl> &Protocols =
8198         IFace->getReferencedProtocols();
8199     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
8200                                               E = Protocols.end();
8201          I != E; ++I)
8202       FindImplementableMethods(Context, *I, WantInstanceMethods, ReturnType,
8203                                KnownMethods, InOriginalClass);
8204 
8205     // Add methods from any class extensions and categories.
8206     for (auto *Cat : IFace->visible_categories()) {
8207       FindImplementableMethods(Context, Cat, WantInstanceMethods, ReturnType,
8208                                KnownMethods, false);
8209     }
8210 
8211     // Visit the superclass.
8212     if (IFace->getSuperClass())
8213       FindImplementableMethods(Context, IFace->getSuperClass(),
8214                                WantInstanceMethods, ReturnType, KnownMethods,
8215                                false);
8216   }
8217 
8218   if (ObjCCategoryDecl *Category = dyn_cast<ObjCCategoryDecl>(Container)) {
8219     // Recurse into protocols.
8220     const ObjCList<ObjCProtocolDecl> &Protocols =
8221         Category->getReferencedProtocols();
8222     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
8223                                               E = Protocols.end();
8224          I != E; ++I)
8225       FindImplementableMethods(Context, *I, WantInstanceMethods, ReturnType,
8226                                KnownMethods, InOriginalClass);
8227 
8228     // If this category is the original class, jump to the interface.
8229     if (InOriginalClass && Category->getClassInterface())
8230       FindImplementableMethods(Context, Category->getClassInterface(),
8231                                WantInstanceMethods, ReturnType, KnownMethods,
8232                                false);
8233   }
8234 
8235   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
8236     // Make sure we have a definition; that's what we'll walk.
8237     if (!Protocol->hasDefinition())
8238       return;
8239     Protocol = Protocol->getDefinition();
8240     Container = Protocol;
8241 
8242     // Recurse into protocols.
8243     const ObjCList<ObjCProtocolDecl> &Protocols =
8244         Protocol->getReferencedProtocols();
8245     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
8246                                               E = Protocols.end();
8247          I != E; ++I)
8248       FindImplementableMethods(Context, *I, WantInstanceMethods, ReturnType,
8249                                KnownMethods, false);
8250   }
8251 
8252   // Add methods in this container. This operation occurs last because
8253   // we want the methods from this container to override any methods
8254   // we've previously seen with the same selector.
8255   for (auto *M : Container->methods()) {
8256     if (!WantInstanceMethods || M->isInstanceMethod() == *WantInstanceMethods) {
8257       if (!ReturnType.isNull() &&
8258           !Context.hasSameUnqualifiedType(ReturnType, M->getReturnType()))
8259         continue;
8260 
8261       KnownMethods[M->getSelector()] =
8262           KnownMethodsMap::mapped_type(M, InOriginalClass);
8263     }
8264   }
8265 }
8266 
8267 /// Add the parenthesized return or parameter type chunk to a code
8268 /// completion string.
8269 static void AddObjCPassingTypeChunk(QualType Type, unsigned ObjCDeclQuals,
8270                                     ASTContext &Context,
8271                                     const PrintingPolicy &Policy,
8272                                     CodeCompletionBuilder &Builder) {
8273   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8274   std::string Quals = formatObjCParamQualifiers(ObjCDeclQuals, Type);
8275   if (!Quals.empty())
8276     Builder.AddTextChunk(Builder.getAllocator().CopyString(Quals));
8277   Builder.AddTextChunk(
8278       GetCompletionTypeString(Type, Context, Policy, Builder.getAllocator()));
8279   Builder.AddChunk(CodeCompletionString::CK_RightParen);
8280 }
8281 
8282 /// Determine whether the given class is or inherits from a class by
8283 /// the given name.
8284 static bool InheritsFromClassNamed(ObjCInterfaceDecl *Class, StringRef Name) {
8285   if (!Class)
8286     return false;
8287 
8288   if (Class->getIdentifier() && Class->getIdentifier()->getName() == Name)
8289     return true;
8290 
8291   return InheritsFromClassNamed(Class->getSuperClass(), Name);
8292 }
8293 
8294 /// Add code completions for Objective-C Key-Value Coding (KVC) and
8295 /// Key-Value Observing (KVO).
8296 static void AddObjCKeyValueCompletions(ObjCPropertyDecl *Property,
8297                                        bool IsInstanceMethod,
8298                                        QualType ReturnType, ASTContext &Context,
8299                                        VisitedSelectorSet &KnownSelectors,
8300                                        ResultBuilder &Results) {
8301   IdentifierInfo *PropName = Property->getIdentifier();
8302   if (!PropName || PropName->getLength() == 0)
8303     return;
8304 
8305   PrintingPolicy Policy = getCompletionPrintingPolicy(Results.getSema());
8306 
8307   // Builder that will create each code completion.
8308   typedef CodeCompletionResult Result;
8309   CodeCompletionAllocator &Allocator = Results.getAllocator();
8310   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
8311 
8312   // The selector table.
8313   SelectorTable &Selectors = Context.Selectors;
8314 
8315   // The property name, copied into the code completion allocation region
8316   // on demand.
8317   struct KeyHolder {
8318     CodeCompletionAllocator &Allocator;
8319     StringRef Key;
8320     const char *CopiedKey;
8321 
8322     KeyHolder(CodeCompletionAllocator &Allocator, StringRef Key)
8323         : Allocator(Allocator), Key(Key), CopiedKey(nullptr) {}
8324 
8325     operator const char *() {
8326       if (CopiedKey)
8327         return CopiedKey;
8328 
8329       return CopiedKey = Allocator.CopyString(Key);
8330     }
8331   } Key(Allocator, PropName->getName());
8332 
8333   // The uppercased name of the property name.
8334   std::string UpperKey = std::string(PropName->getName());
8335   if (!UpperKey.empty())
8336     UpperKey[0] = toUppercase(UpperKey[0]);
8337 
8338   bool ReturnTypeMatchesProperty =
8339       ReturnType.isNull() ||
8340       Context.hasSameUnqualifiedType(ReturnType.getNonReferenceType(),
8341                                      Property->getType());
8342   bool ReturnTypeMatchesVoid = ReturnType.isNull() || ReturnType->isVoidType();
8343 
8344   // Add the normal accessor -(type)key.
8345   if (IsInstanceMethod &&
8346       KnownSelectors.insert(Selectors.getNullarySelector(PropName)).second &&
8347       ReturnTypeMatchesProperty && !Property->getGetterMethodDecl()) {
8348     if (ReturnType.isNull())
8349       AddObjCPassingTypeChunk(Property->getType(), /*Quals=*/0, Context, Policy,
8350                               Builder);
8351 
8352     Builder.AddTypedTextChunk(Key);
8353     Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
8354                              CXCursor_ObjCInstanceMethodDecl));
8355   }
8356 
8357   // If we have an integral or boolean property (or the user has provided
8358   // an integral or boolean return type), add the accessor -(type)isKey.
8359   if (IsInstanceMethod &&
8360       ((!ReturnType.isNull() &&
8361         (ReturnType->isIntegerType() || ReturnType->isBooleanType())) ||
8362        (ReturnType.isNull() && (Property->getType()->isIntegerType() ||
8363                                 Property->getType()->isBooleanType())))) {
8364     std::string SelectorName = (Twine("is") + UpperKey).str();
8365     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8366     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
8367             .second) {
8368       if (ReturnType.isNull()) {
8369         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8370         Builder.AddTextChunk("BOOL");
8371         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8372       }
8373 
8374       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorId->getName()));
8375       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
8376                                CXCursor_ObjCInstanceMethodDecl));
8377     }
8378   }
8379 
8380   // Add the normal mutator.
8381   if (IsInstanceMethod && ReturnTypeMatchesVoid &&
8382       !Property->getSetterMethodDecl()) {
8383     std::string SelectorName = (Twine("set") + UpperKey).str();
8384     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8385     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8386       if (ReturnType.isNull()) {
8387         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8388         Builder.AddTextChunk("void");
8389         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8390       }
8391 
8392       Builder.AddTypedTextChunk(
8393           Allocator.CopyString(SelectorId->getName() + ":"));
8394       AddObjCPassingTypeChunk(Property->getType(), /*Quals=*/0, Context, Policy,
8395                               Builder);
8396       Builder.AddTextChunk(Key);
8397       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
8398                                CXCursor_ObjCInstanceMethodDecl));
8399     }
8400   }
8401 
8402   // Indexed and unordered accessors
8403   unsigned IndexedGetterPriority = CCP_CodePattern;
8404   unsigned IndexedSetterPriority = CCP_CodePattern;
8405   unsigned UnorderedGetterPriority = CCP_CodePattern;
8406   unsigned UnorderedSetterPriority = CCP_CodePattern;
8407   if (const auto *ObjCPointer =
8408           Property->getType()->getAs<ObjCObjectPointerType>()) {
8409     if (ObjCInterfaceDecl *IFace = ObjCPointer->getInterfaceDecl()) {
8410       // If this interface type is not provably derived from a known
8411       // collection, penalize the corresponding completions.
8412       if (!InheritsFromClassNamed(IFace, "NSMutableArray")) {
8413         IndexedSetterPriority += CCD_ProbablyNotObjCCollection;
8414         if (!InheritsFromClassNamed(IFace, "NSArray"))
8415           IndexedGetterPriority += CCD_ProbablyNotObjCCollection;
8416       }
8417 
8418       if (!InheritsFromClassNamed(IFace, "NSMutableSet")) {
8419         UnorderedSetterPriority += CCD_ProbablyNotObjCCollection;
8420         if (!InheritsFromClassNamed(IFace, "NSSet"))
8421           UnorderedGetterPriority += CCD_ProbablyNotObjCCollection;
8422       }
8423     }
8424   } else {
8425     IndexedGetterPriority += CCD_ProbablyNotObjCCollection;
8426     IndexedSetterPriority += CCD_ProbablyNotObjCCollection;
8427     UnorderedGetterPriority += CCD_ProbablyNotObjCCollection;
8428     UnorderedSetterPriority += CCD_ProbablyNotObjCCollection;
8429   }
8430 
8431   // Add -(NSUInteger)countOf<key>
8432   if (IsInstanceMethod &&
8433       (ReturnType.isNull() || ReturnType->isIntegerType())) {
8434     std::string SelectorName = (Twine("countOf") + UpperKey).str();
8435     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8436     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
8437             .second) {
8438       if (ReturnType.isNull()) {
8439         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8440         Builder.AddTextChunk("NSUInteger");
8441         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8442       }
8443 
8444       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorId->getName()));
8445       Results.AddResult(
8446           Result(Builder.TakeString(),
8447                  std::min(IndexedGetterPriority, UnorderedGetterPriority),
8448                  CXCursor_ObjCInstanceMethodDecl));
8449     }
8450   }
8451 
8452   // Indexed getters
8453   // Add -(id)objectInKeyAtIndex:(NSUInteger)index
8454   if (IsInstanceMethod &&
8455       (ReturnType.isNull() || ReturnType->isObjCObjectPointerType())) {
8456     std::string SelectorName = (Twine("objectIn") + UpperKey + "AtIndex").str();
8457     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8458     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8459       if (ReturnType.isNull()) {
8460         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8461         Builder.AddTextChunk("id");
8462         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8463       }
8464 
8465       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8466       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8467       Builder.AddTextChunk("NSUInteger");
8468       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8469       Builder.AddTextChunk("index");
8470       Results.AddResult(Result(Builder.TakeString(), IndexedGetterPriority,
8471                                CXCursor_ObjCInstanceMethodDecl));
8472     }
8473   }
8474 
8475   // Add -(NSArray *)keyAtIndexes:(NSIndexSet *)indexes
8476   if (IsInstanceMethod &&
8477       (ReturnType.isNull() ||
8478        (ReturnType->isObjCObjectPointerType() &&
8479         ReturnType->castAs<ObjCObjectPointerType>()->getInterfaceDecl() &&
8480         ReturnType->castAs<ObjCObjectPointerType>()
8481                 ->getInterfaceDecl()
8482                 ->getName() == "NSArray"))) {
8483     std::string SelectorName = (Twine(Property->getName()) + "AtIndexes").str();
8484     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8485     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8486       if (ReturnType.isNull()) {
8487         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8488         Builder.AddTextChunk("NSArray *");
8489         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8490       }
8491 
8492       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8493       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8494       Builder.AddTextChunk("NSIndexSet *");
8495       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8496       Builder.AddTextChunk("indexes");
8497       Results.AddResult(Result(Builder.TakeString(), IndexedGetterPriority,
8498                                CXCursor_ObjCInstanceMethodDecl));
8499     }
8500   }
8501 
8502   // Add -(void)getKey:(type **)buffer range:(NSRange)inRange
8503   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8504     std::string SelectorName = (Twine("get") + UpperKey).str();
8505     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get(SelectorName),
8506                                       &Context.Idents.get("range")};
8507 
8508     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
8509       if (ReturnType.isNull()) {
8510         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8511         Builder.AddTextChunk("void");
8512         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8513       }
8514 
8515       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8516       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8517       Builder.AddPlaceholderChunk("object-type");
8518       Builder.AddTextChunk(" **");
8519       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8520       Builder.AddTextChunk("buffer");
8521       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
8522       Builder.AddTypedTextChunk("range:");
8523       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8524       Builder.AddTextChunk("NSRange");
8525       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8526       Builder.AddTextChunk("inRange");
8527       Results.AddResult(Result(Builder.TakeString(), IndexedGetterPriority,
8528                                CXCursor_ObjCInstanceMethodDecl));
8529     }
8530   }
8531 
8532   // Mutable indexed accessors
8533 
8534   // - (void)insertObject:(type *)object inKeyAtIndex:(NSUInteger)index
8535   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8536     std::string SelectorName = (Twine("in") + UpperKey + "AtIndex").str();
8537     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get("insertObject"),
8538                                       &Context.Idents.get(SelectorName)};
8539 
8540     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
8541       if (ReturnType.isNull()) {
8542         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8543         Builder.AddTextChunk("void");
8544         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8545       }
8546 
8547       Builder.AddTypedTextChunk("insertObject:");
8548       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8549       Builder.AddPlaceholderChunk("object-type");
8550       Builder.AddTextChunk(" *");
8551       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8552       Builder.AddTextChunk("object");
8553       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
8554       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8555       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8556       Builder.AddPlaceholderChunk("NSUInteger");
8557       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8558       Builder.AddTextChunk("index");
8559       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
8560                                CXCursor_ObjCInstanceMethodDecl));
8561     }
8562   }
8563 
8564   // - (void)insertKey:(NSArray *)array atIndexes:(NSIndexSet *)indexes
8565   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8566     std::string SelectorName = (Twine("insert") + UpperKey).str();
8567     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get(SelectorName),
8568                                       &Context.Idents.get("atIndexes")};
8569 
8570     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
8571       if (ReturnType.isNull()) {
8572         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8573         Builder.AddTextChunk("void");
8574         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8575       }
8576 
8577       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8578       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8579       Builder.AddTextChunk("NSArray *");
8580       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8581       Builder.AddTextChunk("array");
8582       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
8583       Builder.AddTypedTextChunk("atIndexes:");
8584       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8585       Builder.AddPlaceholderChunk("NSIndexSet *");
8586       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8587       Builder.AddTextChunk("indexes");
8588       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
8589                                CXCursor_ObjCInstanceMethodDecl));
8590     }
8591   }
8592 
8593   // -(void)removeObjectFromKeyAtIndex:(NSUInteger)index
8594   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8595     std::string SelectorName =
8596         (Twine("removeObjectFrom") + UpperKey + "AtIndex").str();
8597     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8598     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8599       if (ReturnType.isNull()) {
8600         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8601         Builder.AddTextChunk("void");
8602         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8603       }
8604 
8605       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8606       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8607       Builder.AddTextChunk("NSUInteger");
8608       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8609       Builder.AddTextChunk("index");
8610       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
8611                                CXCursor_ObjCInstanceMethodDecl));
8612     }
8613   }
8614 
8615   // -(void)removeKeyAtIndexes:(NSIndexSet *)indexes
8616   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8617     std::string SelectorName = (Twine("remove") + UpperKey + "AtIndexes").str();
8618     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8619     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8620       if (ReturnType.isNull()) {
8621         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8622         Builder.AddTextChunk("void");
8623         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8624       }
8625 
8626       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8627       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8628       Builder.AddTextChunk("NSIndexSet *");
8629       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8630       Builder.AddTextChunk("indexes");
8631       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
8632                                CXCursor_ObjCInstanceMethodDecl));
8633     }
8634   }
8635 
8636   // - (void)replaceObjectInKeyAtIndex:(NSUInteger)index withObject:(id)object
8637   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8638     std::string SelectorName =
8639         (Twine("replaceObjectIn") + UpperKey + "AtIndex").str();
8640     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get(SelectorName),
8641                                       &Context.Idents.get("withObject")};
8642 
8643     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
8644       if (ReturnType.isNull()) {
8645         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8646         Builder.AddTextChunk("void");
8647         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8648       }
8649 
8650       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8651       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8652       Builder.AddPlaceholderChunk("NSUInteger");
8653       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8654       Builder.AddTextChunk("index");
8655       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
8656       Builder.AddTypedTextChunk("withObject:");
8657       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8658       Builder.AddTextChunk("id");
8659       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8660       Builder.AddTextChunk("object");
8661       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
8662                                CXCursor_ObjCInstanceMethodDecl));
8663     }
8664   }
8665 
8666   // - (void)replaceKeyAtIndexes:(NSIndexSet *)indexes withKey:(NSArray *)array
8667   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8668     std::string SelectorName1 =
8669         (Twine("replace") + UpperKey + "AtIndexes").str();
8670     std::string SelectorName2 = (Twine("with") + UpperKey).str();
8671     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get(SelectorName1),
8672                                       &Context.Idents.get(SelectorName2)};
8673 
8674     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
8675       if (ReturnType.isNull()) {
8676         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8677         Builder.AddTextChunk("void");
8678         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8679       }
8680 
8681       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName1 + ":"));
8682       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8683       Builder.AddPlaceholderChunk("NSIndexSet *");
8684       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8685       Builder.AddTextChunk("indexes");
8686       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
8687       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName2 + ":"));
8688       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8689       Builder.AddTextChunk("NSArray *");
8690       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8691       Builder.AddTextChunk("array");
8692       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
8693                                CXCursor_ObjCInstanceMethodDecl));
8694     }
8695   }
8696 
8697   // Unordered getters
8698   // - (NSEnumerator *)enumeratorOfKey
8699   if (IsInstanceMethod &&
8700       (ReturnType.isNull() ||
8701        (ReturnType->isObjCObjectPointerType() &&
8702         ReturnType->getAs<ObjCObjectPointerType>()->getInterfaceDecl() &&
8703         ReturnType->getAs<ObjCObjectPointerType>()
8704                 ->getInterfaceDecl()
8705                 ->getName() == "NSEnumerator"))) {
8706     std::string SelectorName = (Twine("enumeratorOf") + UpperKey).str();
8707     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8708     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
8709             .second) {
8710       if (ReturnType.isNull()) {
8711         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8712         Builder.AddTextChunk("NSEnumerator *");
8713         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8714       }
8715 
8716       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName));
8717       Results.AddResult(Result(Builder.TakeString(), UnorderedGetterPriority,
8718                                CXCursor_ObjCInstanceMethodDecl));
8719     }
8720   }
8721 
8722   // - (type *)memberOfKey:(type *)object
8723   if (IsInstanceMethod &&
8724       (ReturnType.isNull() || ReturnType->isObjCObjectPointerType())) {
8725     std::string SelectorName = (Twine("memberOf") + UpperKey).str();
8726     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8727     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8728       if (ReturnType.isNull()) {
8729         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8730         Builder.AddPlaceholderChunk("object-type");
8731         Builder.AddTextChunk(" *");
8732         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8733       }
8734 
8735       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8736       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8737       if (ReturnType.isNull()) {
8738         Builder.AddPlaceholderChunk("object-type");
8739         Builder.AddTextChunk(" *");
8740       } else {
8741         Builder.AddTextChunk(GetCompletionTypeString(
8742             ReturnType, Context, Policy, Builder.getAllocator()));
8743       }
8744       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8745       Builder.AddTextChunk("object");
8746       Results.AddResult(Result(Builder.TakeString(), UnorderedGetterPriority,
8747                                CXCursor_ObjCInstanceMethodDecl));
8748     }
8749   }
8750 
8751   // Mutable unordered accessors
8752   // - (void)addKeyObject:(type *)object
8753   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8754     std::string SelectorName =
8755         (Twine("add") + UpperKey + Twine("Object")).str();
8756     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8757     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8758       if (ReturnType.isNull()) {
8759         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8760         Builder.AddTextChunk("void");
8761         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8762       }
8763 
8764       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8765       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8766       Builder.AddPlaceholderChunk("object-type");
8767       Builder.AddTextChunk(" *");
8768       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8769       Builder.AddTextChunk("object");
8770       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
8771                                CXCursor_ObjCInstanceMethodDecl));
8772     }
8773   }
8774 
8775   // - (void)addKey:(NSSet *)objects
8776   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8777     std::string SelectorName = (Twine("add") + UpperKey).str();
8778     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8779     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8780       if (ReturnType.isNull()) {
8781         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8782         Builder.AddTextChunk("void");
8783         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8784       }
8785 
8786       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8787       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8788       Builder.AddTextChunk("NSSet *");
8789       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8790       Builder.AddTextChunk("objects");
8791       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
8792                                CXCursor_ObjCInstanceMethodDecl));
8793     }
8794   }
8795 
8796   // - (void)removeKeyObject:(type *)object
8797   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8798     std::string SelectorName =
8799         (Twine("remove") + UpperKey + Twine("Object")).str();
8800     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8801     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8802       if (ReturnType.isNull()) {
8803         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8804         Builder.AddTextChunk("void");
8805         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8806       }
8807 
8808       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8809       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8810       Builder.AddPlaceholderChunk("object-type");
8811       Builder.AddTextChunk(" *");
8812       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8813       Builder.AddTextChunk("object");
8814       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
8815                                CXCursor_ObjCInstanceMethodDecl));
8816     }
8817   }
8818 
8819   // - (void)removeKey:(NSSet *)objects
8820   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8821     std::string SelectorName = (Twine("remove") + UpperKey).str();
8822     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8823     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8824       if (ReturnType.isNull()) {
8825         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8826         Builder.AddTextChunk("void");
8827         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8828       }
8829 
8830       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8831       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8832       Builder.AddTextChunk("NSSet *");
8833       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8834       Builder.AddTextChunk("objects");
8835       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
8836                                CXCursor_ObjCInstanceMethodDecl));
8837     }
8838   }
8839 
8840   // - (void)intersectKey:(NSSet *)objects
8841   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8842     std::string SelectorName = (Twine("intersect") + UpperKey).str();
8843     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8844     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8845       if (ReturnType.isNull()) {
8846         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8847         Builder.AddTextChunk("void");
8848         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8849       }
8850 
8851       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8852       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8853       Builder.AddTextChunk("NSSet *");
8854       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8855       Builder.AddTextChunk("objects");
8856       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
8857                                CXCursor_ObjCInstanceMethodDecl));
8858     }
8859   }
8860 
8861   // Key-Value Observing
8862   // + (NSSet *)keyPathsForValuesAffectingKey
8863   if (!IsInstanceMethod &&
8864       (ReturnType.isNull() ||
8865        (ReturnType->isObjCObjectPointerType() &&
8866         ReturnType->castAs<ObjCObjectPointerType>()->getInterfaceDecl() &&
8867         ReturnType->castAs<ObjCObjectPointerType>()
8868                 ->getInterfaceDecl()
8869                 ->getName() == "NSSet"))) {
8870     std::string SelectorName =
8871         (Twine("keyPathsForValuesAffecting") + UpperKey).str();
8872     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8873     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
8874             .second) {
8875       if (ReturnType.isNull()) {
8876         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8877         Builder.AddTextChunk("NSSet<NSString *> *");
8878         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8879       }
8880 
8881       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName));
8882       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
8883                                CXCursor_ObjCClassMethodDecl));
8884     }
8885   }
8886 
8887   // + (BOOL)automaticallyNotifiesObserversForKey
8888   if (!IsInstanceMethod &&
8889       (ReturnType.isNull() || ReturnType->isIntegerType() ||
8890        ReturnType->isBooleanType())) {
8891     std::string SelectorName =
8892         (Twine("automaticallyNotifiesObserversOf") + UpperKey).str();
8893     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8894     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
8895             .second) {
8896       if (ReturnType.isNull()) {
8897         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8898         Builder.AddTextChunk("BOOL");
8899         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8900       }
8901 
8902       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName));
8903       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
8904                                CXCursor_ObjCClassMethodDecl));
8905     }
8906   }
8907 }
8908 
8909 void Sema::CodeCompleteObjCMethodDecl(Scope *S, Optional<bool> IsInstanceMethod,
8910                                       ParsedType ReturnTy) {
8911   // Determine the return type of the method we're declaring, if
8912   // provided.
8913   QualType ReturnType = GetTypeFromParser(ReturnTy);
8914   Decl *IDecl = nullptr;
8915   if (CurContext->isObjCContainer()) {
8916     ObjCContainerDecl *OCD = dyn_cast<ObjCContainerDecl>(CurContext);
8917     IDecl = OCD;
8918   }
8919   // Determine where we should start searching for methods.
8920   ObjCContainerDecl *SearchDecl = nullptr;
8921   bool IsInImplementation = false;
8922   if (Decl *D = IDecl) {
8923     if (ObjCImplementationDecl *Impl = dyn_cast<ObjCImplementationDecl>(D)) {
8924       SearchDecl = Impl->getClassInterface();
8925       IsInImplementation = true;
8926     } else if (ObjCCategoryImplDecl *CatImpl =
8927                    dyn_cast<ObjCCategoryImplDecl>(D)) {
8928       SearchDecl = CatImpl->getCategoryDecl();
8929       IsInImplementation = true;
8930     } else
8931       SearchDecl = dyn_cast<ObjCContainerDecl>(D);
8932   }
8933 
8934   if (!SearchDecl && S) {
8935     if (DeclContext *DC = S->getEntity())
8936       SearchDecl = dyn_cast<ObjCContainerDecl>(DC);
8937   }
8938 
8939   if (!SearchDecl) {
8940     HandleCodeCompleteResults(this, CodeCompleter,
8941                               CodeCompletionContext::CCC_Other, nullptr, 0);
8942     return;
8943   }
8944 
8945   // Find all of the methods that we could declare/implement here.
8946   KnownMethodsMap KnownMethods;
8947   FindImplementableMethods(Context, SearchDecl, IsInstanceMethod, ReturnType,
8948                            KnownMethods);
8949 
8950   // Add declarations or definitions for each of the known methods.
8951   typedef CodeCompletionResult Result;
8952   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8953                         CodeCompleter->getCodeCompletionTUInfo(),
8954                         CodeCompletionContext::CCC_Other);
8955   Results.EnterNewScope();
8956   PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
8957   for (KnownMethodsMap::iterator M = KnownMethods.begin(),
8958                                  MEnd = KnownMethods.end();
8959        M != MEnd; ++M) {
8960     ObjCMethodDecl *Method = M->second.getPointer();
8961     CodeCompletionBuilder Builder(Results.getAllocator(),
8962                                   Results.getCodeCompletionTUInfo());
8963 
8964     // Add the '-'/'+' prefix if it wasn't provided yet.
8965     if (!IsInstanceMethod) {
8966       Builder.AddTextChunk(Method->isInstanceMethod() ? "-" : "+");
8967       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
8968     }
8969 
8970     // If the result type was not already provided, add it to the
8971     // pattern as (type).
8972     if (ReturnType.isNull()) {
8973       QualType ResTy = Method->getSendResultType().stripObjCKindOfType(Context);
8974       AttributedType::stripOuterNullability(ResTy);
8975       AddObjCPassingTypeChunk(ResTy, Method->getObjCDeclQualifier(), Context,
8976                               Policy, Builder);
8977     }
8978 
8979     Selector Sel = Method->getSelector();
8980 
8981     if (Sel.isUnarySelector()) {
8982       // Unary selectors have no arguments.
8983       Builder.AddTypedTextChunk(
8984           Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
8985     } else {
8986       // Add all parameters to the pattern.
8987       unsigned I = 0;
8988       for (ObjCMethodDecl::param_iterator P = Method->param_begin(),
8989                                           PEnd = Method->param_end();
8990            P != PEnd; (void)++P, ++I) {
8991         // Add the part of the selector name.
8992         if (I == 0)
8993           Builder.AddTypedTextChunk(
8994               Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
8995         else if (I < Sel.getNumArgs()) {
8996           Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
8997           Builder.AddTypedTextChunk(
8998               Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
8999         } else
9000           break;
9001 
9002         // Add the parameter type.
9003         QualType ParamType;
9004         if ((*P)->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability)
9005           ParamType = (*P)->getType();
9006         else
9007           ParamType = (*P)->getOriginalType();
9008         ParamType = ParamType.substObjCTypeArgs(
9009             Context, {}, ObjCSubstitutionContext::Parameter);
9010         AttributedType::stripOuterNullability(ParamType);
9011         AddObjCPassingTypeChunk(ParamType, (*P)->getObjCDeclQualifier(),
9012                                 Context, Policy, Builder);
9013 
9014         if (IdentifierInfo *Id = (*P)->getIdentifier())
9015           Builder.AddTextChunk(
9016               Builder.getAllocator().CopyString(Id->getName()));
9017       }
9018     }
9019 
9020     if (Method->isVariadic()) {
9021       if (Method->param_size() > 0)
9022         Builder.AddChunk(CodeCompletionString::CK_Comma);
9023       Builder.AddTextChunk("...");
9024     }
9025 
9026     if (IsInImplementation && Results.includeCodePatterns()) {
9027       // We will be defining the method here, so add a compound statement.
9028       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9029       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
9030       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
9031       if (!Method->getReturnType()->isVoidType()) {
9032         // If the result type is not void, add a return clause.
9033         Builder.AddTextChunk("return");
9034         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9035         Builder.AddPlaceholderChunk("expression");
9036         Builder.AddChunk(CodeCompletionString::CK_SemiColon);
9037       } else
9038         Builder.AddPlaceholderChunk("statements");
9039 
9040       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
9041       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
9042     }
9043 
9044     unsigned Priority = CCP_CodePattern;
9045     auto R = Result(Builder.TakeString(), Method, Priority);
9046     if (!M->second.getInt())
9047       setInBaseClass(R);
9048     Results.AddResult(std::move(R));
9049   }
9050 
9051   // Add Key-Value-Coding and Key-Value-Observing accessor methods for all of
9052   // the properties in this class and its categories.
9053   if (Context.getLangOpts().ObjC) {
9054     SmallVector<ObjCContainerDecl *, 4> Containers;
9055     Containers.push_back(SearchDecl);
9056 
9057     VisitedSelectorSet KnownSelectors;
9058     for (KnownMethodsMap::iterator M = KnownMethods.begin(),
9059                                    MEnd = KnownMethods.end();
9060          M != MEnd; ++M)
9061       KnownSelectors.insert(M->first);
9062 
9063     ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(SearchDecl);
9064     if (!IFace)
9065       if (ObjCCategoryDecl *Category = dyn_cast<ObjCCategoryDecl>(SearchDecl))
9066         IFace = Category->getClassInterface();
9067 
9068     if (IFace)
9069       for (auto *Cat : IFace->visible_categories())
9070         Containers.push_back(Cat);
9071 
9072     if (IsInstanceMethod) {
9073       for (unsigned I = 0, N = Containers.size(); I != N; ++I)
9074         for (auto *P : Containers[I]->instance_properties())
9075           AddObjCKeyValueCompletions(P, *IsInstanceMethod, ReturnType, Context,
9076                                      KnownSelectors, Results);
9077     }
9078   }
9079 
9080   Results.ExitScope();
9081 
9082   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9083                             Results.data(), Results.size());
9084 }
9085 
9086 void Sema::CodeCompleteObjCMethodDeclSelector(
9087     Scope *S, bool IsInstanceMethod, bool AtParameterName, ParsedType ReturnTy,
9088     ArrayRef<IdentifierInfo *> SelIdents) {
9089   // If we have an external source, load the entire class method
9090   // pool from the AST file.
9091   if (ExternalSource) {
9092     for (uint32_t I = 0, N = ExternalSource->GetNumExternalSelectors(); I != N;
9093          ++I) {
9094       Selector Sel = ExternalSource->GetExternalSelector(I);
9095       if (Sel.isNull() || MethodPool.count(Sel))
9096         continue;
9097 
9098       ReadMethodPool(Sel);
9099     }
9100   }
9101 
9102   // Build the set of methods we can see.
9103   typedef CodeCompletionResult Result;
9104   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9105                         CodeCompleter->getCodeCompletionTUInfo(),
9106                         CodeCompletionContext::CCC_Other);
9107 
9108   if (ReturnTy)
9109     Results.setPreferredType(GetTypeFromParser(ReturnTy).getNonReferenceType());
9110 
9111   Results.EnterNewScope();
9112   for (GlobalMethodPool::iterator M = MethodPool.begin(),
9113                                   MEnd = MethodPool.end();
9114        M != MEnd; ++M) {
9115     for (ObjCMethodList *MethList = IsInstanceMethod ? &M->second.first
9116                                                      : &M->second.second;
9117          MethList && MethList->getMethod(); MethList = MethList->getNext()) {
9118       if (!isAcceptableObjCMethod(MethList->getMethod(), MK_Any, SelIdents))
9119         continue;
9120 
9121       if (AtParameterName) {
9122         // Suggest parameter names we've seen before.
9123         unsigned NumSelIdents = SelIdents.size();
9124         if (NumSelIdents &&
9125             NumSelIdents <= MethList->getMethod()->param_size()) {
9126           ParmVarDecl *Param =
9127               MethList->getMethod()->parameters()[NumSelIdents - 1];
9128           if (Param->getIdentifier()) {
9129             CodeCompletionBuilder Builder(Results.getAllocator(),
9130                                           Results.getCodeCompletionTUInfo());
9131             Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
9132                 Param->getIdentifier()->getName()));
9133             Results.AddResult(Builder.TakeString());
9134           }
9135         }
9136 
9137         continue;
9138       }
9139 
9140       Result R(MethList->getMethod(),
9141                Results.getBasePriority(MethList->getMethod()), nullptr);
9142       R.StartParameter = SelIdents.size();
9143       R.AllParametersAreInformative = false;
9144       R.DeclaringEntity = true;
9145       Results.MaybeAddResult(R, CurContext);
9146     }
9147   }
9148 
9149   Results.ExitScope();
9150 
9151   if (!AtParameterName && !SelIdents.empty() &&
9152       SelIdents.front()->getName().startswith("init")) {
9153     for (const auto &M : PP.macros()) {
9154       if (M.first->getName() != "NS_DESIGNATED_INITIALIZER")
9155         continue;
9156       Results.EnterNewScope();
9157       CodeCompletionBuilder Builder(Results.getAllocator(),
9158                                     Results.getCodeCompletionTUInfo());
9159       Builder.AddTypedTextChunk(
9160           Builder.getAllocator().CopyString(M.first->getName()));
9161       Results.AddResult(CodeCompletionResult(Builder.TakeString(), CCP_Macro,
9162                                              CXCursor_MacroDefinition));
9163       Results.ExitScope();
9164     }
9165   }
9166 
9167   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9168                             Results.data(), Results.size());
9169 }
9170 
9171 void Sema::CodeCompletePreprocessorDirective(bool InConditional) {
9172   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9173                         CodeCompleter->getCodeCompletionTUInfo(),
9174                         CodeCompletionContext::CCC_PreprocessorDirective);
9175   Results.EnterNewScope();
9176 
9177   // #if <condition>
9178   CodeCompletionBuilder Builder(Results.getAllocator(),
9179                                 Results.getCodeCompletionTUInfo());
9180   Builder.AddTypedTextChunk("if");
9181   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9182   Builder.AddPlaceholderChunk("condition");
9183   Results.AddResult(Builder.TakeString());
9184 
9185   // #ifdef <macro>
9186   Builder.AddTypedTextChunk("ifdef");
9187   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9188   Builder.AddPlaceholderChunk("macro");
9189   Results.AddResult(Builder.TakeString());
9190 
9191   // #ifndef <macro>
9192   Builder.AddTypedTextChunk("ifndef");
9193   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9194   Builder.AddPlaceholderChunk("macro");
9195   Results.AddResult(Builder.TakeString());
9196 
9197   if (InConditional) {
9198     // #elif <condition>
9199     Builder.AddTypedTextChunk("elif");
9200     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9201     Builder.AddPlaceholderChunk("condition");
9202     Results.AddResult(Builder.TakeString());
9203 
9204     // #elifdef <macro>
9205     Builder.AddTypedTextChunk("elifdef");
9206     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9207     Builder.AddPlaceholderChunk("macro");
9208     Results.AddResult(Builder.TakeString());
9209 
9210     // #elifndef <macro>
9211     Builder.AddTypedTextChunk("elifndef");
9212     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9213     Builder.AddPlaceholderChunk("macro");
9214     Results.AddResult(Builder.TakeString());
9215 
9216     // #else
9217     Builder.AddTypedTextChunk("else");
9218     Results.AddResult(Builder.TakeString());
9219 
9220     // #endif
9221     Builder.AddTypedTextChunk("endif");
9222     Results.AddResult(Builder.TakeString());
9223   }
9224 
9225   // #include "header"
9226   Builder.AddTypedTextChunk("include");
9227   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9228   Builder.AddTextChunk("\"");
9229   Builder.AddPlaceholderChunk("header");
9230   Builder.AddTextChunk("\"");
9231   Results.AddResult(Builder.TakeString());
9232 
9233   // #include <header>
9234   Builder.AddTypedTextChunk("include");
9235   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9236   Builder.AddTextChunk("<");
9237   Builder.AddPlaceholderChunk("header");
9238   Builder.AddTextChunk(">");
9239   Results.AddResult(Builder.TakeString());
9240 
9241   // #define <macro>
9242   Builder.AddTypedTextChunk("define");
9243   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9244   Builder.AddPlaceholderChunk("macro");
9245   Results.AddResult(Builder.TakeString());
9246 
9247   // #define <macro>(<args>)
9248   Builder.AddTypedTextChunk("define");
9249   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9250   Builder.AddPlaceholderChunk("macro");
9251   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9252   Builder.AddPlaceholderChunk("args");
9253   Builder.AddChunk(CodeCompletionString::CK_RightParen);
9254   Results.AddResult(Builder.TakeString());
9255 
9256   // #undef <macro>
9257   Builder.AddTypedTextChunk("undef");
9258   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9259   Builder.AddPlaceholderChunk("macro");
9260   Results.AddResult(Builder.TakeString());
9261 
9262   // #line <number>
9263   Builder.AddTypedTextChunk("line");
9264   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9265   Builder.AddPlaceholderChunk("number");
9266   Results.AddResult(Builder.TakeString());
9267 
9268   // #line <number> "filename"
9269   Builder.AddTypedTextChunk("line");
9270   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9271   Builder.AddPlaceholderChunk("number");
9272   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9273   Builder.AddTextChunk("\"");
9274   Builder.AddPlaceholderChunk("filename");
9275   Builder.AddTextChunk("\"");
9276   Results.AddResult(Builder.TakeString());
9277 
9278   // #error <message>
9279   Builder.AddTypedTextChunk("error");
9280   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9281   Builder.AddPlaceholderChunk("message");
9282   Results.AddResult(Builder.TakeString());
9283 
9284   // #pragma <arguments>
9285   Builder.AddTypedTextChunk("pragma");
9286   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9287   Builder.AddPlaceholderChunk("arguments");
9288   Results.AddResult(Builder.TakeString());
9289 
9290   if (getLangOpts().ObjC) {
9291     // #import "header"
9292     Builder.AddTypedTextChunk("import");
9293     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9294     Builder.AddTextChunk("\"");
9295     Builder.AddPlaceholderChunk("header");
9296     Builder.AddTextChunk("\"");
9297     Results.AddResult(Builder.TakeString());
9298 
9299     // #import <header>
9300     Builder.AddTypedTextChunk("import");
9301     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9302     Builder.AddTextChunk("<");
9303     Builder.AddPlaceholderChunk("header");
9304     Builder.AddTextChunk(">");
9305     Results.AddResult(Builder.TakeString());
9306   }
9307 
9308   // #include_next "header"
9309   Builder.AddTypedTextChunk("include_next");
9310   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9311   Builder.AddTextChunk("\"");
9312   Builder.AddPlaceholderChunk("header");
9313   Builder.AddTextChunk("\"");
9314   Results.AddResult(Builder.TakeString());
9315 
9316   // #include_next <header>
9317   Builder.AddTypedTextChunk("include_next");
9318   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9319   Builder.AddTextChunk("<");
9320   Builder.AddPlaceholderChunk("header");
9321   Builder.AddTextChunk(">");
9322   Results.AddResult(Builder.TakeString());
9323 
9324   // #warning <message>
9325   Builder.AddTypedTextChunk("warning");
9326   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9327   Builder.AddPlaceholderChunk("message");
9328   Results.AddResult(Builder.TakeString());
9329 
9330   // Note: #ident and #sccs are such crazy anachronisms that we don't provide
9331   // completions for them. And __include_macros is a Clang-internal extension
9332   // that we don't want to encourage anyone to use.
9333 
9334   // FIXME: we don't support #assert or #unassert, so don't suggest them.
9335   Results.ExitScope();
9336 
9337   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9338                             Results.data(), Results.size());
9339 }
9340 
9341 void Sema::CodeCompleteInPreprocessorConditionalExclusion(Scope *S) {
9342   CodeCompleteOrdinaryName(S, S->getFnParent() ? Sema::PCC_RecoveryInFunction
9343                                                : Sema::PCC_Namespace);
9344 }
9345 
9346 void Sema::CodeCompletePreprocessorMacroName(bool IsDefinition) {
9347   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9348                         CodeCompleter->getCodeCompletionTUInfo(),
9349                         IsDefinition ? CodeCompletionContext::CCC_MacroName
9350                                      : CodeCompletionContext::CCC_MacroNameUse);
9351   if (!IsDefinition && (!CodeCompleter || CodeCompleter->includeMacros())) {
9352     // Add just the names of macros, not their arguments.
9353     CodeCompletionBuilder Builder(Results.getAllocator(),
9354                                   Results.getCodeCompletionTUInfo());
9355     Results.EnterNewScope();
9356     for (Preprocessor::macro_iterator M = PP.macro_begin(),
9357                                       MEnd = PP.macro_end();
9358          M != MEnd; ++M) {
9359       Builder.AddTypedTextChunk(
9360           Builder.getAllocator().CopyString(M->first->getName()));
9361       Results.AddResult(CodeCompletionResult(
9362           Builder.TakeString(), CCP_CodePattern, CXCursor_MacroDefinition));
9363     }
9364     Results.ExitScope();
9365   } else if (IsDefinition) {
9366     // FIXME: Can we detect when the user just wrote an include guard above?
9367   }
9368 
9369   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9370                             Results.data(), Results.size());
9371 }
9372 
9373 void Sema::CodeCompletePreprocessorExpression() {
9374   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9375                         CodeCompleter->getCodeCompletionTUInfo(),
9376                         CodeCompletionContext::CCC_PreprocessorExpression);
9377 
9378   if (!CodeCompleter || CodeCompleter->includeMacros())
9379     AddMacroResults(PP, Results,
9380                     !CodeCompleter || CodeCompleter->loadExternal(), true);
9381 
9382   // defined (<macro>)
9383   Results.EnterNewScope();
9384   CodeCompletionBuilder Builder(Results.getAllocator(),
9385                                 Results.getCodeCompletionTUInfo());
9386   Builder.AddTypedTextChunk("defined");
9387   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9388   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9389   Builder.AddPlaceholderChunk("macro");
9390   Builder.AddChunk(CodeCompletionString::CK_RightParen);
9391   Results.AddResult(Builder.TakeString());
9392   Results.ExitScope();
9393 
9394   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9395                             Results.data(), Results.size());
9396 }
9397 
9398 void Sema::CodeCompletePreprocessorMacroArgument(Scope *S,
9399                                                  IdentifierInfo *Macro,
9400                                                  MacroInfo *MacroInfo,
9401                                                  unsigned Argument) {
9402   // FIXME: In the future, we could provide "overload" results, much like we
9403   // do for function calls.
9404 
9405   // Now just ignore this. There will be another code-completion callback
9406   // for the expanded tokens.
9407 }
9408 
9409 // This handles completion inside an #include filename, e.g. #include <foo/ba
9410 // We look for the directory "foo" under each directory on the include path,
9411 // list its files, and reassemble the appropriate #include.
9412 void Sema::CodeCompleteIncludedFile(llvm::StringRef Dir, bool Angled) {
9413   // RelDir should use /, but unescaped \ is possible on windows!
9414   // Our completions will normalize to / for simplicity, this case is rare.
9415   std::string RelDir = llvm::sys::path::convert_to_slash(Dir);
9416   // We need the native slashes for the actual file system interactions.
9417   SmallString<128> NativeRelDir = StringRef(RelDir);
9418   llvm::sys::path::native(NativeRelDir);
9419   llvm::vfs::FileSystem &FS =
9420       getSourceManager().getFileManager().getVirtualFileSystem();
9421 
9422   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9423                         CodeCompleter->getCodeCompletionTUInfo(),
9424                         CodeCompletionContext::CCC_IncludedFile);
9425   llvm::DenseSet<StringRef> SeenResults; // To deduplicate results.
9426 
9427   // Helper: adds one file or directory completion result.
9428   auto AddCompletion = [&](StringRef Filename, bool IsDirectory) {
9429     SmallString<64> TypedChunk = Filename;
9430     // Directory completion is up to the slash, e.g. <sys/
9431     TypedChunk.push_back(IsDirectory ? '/' : Angled ? '>' : '"');
9432     auto R = SeenResults.insert(TypedChunk);
9433     if (R.second) { // New completion
9434       const char *InternedTyped = Results.getAllocator().CopyString(TypedChunk);
9435       *R.first = InternedTyped; // Avoid dangling StringRef.
9436       CodeCompletionBuilder Builder(CodeCompleter->getAllocator(),
9437                                     CodeCompleter->getCodeCompletionTUInfo());
9438       Builder.AddTypedTextChunk(InternedTyped);
9439       // The result is a "Pattern", which is pretty opaque.
9440       // We may want to include the real filename to allow smart ranking.
9441       Results.AddResult(CodeCompletionResult(Builder.TakeString()));
9442     }
9443   };
9444 
9445   // Helper: scans IncludeDir for nice files, and adds results for each.
9446   auto AddFilesFromIncludeDir = [&](StringRef IncludeDir,
9447                                     bool IsSystem,
9448                                     DirectoryLookup::LookupType_t LookupType) {
9449     llvm::SmallString<128> Dir = IncludeDir;
9450     if (!NativeRelDir.empty()) {
9451       if (LookupType == DirectoryLookup::LT_Framework) {
9452         // For a framework dir, #include <Foo/Bar/> actually maps to
9453         // a path of Foo.framework/Headers/Bar/.
9454         auto Begin = llvm::sys::path::begin(NativeRelDir);
9455         auto End = llvm::sys::path::end(NativeRelDir);
9456 
9457         llvm::sys::path::append(Dir, *Begin + ".framework", "Headers");
9458         llvm::sys::path::append(Dir, ++Begin, End);
9459       } else {
9460         llvm::sys::path::append(Dir, NativeRelDir);
9461       }
9462     }
9463 
9464     std::error_code EC;
9465     unsigned Count = 0;
9466     for (auto It = FS.dir_begin(Dir, EC);
9467          !EC && It != llvm::vfs::directory_iterator(); It.increment(EC)) {
9468       if (++Count == 2500) // If we happen to hit a huge directory,
9469         break;             // bail out early so we're not too slow.
9470       StringRef Filename = llvm::sys::path::filename(It->path());
9471 
9472       // To know whether a symlink should be treated as file or a directory, we
9473       // have to stat it. This should be cheap enough as there shouldn't be many
9474       // symlinks.
9475       llvm::sys::fs::file_type Type = It->type();
9476       if (Type == llvm::sys::fs::file_type::symlink_file) {
9477         if (auto FileStatus = FS.status(It->path()))
9478           Type = FileStatus->getType();
9479       }
9480       switch (Type) {
9481       case llvm::sys::fs::file_type::directory_file:
9482         // All entries in a framework directory must have a ".framework" suffix,
9483         // but the suffix does not appear in the source code's include/import.
9484         if (LookupType == DirectoryLookup::LT_Framework &&
9485             NativeRelDir.empty() && !Filename.consume_back(".framework"))
9486           break;
9487 
9488         AddCompletion(Filename, /*IsDirectory=*/true);
9489         break;
9490       case llvm::sys::fs::file_type::regular_file:
9491         // Only files that really look like headers. (Except in system dirs).
9492         if (!IsSystem) {
9493           // Header extensions from Types.def, which we can't depend on here.
9494           if (!(Filename.endswith_insensitive(".h") ||
9495                 Filename.endswith_insensitive(".hh") ||
9496                 Filename.endswith_insensitive(".hpp") ||
9497                 Filename.endswith_insensitive(".inc")))
9498             break;
9499         }
9500         AddCompletion(Filename, /*IsDirectory=*/false);
9501         break;
9502       default:
9503         break;
9504       }
9505     }
9506   };
9507 
9508   // Helper: adds results relative to IncludeDir, if possible.
9509   auto AddFilesFromDirLookup = [&](const DirectoryLookup &IncludeDir,
9510                                    bool IsSystem) {
9511     switch (IncludeDir.getLookupType()) {
9512     case DirectoryLookup::LT_HeaderMap:
9513       // header maps are not (currently) enumerable.
9514       break;
9515     case DirectoryLookup::LT_NormalDir:
9516       AddFilesFromIncludeDir(IncludeDir.getDir()->getName(), IsSystem,
9517                              DirectoryLookup::LT_NormalDir);
9518       break;
9519     case DirectoryLookup::LT_Framework:
9520       AddFilesFromIncludeDir(IncludeDir.getFrameworkDir()->getName(), IsSystem,
9521                              DirectoryLookup::LT_Framework);
9522       break;
9523     }
9524   };
9525 
9526   // Finally with all our helpers, we can scan the include path.
9527   // Do this in standard order so deduplication keeps the right file.
9528   // (In case we decide to add more details to the results later).
9529   const auto &S = PP.getHeaderSearchInfo();
9530   using llvm::make_range;
9531   if (!Angled) {
9532     // The current directory is on the include path for "quoted" includes.
9533     auto *CurFile = PP.getCurrentFileLexer()->getFileEntry();
9534     if (CurFile && CurFile->getDir())
9535       AddFilesFromIncludeDir(CurFile->getDir()->getName(), false,
9536                              DirectoryLookup::LT_NormalDir);
9537     for (const auto &D : make_range(S.quoted_dir_begin(), S.quoted_dir_end()))
9538       AddFilesFromDirLookup(D, false);
9539   }
9540   for (const auto &D : make_range(S.angled_dir_begin(), S.angled_dir_end()))
9541     AddFilesFromDirLookup(D, false);
9542   for (const auto &D : make_range(S.system_dir_begin(), S.system_dir_end()))
9543     AddFilesFromDirLookup(D, true);
9544 
9545   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9546                             Results.data(), Results.size());
9547 }
9548 
9549 void Sema::CodeCompleteNaturalLanguage() {
9550   HandleCodeCompleteResults(this, CodeCompleter,
9551                             CodeCompletionContext::CCC_NaturalLanguage, nullptr,
9552                             0);
9553 }
9554 
9555 void Sema::CodeCompleteAvailabilityPlatformName() {
9556   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9557                         CodeCompleter->getCodeCompletionTUInfo(),
9558                         CodeCompletionContext::CCC_Other);
9559   Results.EnterNewScope();
9560   static const char *Platforms[] = {"macOS", "iOS", "watchOS", "tvOS"};
9561   for (const char *Platform : llvm::makeArrayRef(Platforms)) {
9562     Results.AddResult(CodeCompletionResult(Platform));
9563     Results.AddResult(CodeCompletionResult(Results.getAllocator().CopyString(
9564         Twine(Platform) + "ApplicationExtension")));
9565   }
9566   Results.ExitScope();
9567   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9568                             Results.data(), Results.size());
9569 }
9570 
9571 void Sema::GatherGlobalCodeCompletions(
9572     CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo,
9573     SmallVectorImpl<CodeCompletionResult> &Results) {
9574   ResultBuilder Builder(*this, Allocator, CCTUInfo,
9575                         CodeCompletionContext::CCC_Recovery);
9576   if (!CodeCompleter || CodeCompleter->includeGlobals()) {
9577     CodeCompletionDeclConsumer Consumer(Builder,
9578                                         Context.getTranslationUnitDecl());
9579     LookupVisibleDecls(Context.getTranslationUnitDecl(), LookupAnyName,
9580                        Consumer,
9581                        !CodeCompleter || CodeCompleter->loadExternal());
9582   }
9583 
9584   if (!CodeCompleter || CodeCompleter->includeMacros())
9585     AddMacroResults(PP, Builder,
9586                     !CodeCompleter || CodeCompleter->loadExternal(), true);
9587 
9588   Results.clear();
9589   Results.insert(Results.end(), Builder.data(),
9590                  Builder.data() + Builder.size());
9591 }
9592