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/AttributeCommonInfo.h"
27 #include "clang/Basic/CharInfo.h"
28 #include "clang/Basic/OperatorKinds.h"
29 #include "clang/Basic/Specifiers.h"
30 #include "clang/Lex/HeaderSearch.h"
31 #include "clang/Lex/MacroInfo.h"
32 #include "clang/Lex/Preprocessor.h"
33 #include "clang/Sema/CodeCompleteConsumer.h"
34 #include "clang/Sema/DeclSpec.h"
35 #include "clang/Sema/Designator.h"
36 #include "clang/Sema/Lookup.h"
37 #include "clang/Sema/Overload.h"
38 #include "clang/Sema/ParsedAttr.h"
39 #include "clang/Sema/ParsedTemplate.h"
40 #include "clang/Sema/Scope.h"
41 #include "clang/Sema/ScopeInfo.h"
42 #include "clang/Sema/Sema.h"
43 #include "clang/Sema/SemaInternal.h"
44 #include "llvm/ADT/ArrayRef.h"
45 #include "llvm/ADT/DenseSet.h"
46 #include "llvm/ADT/SmallBitVector.h"
47 #include "llvm/ADT/SmallPtrSet.h"
48 #include "llvm/ADT/SmallString.h"
49 #include "llvm/ADT/StringExtras.h"
50 #include "llvm/ADT/StringSwitch.h"
51 #include "llvm/ADT/Twine.h"
52 #include "llvm/ADT/iterator_range.h"
53 #include "llvm/Support/Casting.h"
54 #include "llvm/Support/Path.h"
55 #include "llvm/Support/raw_ostream.h"
56 #include <list>
57 #include <map>
58 #include <string>
59 #include <vector>
60 
61 using namespace clang;
62 using namespace sema;
63 
64 namespace {
65 /// A container of code-completion results.
66 class ResultBuilder {
67 public:
68   /// The type of a name-lookup filter, which can be provided to the
69   /// name-lookup routines to specify which declarations should be included in
70   /// the result set (when it returns true) and which declarations should be
71   /// filtered out (returns false).
72   typedef bool (ResultBuilder::*LookupFilter)(const NamedDecl *) const;
73 
74   typedef CodeCompletionResult Result;
75 
76 private:
77   /// The actual results we have found.
78   std::vector<Result> Results;
79 
80   /// A record of all of the declarations we have found and placed
81   /// into the result set, used to ensure that no declaration ever gets into
82   /// the result set twice.
83   llvm::SmallPtrSet<const Decl *, 16> AllDeclsFound;
84 
85   typedef std::pair<const NamedDecl *, unsigned> DeclIndexPair;
86 
87   /// An entry in the shadow map, which is optimized to store
88   /// a single (declaration, index) mapping (the common case) but
89   /// can also store a list of (declaration, index) mappings.
90   class ShadowMapEntry {
91     typedef SmallVector<DeclIndexPair, 4> DeclIndexPairVector;
92 
93     /// Contains either the solitary NamedDecl * or a vector
94     /// of (declaration, index) pairs.
95     llvm::PointerUnion<const NamedDecl *, DeclIndexPairVector *> DeclOrVector;
96 
97     /// When the entry contains a single declaration, this is
98     /// the index associated with that entry.
99     unsigned SingleDeclIndex;
100 
101   public:
102     ShadowMapEntry() : SingleDeclIndex(0) {}
103     ShadowMapEntry(const ShadowMapEntry &) = delete;
104     ShadowMapEntry(ShadowMapEntry &&Move) { *this = std::move(Move); }
105     ShadowMapEntry &operator=(const ShadowMapEntry &) = delete;
106     ShadowMapEntry &operator=(ShadowMapEntry &&Move) {
107       SingleDeclIndex = Move.SingleDeclIndex;
108       DeclOrVector = Move.DeclOrVector;
109       Move.DeclOrVector = nullptr;
110       return *this;
111     }
112 
113     void Add(const NamedDecl *ND, unsigned Index) {
114       if (DeclOrVector.isNull()) {
115         // 0 - > 1 elements: just set the single element information.
116         DeclOrVector = ND;
117         SingleDeclIndex = Index;
118         return;
119       }
120 
121       if (const NamedDecl *PrevND =
122               DeclOrVector.dyn_cast<const NamedDecl *>()) {
123         // 1 -> 2 elements: create the vector of results and push in the
124         // existing declaration.
125         DeclIndexPairVector *Vec = new DeclIndexPairVector;
126         Vec->push_back(DeclIndexPair(PrevND, SingleDeclIndex));
127         DeclOrVector = Vec;
128       }
129 
130       // Add the new element to the end of the vector.
131       DeclOrVector.get<DeclIndexPairVector *>()->push_back(
132           DeclIndexPair(ND, Index));
133     }
134 
135     ~ShadowMapEntry() {
136       if (DeclIndexPairVector *Vec =
137               DeclOrVector.dyn_cast<DeclIndexPairVector *>()) {
138         delete Vec;
139         DeclOrVector = ((NamedDecl *)nullptr);
140       }
141     }
142 
143     // Iteration.
144     class iterator;
145     iterator begin() const;
146     iterator end() const;
147   };
148 
149   /// A mapping from declaration names to the declarations that have
150   /// this name within a particular scope and their index within the list of
151   /// results.
152   typedef llvm::DenseMap<DeclarationName, ShadowMapEntry> ShadowMap;
153 
154   /// The semantic analysis object for which results are being
155   /// produced.
156   Sema &SemaRef;
157 
158   /// The allocator used to allocate new code-completion strings.
159   CodeCompletionAllocator &Allocator;
160 
161   CodeCompletionTUInfo &CCTUInfo;
162 
163   /// If non-NULL, a filter function used to remove any code-completion
164   /// results that are not desirable.
165   LookupFilter Filter;
166 
167   /// Whether we should allow declarations as
168   /// nested-name-specifiers that would otherwise be filtered out.
169   bool AllowNestedNameSpecifiers;
170 
171   /// If set, the type that we would prefer our resulting value
172   /// declarations to have.
173   ///
174   /// Closely matching the preferred type gives a boost to a result's
175   /// priority.
176   CanQualType PreferredType;
177 
178   /// A list of shadow maps, which is used to model name hiding at
179   /// different levels of, e.g., the inheritance hierarchy.
180   std::list<ShadowMap> ShadowMaps;
181 
182   /// Overloaded C++ member functions found by SemaLookup.
183   /// Used to determine when one overload is dominated by another.
184   llvm::DenseMap<std::pair<DeclContext *, /*Name*/uintptr_t>, ShadowMapEntry>
185       OverloadMap;
186 
187   /// If we're potentially referring to a C++ member function, the set
188   /// of qualifiers applied to the object type.
189   Qualifiers ObjectTypeQualifiers;
190   /// The kind of the object expression, for rvalue/lvalue overloads.
191   ExprValueKind ObjectKind;
192 
193   /// Whether the \p ObjectTypeQualifiers field is active.
194   bool HasObjectTypeQualifiers;
195 
196   /// The selector that we prefer.
197   Selector PreferredSelector;
198 
199   /// The completion context in which we are gathering results.
200   CodeCompletionContext CompletionContext;
201 
202   /// If we are in an instance method definition, the \@implementation
203   /// object.
204   ObjCImplementationDecl *ObjCImplementation;
205 
206   void AdjustResultPriorityForDecl(Result &R);
207 
208   void MaybeAddConstructorResults(Result R);
209 
210 public:
211   explicit ResultBuilder(Sema &SemaRef, CodeCompletionAllocator &Allocator,
212                          CodeCompletionTUInfo &CCTUInfo,
213                          const CodeCompletionContext &CompletionContext,
214                          LookupFilter Filter = nullptr)
215       : SemaRef(SemaRef), Allocator(Allocator), CCTUInfo(CCTUInfo),
216         Filter(Filter), AllowNestedNameSpecifiers(false),
217         HasObjectTypeQualifiers(false), CompletionContext(CompletionContext),
218         ObjCImplementation(nullptr) {
219     // If this is an Objective-C instance method definition, dig out the
220     // corresponding implementation.
221     switch (CompletionContext.getKind()) {
222     case CodeCompletionContext::CCC_Expression:
223     case CodeCompletionContext::CCC_ObjCMessageReceiver:
224     case CodeCompletionContext::CCC_ParenthesizedExpression:
225     case CodeCompletionContext::CCC_Statement:
226     case CodeCompletionContext::CCC_Recovery:
227       if (ObjCMethodDecl *Method = SemaRef.getCurMethodDecl())
228         if (Method->isInstanceMethod())
229           if (ObjCInterfaceDecl *Interface = Method->getClassInterface())
230             ObjCImplementation = Interface->getImplementation();
231       break;
232 
233     default:
234       break;
235     }
236   }
237 
238   /// Determine the priority for a reference to the given declaration.
239   unsigned getBasePriority(const NamedDecl *D);
240 
241   /// Whether we should include code patterns in the completion
242   /// results.
243   bool includeCodePatterns() const {
244     return SemaRef.CodeCompleter &&
245            SemaRef.CodeCompleter->includeCodePatterns();
246   }
247 
248   /// Set the filter used for code-completion results.
249   void setFilter(LookupFilter Filter) { this->Filter = Filter; }
250 
251   Result *data() { return Results.empty() ? nullptr : &Results.front(); }
252   unsigned size() const { return Results.size(); }
253   bool empty() const { return Results.empty(); }
254 
255   /// Specify the preferred type.
256   void setPreferredType(QualType T) {
257     PreferredType = SemaRef.Context.getCanonicalType(T);
258   }
259 
260   /// Set the cv-qualifiers on the object type, for us in filtering
261   /// calls to member functions.
262   ///
263   /// When there are qualifiers in this set, they will be used to filter
264   /// out member functions that aren't available (because there will be a
265   /// cv-qualifier mismatch) or prefer functions with an exact qualifier
266   /// match.
267   void setObjectTypeQualifiers(Qualifiers Quals, ExprValueKind Kind) {
268     ObjectTypeQualifiers = Quals;
269     ObjectKind = Kind;
270     HasObjectTypeQualifiers = true;
271   }
272 
273   /// Set the preferred selector.
274   ///
275   /// When an Objective-C method declaration result is added, and that
276   /// method's selector matches this preferred selector, we give that method
277   /// a slight priority boost.
278   void setPreferredSelector(Selector Sel) { PreferredSelector = Sel; }
279 
280   /// Retrieve the code-completion context for which results are
281   /// being collected.
282   const CodeCompletionContext &getCompletionContext() const {
283     return CompletionContext;
284   }
285 
286   /// Specify whether nested-name-specifiers are allowed.
287   void allowNestedNameSpecifiers(bool Allow = true) {
288     AllowNestedNameSpecifiers = Allow;
289   }
290 
291   /// Return the semantic analysis object for which we are collecting
292   /// code completion results.
293   Sema &getSema() const { return SemaRef; }
294 
295   /// Retrieve the allocator used to allocate code completion strings.
296   CodeCompletionAllocator &getAllocator() const { return Allocator; }
297 
298   CodeCompletionTUInfo &getCodeCompletionTUInfo() const { return CCTUInfo; }
299 
300   /// Determine whether the given declaration is at all interesting
301   /// as a code-completion result.
302   ///
303   /// \param ND the declaration that we are inspecting.
304   ///
305   /// \param AsNestedNameSpecifier will be set true if this declaration is
306   /// only interesting when it is a nested-name-specifier.
307   bool isInterestingDecl(const NamedDecl *ND,
308                          bool &AsNestedNameSpecifier) const;
309 
310   /// Check whether the result is hidden by the Hiding declaration.
311   ///
312   /// \returns true if the result is hidden and cannot be found, false if
313   /// the hidden result could still be found. When false, \p R may be
314   /// modified to describe how the result can be found (e.g., via extra
315   /// qualification).
316   bool CheckHiddenResult(Result &R, DeclContext *CurContext,
317                          const NamedDecl *Hiding);
318 
319   /// Add a new result to this result set (if it isn't already in one
320   /// of the shadow maps), or replace an existing result (for, e.g., a
321   /// redeclaration).
322   ///
323   /// \param R the result to add (if it is unique).
324   ///
325   /// \param CurContext the context in which this result will be named.
326   void MaybeAddResult(Result R, DeclContext *CurContext = nullptr);
327 
328   /// Add a new result to this result set, where we already know
329   /// the hiding declaration (if any).
330   ///
331   /// \param R the result to add (if it is unique).
332   ///
333   /// \param CurContext the context in which this result will be named.
334   ///
335   /// \param Hiding the declaration that hides the result.
336   ///
337   /// \param InBaseClass whether the result was found in a base
338   /// class of the searched context.
339   void AddResult(Result R, DeclContext *CurContext, NamedDecl *Hiding,
340                  bool InBaseClass);
341 
342   /// Add a new non-declaration result to this result set.
343   void AddResult(Result R);
344 
345   /// Enter into a new scope.
346   void EnterNewScope();
347 
348   /// Exit from the current scope.
349   void ExitScope();
350 
351   /// Ignore this declaration, if it is seen again.
352   void Ignore(const Decl *D) { AllDeclsFound.insert(D->getCanonicalDecl()); }
353 
354   /// Add a visited context.
355   void addVisitedContext(DeclContext *Ctx) {
356     CompletionContext.addVisitedContext(Ctx);
357   }
358 
359   /// \name Name lookup predicates
360   ///
361   /// These predicates can be passed to the name lookup functions to filter the
362   /// results of name lookup. All of the predicates have the same type, so that
363   ///
364   //@{
365   bool IsOrdinaryName(const NamedDecl *ND) const;
366   bool IsOrdinaryNonTypeName(const NamedDecl *ND) const;
367   bool IsIntegralConstantValue(const NamedDecl *ND) const;
368   bool IsOrdinaryNonValueName(const NamedDecl *ND) const;
369   bool IsNestedNameSpecifier(const NamedDecl *ND) const;
370   bool IsEnum(const NamedDecl *ND) const;
371   bool IsClassOrStruct(const NamedDecl *ND) const;
372   bool IsUnion(const NamedDecl *ND) const;
373   bool IsNamespace(const NamedDecl *ND) const;
374   bool IsNamespaceOrAlias(const NamedDecl *ND) const;
375   bool IsType(const NamedDecl *ND) const;
376   bool IsMember(const NamedDecl *ND) const;
377   bool IsObjCIvar(const NamedDecl *ND) const;
378   bool IsObjCMessageReceiver(const NamedDecl *ND) const;
379   bool IsObjCMessageReceiverOrLambdaCapture(const NamedDecl *ND) const;
380   bool IsObjCCollection(const NamedDecl *ND) const;
381   bool IsImpossibleToSatisfy(const NamedDecl *ND) const;
382   //@}
383 };
384 } // namespace
385 
386 void PreferredTypeBuilder::enterReturn(Sema &S, SourceLocation Tok) {
387   if (!Enabled)
388     return;
389   if (isa<BlockDecl>(S.CurContext)) {
390     if (sema::BlockScopeInfo *BSI = S.getCurBlock()) {
391       ComputeType = nullptr;
392       Type = BSI->ReturnType;
393       ExpectedLoc = Tok;
394     }
395   } else if (const auto *Function = dyn_cast<FunctionDecl>(S.CurContext)) {
396     ComputeType = nullptr;
397     Type = Function->getReturnType();
398     ExpectedLoc = Tok;
399   } else if (const auto *Method = dyn_cast<ObjCMethodDecl>(S.CurContext)) {
400     ComputeType = nullptr;
401     Type = Method->getReturnType();
402     ExpectedLoc = Tok;
403   }
404 }
405 
406 void PreferredTypeBuilder::enterVariableInit(SourceLocation Tok, Decl *D) {
407   if (!Enabled)
408     return;
409   auto *VD = llvm::dyn_cast_or_null<ValueDecl>(D);
410   ComputeType = nullptr;
411   Type = VD ? VD->getType() : QualType();
412   ExpectedLoc = Tok;
413 }
414 
415 static QualType getDesignatedType(QualType BaseType, const Designation &Desig);
416 
417 void PreferredTypeBuilder::enterDesignatedInitializer(SourceLocation Tok,
418                                                       QualType BaseType,
419                                                       const Designation &D) {
420   if (!Enabled)
421     return;
422   ComputeType = nullptr;
423   Type = getDesignatedType(BaseType, D);
424   ExpectedLoc = Tok;
425 }
426 
427 void PreferredTypeBuilder::enterFunctionArgument(
428     SourceLocation Tok, llvm::function_ref<QualType()> ComputeType) {
429   if (!Enabled)
430     return;
431   this->ComputeType = ComputeType;
432   Type = QualType();
433   ExpectedLoc = Tok;
434 }
435 
436 void PreferredTypeBuilder::enterParenExpr(SourceLocation Tok,
437                                           SourceLocation LParLoc) {
438   if (!Enabled)
439     return;
440   // expected type for parenthesized expression does not change.
441   if (ExpectedLoc == LParLoc)
442     ExpectedLoc = Tok;
443 }
444 
445 static QualType getPreferredTypeOfBinaryRHS(Sema &S, Expr *LHS,
446                                             tok::TokenKind Op) {
447   if (!LHS)
448     return QualType();
449 
450   QualType LHSType = LHS->getType();
451   if (LHSType->isPointerType()) {
452     if (Op == tok::plus || Op == tok::plusequal || Op == tok::minusequal)
453       return S.getASTContext().getPointerDiffType();
454     // Pointer difference is more common than subtracting an int from a pointer.
455     if (Op == tok::minus)
456       return LHSType;
457   }
458 
459   switch (Op) {
460   // No way to infer the type of RHS from LHS.
461   case tok::comma:
462     return QualType();
463   // Prefer the type of the left operand for all of these.
464   // Arithmetic operations.
465   case tok::plus:
466   case tok::plusequal:
467   case tok::minus:
468   case tok::minusequal:
469   case tok::percent:
470   case tok::percentequal:
471   case tok::slash:
472   case tok::slashequal:
473   case tok::star:
474   case tok::starequal:
475   // Assignment.
476   case tok::equal:
477   // Comparison operators.
478   case tok::equalequal:
479   case tok::exclaimequal:
480   case tok::less:
481   case tok::lessequal:
482   case tok::greater:
483   case tok::greaterequal:
484   case tok::spaceship:
485     return LHS->getType();
486   // Binary shifts are often overloaded, so don't try to guess those.
487   case tok::greatergreater:
488   case tok::greatergreaterequal:
489   case tok::lessless:
490   case tok::lesslessequal:
491     if (LHSType->isIntegralOrEnumerationType())
492       return S.getASTContext().IntTy;
493     return QualType();
494   // Logical operators, assume we want bool.
495   case tok::ampamp:
496   case tok::pipepipe:
497   case tok::caretcaret:
498     return S.getASTContext().BoolTy;
499   // Operators often used for bit manipulation are typically used with the type
500   // of the left argument.
501   case tok::pipe:
502   case tok::pipeequal:
503   case tok::caret:
504   case tok::caretequal:
505   case tok::amp:
506   case tok::ampequal:
507     if (LHSType->isIntegralOrEnumerationType())
508       return LHSType;
509     return QualType();
510   // RHS should be a pointer to a member of the 'LHS' type, but we can't give
511   // any particular type here.
512   case tok::periodstar:
513   case tok::arrowstar:
514     return QualType();
515   default:
516     // FIXME(ibiryukov): handle the missing op, re-add the assertion.
517     // assert(false && "unhandled binary op");
518     return QualType();
519   }
520 }
521 
522 /// Get preferred type for an argument of an unary expression. \p ContextType is
523 /// preferred type of the whole unary expression.
524 static QualType getPreferredTypeOfUnaryArg(Sema &S, QualType ContextType,
525                                            tok::TokenKind Op) {
526   switch (Op) {
527   case tok::exclaim:
528     return S.getASTContext().BoolTy;
529   case tok::amp:
530     if (!ContextType.isNull() && ContextType->isPointerType())
531       return ContextType->getPointeeType();
532     return QualType();
533   case tok::star:
534     if (ContextType.isNull())
535       return QualType();
536     return S.getASTContext().getPointerType(ContextType.getNonReferenceType());
537   case tok::plus:
538   case tok::minus:
539   case tok::tilde:
540   case tok::minusminus:
541   case tok::plusplus:
542     if (ContextType.isNull())
543       return S.getASTContext().IntTy;
544     // leave as is, these operators typically return the same type.
545     return ContextType;
546   case tok::kw___real:
547   case tok::kw___imag:
548     return QualType();
549   default:
550     assert(false && "unhandled unary op");
551     return QualType();
552   }
553 }
554 
555 void PreferredTypeBuilder::enterBinary(Sema &S, SourceLocation Tok, Expr *LHS,
556                                        tok::TokenKind Op) {
557   if (!Enabled)
558     return;
559   ComputeType = nullptr;
560   Type = getPreferredTypeOfBinaryRHS(S, LHS, Op);
561   ExpectedLoc = Tok;
562 }
563 
564 void PreferredTypeBuilder::enterMemAccess(Sema &S, SourceLocation Tok,
565                                           Expr *Base) {
566   if (!Enabled || !Base)
567     return;
568   // Do we have expected type for Base?
569   if (ExpectedLoc != Base->getBeginLoc())
570     return;
571   // Keep the expected type, only update the location.
572   ExpectedLoc = Tok;
573 }
574 
575 void PreferredTypeBuilder::enterUnary(Sema &S, SourceLocation Tok,
576                                       tok::TokenKind OpKind,
577                                       SourceLocation OpLoc) {
578   if (!Enabled)
579     return;
580   ComputeType = nullptr;
581   Type = getPreferredTypeOfUnaryArg(S, this->get(OpLoc), OpKind);
582   ExpectedLoc = Tok;
583 }
584 
585 void PreferredTypeBuilder::enterSubscript(Sema &S, SourceLocation Tok,
586                                           Expr *LHS) {
587   if (!Enabled)
588     return;
589   ComputeType = nullptr;
590   Type = S.getASTContext().IntTy;
591   ExpectedLoc = Tok;
592 }
593 
594 void PreferredTypeBuilder::enterTypeCast(SourceLocation Tok,
595                                          QualType CastType) {
596   if (!Enabled)
597     return;
598   ComputeType = nullptr;
599   Type = !CastType.isNull() ? CastType.getCanonicalType() : QualType();
600   ExpectedLoc = Tok;
601 }
602 
603 void PreferredTypeBuilder::enterCondition(Sema &S, SourceLocation Tok) {
604   if (!Enabled)
605     return;
606   ComputeType = nullptr;
607   Type = S.getASTContext().BoolTy;
608   ExpectedLoc = Tok;
609 }
610 
611 class ResultBuilder::ShadowMapEntry::iterator {
612   llvm::PointerUnion<const NamedDecl *, const DeclIndexPair *> DeclOrIterator;
613   unsigned SingleDeclIndex;
614 
615 public:
616   typedef DeclIndexPair value_type;
617   typedef value_type reference;
618   typedef std::ptrdiff_t difference_type;
619   typedef std::input_iterator_tag iterator_category;
620 
621   class pointer {
622     DeclIndexPair Value;
623 
624   public:
625     pointer(const DeclIndexPair &Value) : Value(Value) {}
626 
627     const DeclIndexPair *operator->() const { return &Value; }
628   };
629 
630   iterator() : DeclOrIterator((NamedDecl *)nullptr), SingleDeclIndex(0) {}
631 
632   iterator(const NamedDecl *SingleDecl, unsigned Index)
633       : DeclOrIterator(SingleDecl), SingleDeclIndex(Index) {}
634 
635   iterator(const DeclIndexPair *Iterator)
636       : DeclOrIterator(Iterator), SingleDeclIndex(0) {}
637 
638   iterator &operator++() {
639     if (DeclOrIterator.is<const NamedDecl *>()) {
640       DeclOrIterator = (NamedDecl *)nullptr;
641       SingleDeclIndex = 0;
642       return *this;
643     }
644 
645     const DeclIndexPair *I = DeclOrIterator.get<const DeclIndexPair *>();
646     ++I;
647     DeclOrIterator = I;
648     return *this;
649   }
650 
651   /*iterator operator++(int) {
652     iterator tmp(*this);
653     ++(*this);
654     return tmp;
655   }*/
656 
657   reference operator*() const {
658     if (const NamedDecl *ND = DeclOrIterator.dyn_cast<const NamedDecl *>())
659       return reference(ND, SingleDeclIndex);
660 
661     return *DeclOrIterator.get<const DeclIndexPair *>();
662   }
663 
664   pointer operator->() const { return pointer(**this); }
665 
666   friend bool operator==(const iterator &X, const iterator &Y) {
667     return X.DeclOrIterator.getOpaqueValue() ==
668                Y.DeclOrIterator.getOpaqueValue() &&
669            X.SingleDeclIndex == Y.SingleDeclIndex;
670   }
671 
672   friend bool operator!=(const iterator &X, const iterator &Y) {
673     return !(X == Y);
674   }
675 };
676 
677 ResultBuilder::ShadowMapEntry::iterator
678 ResultBuilder::ShadowMapEntry::begin() const {
679   if (DeclOrVector.isNull())
680     return iterator();
681 
682   if (const NamedDecl *ND = DeclOrVector.dyn_cast<const NamedDecl *>())
683     return iterator(ND, SingleDeclIndex);
684 
685   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->begin());
686 }
687 
688 ResultBuilder::ShadowMapEntry::iterator
689 ResultBuilder::ShadowMapEntry::end() const {
690   if (DeclOrVector.is<const NamedDecl *>() || DeclOrVector.isNull())
691     return iterator();
692 
693   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->end());
694 }
695 
696 /// Compute the qualification required to get from the current context
697 /// (\p CurContext) to the target context (\p TargetContext).
698 ///
699 /// \param Context the AST context in which the qualification will be used.
700 ///
701 /// \param CurContext the context where an entity is being named, which is
702 /// typically based on the current scope.
703 ///
704 /// \param TargetContext the context in which the named entity actually
705 /// resides.
706 ///
707 /// \returns a nested name specifier that refers into the target context, or
708 /// NULL if no qualification is needed.
709 static NestedNameSpecifier *
710 getRequiredQualification(ASTContext &Context, const DeclContext *CurContext,
711                          const DeclContext *TargetContext) {
712   SmallVector<const DeclContext *, 4> TargetParents;
713 
714   for (const DeclContext *CommonAncestor = TargetContext;
715        CommonAncestor && !CommonAncestor->Encloses(CurContext);
716        CommonAncestor = CommonAncestor->getLookupParent()) {
717     if (CommonAncestor->isTransparentContext() ||
718         CommonAncestor->isFunctionOrMethod())
719       continue;
720 
721     TargetParents.push_back(CommonAncestor);
722   }
723 
724   NestedNameSpecifier *Result = nullptr;
725   while (!TargetParents.empty()) {
726     const DeclContext *Parent = TargetParents.pop_back_val();
727 
728     if (const auto *Namespace = dyn_cast<NamespaceDecl>(Parent)) {
729       if (!Namespace->getIdentifier())
730         continue;
731 
732       Result = NestedNameSpecifier::Create(Context, Result, Namespace);
733     } else if (const auto *TD = dyn_cast<TagDecl>(Parent))
734       Result = NestedNameSpecifier::Create(
735           Context, Result, false, Context.getTypeDeclType(TD).getTypePtr());
736   }
737   return Result;
738 }
739 
740 // Some declarations have reserved names that we don't want to ever show.
741 // Filter out names reserved for the implementation if they come from a
742 // system header.
743 static bool shouldIgnoreDueToReservedName(const NamedDecl *ND, Sema &SemaRef) {
744   ReservedIdentifierStatus Status = ND->isReserved(SemaRef.getLangOpts());
745   // Ignore reserved names for compiler provided decls.
746   if (isReservedInAllContexts(Status) && 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 false;
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   Policy.CleanUglifiedParameters = true;
1900   return Policy;
1901 }
1902 
1903 /// Retrieve a printing policy suitable for code completion.
1904 static PrintingPolicy getCompletionPrintingPolicy(Sema &S) {
1905   return getCompletionPrintingPolicy(S.Context, S.PP);
1906 }
1907 
1908 /// Retrieve the string representation of the given type as a string
1909 /// that has the appropriate lifetime for code completion.
1910 ///
1911 /// This routine provides a fast path where we provide constant strings for
1912 /// common type names.
1913 static const char *GetCompletionTypeString(QualType T, ASTContext &Context,
1914                                            const PrintingPolicy &Policy,
1915                                            CodeCompletionAllocator &Allocator) {
1916   if (!T.getLocalQualifiers()) {
1917     // Built-in type names are constant strings.
1918     if (const BuiltinType *BT = dyn_cast<BuiltinType>(T))
1919       return BT->getNameAsCString(Policy);
1920 
1921     // Anonymous tag types are constant strings.
1922     if (const TagType *TagT = dyn_cast<TagType>(T))
1923       if (TagDecl *Tag = TagT->getDecl())
1924         if (!Tag->hasNameForLinkage()) {
1925           switch (Tag->getTagKind()) {
1926           case TTK_Struct:
1927             return "struct <anonymous>";
1928           case TTK_Interface:
1929             return "__interface <anonymous>";
1930           case TTK_Class:
1931             return "class <anonymous>";
1932           case TTK_Union:
1933             return "union <anonymous>";
1934           case TTK_Enum:
1935             return "enum <anonymous>";
1936           }
1937         }
1938   }
1939 
1940   // Slow path: format the type as a string.
1941   std::string Result;
1942   T.getAsStringInternal(Result, Policy);
1943   return Allocator.CopyString(Result);
1944 }
1945 
1946 /// Add a completion for "this", if we're in a member function.
1947 static void addThisCompletion(Sema &S, ResultBuilder &Results) {
1948   QualType ThisTy = S.getCurrentThisType();
1949   if (ThisTy.isNull())
1950     return;
1951 
1952   CodeCompletionAllocator &Allocator = Results.getAllocator();
1953   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
1954   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
1955   Builder.AddResultTypeChunk(
1956       GetCompletionTypeString(ThisTy, S.Context, Policy, Allocator));
1957   Builder.AddTypedTextChunk("this");
1958   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
1959 }
1960 
1961 static void AddStaticAssertResult(CodeCompletionBuilder &Builder,
1962                                   ResultBuilder &Results,
1963                                   const LangOptions &LangOpts) {
1964   if (!LangOpts.CPlusPlus11)
1965     return;
1966 
1967   Builder.AddTypedTextChunk("static_assert");
1968   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1969   Builder.AddPlaceholderChunk("expression");
1970   Builder.AddChunk(CodeCompletionString::CK_Comma);
1971   Builder.AddPlaceholderChunk("message");
1972   Builder.AddChunk(CodeCompletionString::CK_RightParen);
1973   Builder.AddChunk(CodeCompletionString::CK_SemiColon);
1974   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
1975 }
1976 
1977 static void AddOverrideResults(ResultBuilder &Results,
1978                                const CodeCompletionContext &CCContext,
1979                                CodeCompletionBuilder &Builder) {
1980   Sema &S = Results.getSema();
1981   const auto *CR = llvm::dyn_cast<CXXRecordDecl>(S.CurContext);
1982   // If not inside a class/struct/union return empty.
1983   if (!CR)
1984     return;
1985   // First store overrides within current class.
1986   // These are stored by name to make querying fast in the later step.
1987   llvm::StringMap<std::vector<FunctionDecl *>> Overrides;
1988   for (auto *Method : CR->methods()) {
1989     if (!Method->isVirtual() || !Method->getIdentifier())
1990       continue;
1991     Overrides[Method->getName()].push_back(Method);
1992   }
1993 
1994   for (const auto &Base : CR->bases()) {
1995     const auto *BR = Base.getType().getTypePtr()->getAsCXXRecordDecl();
1996     if (!BR)
1997       continue;
1998     for (auto *Method : BR->methods()) {
1999       if (!Method->isVirtual() || !Method->getIdentifier())
2000         continue;
2001       const auto it = Overrides.find(Method->getName());
2002       bool IsOverriden = false;
2003       if (it != Overrides.end()) {
2004         for (auto *MD : it->second) {
2005           // If the method in current body is not an overload of this virtual
2006           // function, then it overrides this one.
2007           if (!S.IsOverload(MD, Method, false)) {
2008             IsOverriden = true;
2009             break;
2010           }
2011         }
2012       }
2013       if (!IsOverriden) {
2014         // Generates a new CodeCompletionResult by taking this function and
2015         // converting it into an override declaration with only one chunk in the
2016         // final CodeCompletionString as a TypedTextChunk.
2017         std::string OverrideSignature;
2018         llvm::raw_string_ostream OS(OverrideSignature);
2019         CodeCompletionResult CCR(Method, 0);
2020         PrintingPolicy Policy =
2021             getCompletionPrintingPolicy(S.getASTContext(), S.getPreprocessor());
2022         auto *CCS = CCR.createCodeCompletionStringForOverride(
2023             S.getPreprocessor(), S.getASTContext(), Builder,
2024             /*IncludeBriefComments=*/false, CCContext, Policy);
2025         Results.AddResult(CodeCompletionResult(CCS, Method, CCP_CodePattern));
2026       }
2027     }
2028   }
2029 }
2030 
2031 /// Add language constructs that show up for "ordinary" names.
2032 static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC, Scope *S,
2033                                    Sema &SemaRef, ResultBuilder &Results) {
2034   CodeCompletionAllocator &Allocator = Results.getAllocator();
2035   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
2036 
2037   typedef CodeCompletionResult Result;
2038   switch (CCC) {
2039   case Sema::PCC_Namespace:
2040     if (SemaRef.getLangOpts().CPlusPlus) {
2041       if (Results.includeCodePatterns()) {
2042         // namespace <identifier> { declarations }
2043         Builder.AddTypedTextChunk("namespace");
2044         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2045         Builder.AddPlaceholderChunk("identifier");
2046         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2047         Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
2048         Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2049         Builder.AddPlaceholderChunk("declarations");
2050         Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
2051         Builder.AddChunk(CodeCompletionString::CK_RightBrace);
2052         Results.AddResult(Result(Builder.TakeString()));
2053       }
2054 
2055       // namespace identifier = identifier ;
2056       Builder.AddTypedTextChunk("namespace");
2057       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2058       Builder.AddPlaceholderChunk("name");
2059       Builder.AddChunk(CodeCompletionString::CK_Equal);
2060       Builder.AddPlaceholderChunk("namespace");
2061       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2062       Results.AddResult(Result(Builder.TakeString()));
2063 
2064       // Using directives
2065       Builder.AddTypedTextChunk("using namespace");
2066       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2067       Builder.AddPlaceholderChunk("identifier");
2068       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2069       Results.AddResult(Result(Builder.TakeString()));
2070 
2071       // asm(string-literal)
2072       Builder.AddTypedTextChunk("asm");
2073       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2074       Builder.AddPlaceholderChunk("string-literal");
2075       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2076       Results.AddResult(Result(Builder.TakeString()));
2077 
2078       if (Results.includeCodePatterns()) {
2079         // Explicit template instantiation
2080         Builder.AddTypedTextChunk("template");
2081         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2082         Builder.AddPlaceholderChunk("declaration");
2083         Results.AddResult(Result(Builder.TakeString()));
2084       } else {
2085         Results.AddResult(Result("template", CodeCompletionResult::RK_Keyword));
2086       }
2087     }
2088 
2089     if (SemaRef.getLangOpts().ObjC)
2090       AddObjCTopLevelResults(Results, true);
2091 
2092     AddTypedefResult(Results);
2093     LLVM_FALLTHROUGH;
2094 
2095   case Sema::PCC_Class:
2096     if (SemaRef.getLangOpts().CPlusPlus) {
2097       // Using declaration
2098       Builder.AddTypedTextChunk("using");
2099       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2100       Builder.AddPlaceholderChunk("qualifier");
2101       Builder.AddTextChunk("::");
2102       Builder.AddPlaceholderChunk("name");
2103       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2104       Results.AddResult(Result(Builder.TakeString()));
2105 
2106       if (SemaRef.getLangOpts().CPlusPlus11)
2107         AddUsingAliasResult(Builder, Results);
2108 
2109       // using typename qualifier::name (only in a dependent context)
2110       if (SemaRef.CurContext->isDependentContext()) {
2111         Builder.AddTypedTextChunk("using typename");
2112         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2113         Builder.AddPlaceholderChunk("qualifier");
2114         Builder.AddTextChunk("::");
2115         Builder.AddPlaceholderChunk("name");
2116         Builder.AddChunk(CodeCompletionString::CK_SemiColon);
2117         Results.AddResult(Result(Builder.TakeString()));
2118       }
2119 
2120       AddStaticAssertResult(Builder, Results, SemaRef.getLangOpts());
2121 
2122       if (CCC == Sema::PCC_Class) {
2123         AddTypedefResult(Results);
2124 
2125         bool IsNotInheritanceScope = !S->isClassInheritanceScope();
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,
2821                         const DeclaratorDecl *Param, bool SuppressName = false,
2822                         bool SuppressBlock = false,
2823                         Optional<ArrayRef<QualType>> ObjCSubsts = None) {
2824   // Params are unavailable in FunctionTypeLoc if the FunctionType is invalid.
2825   // It would be better to pass in the param Type, which is usually available.
2826   // But this case is rare, so just pretend we fell back to int as elsewhere.
2827   if (!Param)
2828     return "int";
2829   Decl::ObjCDeclQualifier ObjCQual = Decl::OBJC_TQ_None;
2830   if (const auto *PVD = dyn_cast<ParmVarDecl>(Param))
2831     ObjCQual = PVD->getObjCDeclQualifier();
2832   bool ObjCMethodParam = isa<ObjCMethodDecl>(Param->getDeclContext());
2833   if (Param->getType()->isDependentType() ||
2834       !Param->getType()->isBlockPointerType()) {
2835     // The argument for a dependent or non-block parameter is a placeholder
2836     // containing that parameter's type.
2837     std::string Result;
2838 
2839     if (Param->getIdentifier() && !ObjCMethodParam && !SuppressName)
2840       Result = std::string(Param->getIdentifier()->deuglifiedName());
2841 
2842     QualType Type = Param->getType();
2843     if (ObjCSubsts)
2844       Type = Type.substObjCTypeArgs(Param->getASTContext(), *ObjCSubsts,
2845                                     ObjCSubstitutionContext::Parameter);
2846     if (ObjCMethodParam) {
2847       Result = "(" + formatObjCParamQualifiers(ObjCQual, Type);
2848       Result += Type.getAsString(Policy) + ")";
2849       if (Param->getIdentifier() && !SuppressName)
2850         Result += Param->getIdentifier()->deuglifiedName();
2851     } else {
2852       Type.getAsStringInternal(Result, Policy);
2853     }
2854     return Result;
2855   }
2856 
2857   // The argument for a block pointer parameter is a block literal with
2858   // the appropriate type.
2859   FunctionTypeLoc Block;
2860   FunctionProtoTypeLoc BlockProto;
2861   findTypeLocationForBlockDecl(Param->getTypeSourceInfo(), Block, BlockProto,
2862                                SuppressBlock);
2863   // Try to retrieve the block type information from the property if this is a
2864   // parameter in a setter.
2865   if (!Block && ObjCMethodParam &&
2866       cast<ObjCMethodDecl>(Param->getDeclContext())->isPropertyAccessor()) {
2867     if (const auto *PD = cast<ObjCMethodDecl>(Param->getDeclContext())
2868                              ->findPropertyDecl(/*CheckOverrides=*/false))
2869       findTypeLocationForBlockDecl(PD->getTypeSourceInfo(), Block, BlockProto,
2870                                    SuppressBlock);
2871   }
2872 
2873   if (!Block) {
2874     // We were unable to find a FunctionProtoTypeLoc with parameter names
2875     // for the block; just use the parameter type as a placeholder.
2876     std::string Result;
2877     if (!ObjCMethodParam && Param->getIdentifier())
2878       Result = std::string(Param->getIdentifier()->deuglifiedName());
2879 
2880     QualType Type = Param->getType().getUnqualifiedType();
2881 
2882     if (ObjCMethodParam) {
2883       Result = Type.getAsString(Policy);
2884       std::string Quals = formatObjCParamQualifiers(ObjCQual, Type);
2885       if (!Quals.empty())
2886         Result = "(" + Quals + " " + Result + ")";
2887       if (Result.back() != ')')
2888         Result += " ";
2889       if (Param->getIdentifier())
2890         Result += Param->getIdentifier()->deuglifiedName();
2891     } else {
2892       Type.getAsStringInternal(Result, Policy);
2893     }
2894 
2895     return Result;
2896   }
2897 
2898   // We have the function prototype behind the block pointer type, as it was
2899   // written in the source.
2900   return formatBlockPlaceholder(Policy, Param, Block, BlockProto,
2901                                 /*SuppressBlockName=*/false, SuppressBlock,
2902                                 ObjCSubsts);
2903 }
2904 
2905 /// Returns a placeholder string that corresponds to an Objective-C block
2906 /// declaration.
2907 ///
2908 /// \param BlockDecl A declaration with an Objective-C block type.
2909 ///
2910 /// \param Block The most relevant type location for that block type.
2911 ///
2912 /// \param SuppressBlockName Determines whether or not the name of the block
2913 /// declaration is included in the resulting string.
2914 static std::string
2915 formatBlockPlaceholder(const PrintingPolicy &Policy, const NamedDecl *BlockDecl,
2916                        FunctionTypeLoc &Block, FunctionProtoTypeLoc &BlockProto,
2917                        bool SuppressBlockName, bool SuppressBlock,
2918                        Optional<ArrayRef<QualType>> ObjCSubsts) {
2919   std::string Result;
2920   QualType ResultType = Block.getTypePtr()->getReturnType();
2921   if (ObjCSubsts)
2922     ResultType =
2923         ResultType.substObjCTypeArgs(BlockDecl->getASTContext(), *ObjCSubsts,
2924                                      ObjCSubstitutionContext::Result);
2925   if (!ResultType->isVoidType() || SuppressBlock)
2926     ResultType.getAsStringInternal(Result, Policy);
2927 
2928   // Format the parameter list.
2929   std::string Params;
2930   if (!BlockProto || Block.getNumParams() == 0) {
2931     if (BlockProto && BlockProto.getTypePtr()->isVariadic())
2932       Params = "(...)";
2933     else
2934       Params = "(void)";
2935   } else {
2936     Params += "(";
2937     for (unsigned I = 0, N = Block.getNumParams(); I != N; ++I) {
2938       if (I)
2939         Params += ", ";
2940       Params += FormatFunctionParameter(Policy, Block.getParam(I),
2941                                         /*SuppressName=*/false,
2942                                         /*SuppressBlock=*/true, ObjCSubsts);
2943 
2944       if (I == N - 1 && BlockProto.getTypePtr()->isVariadic())
2945         Params += ", ...";
2946     }
2947     Params += ")";
2948   }
2949 
2950   if (SuppressBlock) {
2951     // Format as a parameter.
2952     Result = Result + " (^";
2953     if (!SuppressBlockName && BlockDecl->getIdentifier())
2954       Result += BlockDecl->getIdentifier()->getName();
2955     Result += ")";
2956     Result += Params;
2957   } else {
2958     // Format as a block literal argument.
2959     Result = '^' + Result;
2960     Result += Params;
2961 
2962     if (!SuppressBlockName && BlockDecl->getIdentifier())
2963       Result += BlockDecl->getIdentifier()->getName();
2964   }
2965 
2966   return Result;
2967 }
2968 
2969 static std::string GetDefaultValueString(const ParmVarDecl *Param,
2970                                          const SourceManager &SM,
2971                                          const LangOptions &LangOpts) {
2972   const SourceRange SrcRange = Param->getDefaultArgRange();
2973   CharSourceRange CharSrcRange = CharSourceRange::getTokenRange(SrcRange);
2974   bool Invalid = CharSrcRange.isInvalid();
2975   if (Invalid)
2976     return "";
2977   StringRef srcText =
2978       Lexer::getSourceText(CharSrcRange, SM, LangOpts, &Invalid);
2979   if (Invalid)
2980     return "";
2981 
2982   if (srcText.empty() || srcText == "=") {
2983     // Lexer can't determine the value.
2984     // This happens if the code is incorrect (for example class is forward
2985     // declared).
2986     return "";
2987   }
2988   std::string DefValue(srcText.str());
2989   // FIXME: remove this check if the Lexer::getSourceText value is fixed and
2990   // this value always has (or always does not have) '=' in front of it
2991   if (DefValue.at(0) != '=') {
2992     // If we don't have '=' in front of value.
2993     // Lexer returns built-in types values without '=' and user-defined types
2994     // values with it.
2995     return " = " + DefValue;
2996   }
2997   return " " + DefValue;
2998 }
2999 
3000 /// Add function parameter chunks to the given code completion string.
3001 static void AddFunctionParameterChunks(Preprocessor &PP,
3002                                        const PrintingPolicy &Policy,
3003                                        const FunctionDecl *Function,
3004                                        CodeCompletionBuilder &Result,
3005                                        unsigned Start = 0,
3006                                        bool InOptional = false) {
3007   bool FirstParameter = true;
3008 
3009   for (unsigned P = Start, N = Function->getNumParams(); P != N; ++P) {
3010     const ParmVarDecl *Param = Function->getParamDecl(P);
3011 
3012     if (Param->hasDefaultArg() && !InOptional) {
3013       // When we see an optional default argument, put that argument and
3014       // the remaining default arguments into a new, optional string.
3015       CodeCompletionBuilder Opt(Result.getAllocator(),
3016                                 Result.getCodeCompletionTUInfo());
3017       if (!FirstParameter)
3018         Opt.AddChunk(CodeCompletionString::CK_Comma);
3019       AddFunctionParameterChunks(PP, Policy, Function, Opt, P, true);
3020       Result.AddOptionalChunk(Opt.TakeString());
3021       break;
3022     }
3023 
3024     if (FirstParameter)
3025       FirstParameter = false;
3026     else
3027       Result.AddChunk(CodeCompletionString::CK_Comma);
3028 
3029     InOptional = false;
3030 
3031     // Format the placeholder string.
3032     std::string PlaceholderStr = FormatFunctionParameter(Policy, Param);
3033     if (Param->hasDefaultArg())
3034       PlaceholderStr +=
3035           GetDefaultValueString(Param, PP.getSourceManager(), PP.getLangOpts());
3036 
3037     if (Function->isVariadic() && P == N - 1)
3038       PlaceholderStr += ", ...";
3039 
3040     // Add the placeholder string.
3041     Result.AddPlaceholderChunk(
3042         Result.getAllocator().CopyString(PlaceholderStr));
3043   }
3044 
3045   if (const auto *Proto = Function->getType()->getAs<FunctionProtoType>())
3046     if (Proto->isVariadic()) {
3047       if (Proto->getNumParams() == 0)
3048         Result.AddPlaceholderChunk("...");
3049 
3050       MaybeAddSentinel(PP, Function, Result);
3051     }
3052 }
3053 
3054 /// Add template parameter chunks to the given code completion string.
3055 static void AddTemplateParameterChunks(
3056     ASTContext &Context, const PrintingPolicy &Policy,
3057     const TemplateDecl *Template, CodeCompletionBuilder &Result,
3058     unsigned MaxParameters = 0, unsigned Start = 0, bool InDefaultArg = false) {
3059   bool FirstParameter = true;
3060 
3061   // Prefer to take the template parameter names from the first declaration of
3062   // the template.
3063   Template = cast<TemplateDecl>(Template->getCanonicalDecl());
3064 
3065   TemplateParameterList *Params = Template->getTemplateParameters();
3066   TemplateParameterList::iterator PEnd = Params->end();
3067   if (MaxParameters)
3068     PEnd = Params->begin() + MaxParameters;
3069   for (TemplateParameterList::iterator P = Params->begin() + Start; P != PEnd;
3070        ++P) {
3071     bool HasDefaultArg = false;
3072     std::string PlaceholderStr;
3073     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*P)) {
3074       if (TTP->wasDeclaredWithTypename())
3075         PlaceholderStr = "typename";
3076       else if (const auto *TC = TTP->getTypeConstraint()) {
3077         llvm::raw_string_ostream OS(PlaceholderStr);
3078         TC->print(OS, Policy);
3079         OS.flush();
3080       } else
3081         PlaceholderStr = "class";
3082 
3083       if (TTP->getIdentifier()) {
3084         PlaceholderStr += ' ';
3085         PlaceholderStr += TTP->getIdentifier()->deuglifiedName();
3086       }
3087 
3088       HasDefaultArg = TTP->hasDefaultArgument();
3089     } else if (NonTypeTemplateParmDecl *NTTP =
3090                    dyn_cast<NonTypeTemplateParmDecl>(*P)) {
3091       if (NTTP->getIdentifier())
3092         PlaceholderStr = std::string(NTTP->getIdentifier()->deuglifiedName());
3093       NTTP->getType().getAsStringInternal(PlaceholderStr, Policy);
3094       HasDefaultArg = NTTP->hasDefaultArgument();
3095     } else {
3096       assert(isa<TemplateTemplateParmDecl>(*P));
3097       TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(*P);
3098 
3099       // Since putting the template argument list into the placeholder would
3100       // be very, very long, we just use an abbreviation.
3101       PlaceholderStr = "template<...> class";
3102       if (TTP->getIdentifier()) {
3103         PlaceholderStr += ' ';
3104         PlaceholderStr += TTP->getIdentifier()->deuglifiedName();
3105       }
3106 
3107       HasDefaultArg = TTP->hasDefaultArgument();
3108     }
3109 
3110     if (HasDefaultArg && !InDefaultArg) {
3111       // When we see an optional default argument, put that argument and
3112       // the remaining default arguments into a new, optional string.
3113       CodeCompletionBuilder Opt(Result.getAllocator(),
3114                                 Result.getCodeCompletionTUInfo());
3115       if (!FirstParameter)
3116         Opt.AddChunk(CodeCompletionString::CK_Comma);
3117       AddTemplateParameterChunks(Context, Policy, Template, Opt, MaxParameters,
3118                                  P - Params->begin(), true);
3119       Result.AddOptionalChunk(Opt.TakeString());
3120       break;
3121     }
3122 
3123     InDefaultArg = false;
3124 
3125     if (FirstParameter)
3126       FirstParameter = false;
3127     else
3128       Result.AddChunk(CodeCompletionString::CK_Comma);
3129 
3130     // Add the placeholder string.
3131     Result.AddPlaceholderChunk(
3132         Result.getAllocator().CopyString(PlaceholderStr));
3133   }
3134 }
3135 
3136 /// Add a qualifier to the given code-completion string, if the
3137 /// provided nested-name-specifier is non-NULL.
3138 static void AddQualifierToCompletionString(CodeCompletionBuilder &Result,
3139                                            NestedNameSpecifier *Qualifier,
3140                                            bool QualifierIsInformative,
3141                                            ASTContext &Context,
3142                                            const PrintingPolicy &Policy) {
3143   if (!Qualifier)
3144     return;
3145 
3146   std::string PrintedNNS;
3147   {
3148     llvm::raw_string_ostream OS(PrintedNNS);
3149     Qualifier->print(OS, Policy);
3150   }
3151   if (QualifierIsInformative)
3152     Result.AddInformativeChunk(Result.getAllocator().CopyString(PrintedNNS));
3153   else
3154     Result.AddTextChunk(Result.getAllocator().CopyString(PrintedNNS));
3155 }
3156 
3157 static void
3158 AddFunctionTypeQualsToCompletionString(CodeCompletionBuilder &Result,
3159                                        const FunctionDecl *Function) {
3160   const auto *Proto = Function->getType()->getAs<FunctionProtoType>();
3161   if (!Proto || !Proto->getMethodQuals())
3162     return;
3163 
3164   // FIXME: Add ref-qualifier!
3165 
3166   // Handle single qualifiers without copying
3167   if (Proto->getMethodQuals().hasOnlyConst()) {
3168     Result.AddInformativeChunk(" const");
3169     return;
3170   }
3171 
3172   if (Proto->getMethodQuals().hasOnlyVolatile()) {
3173     Result.AddInformativeChunk(" volatile");
3174     return;
3175   }
3176 
3177   if (Proto->getMethodQuals().hasOnlyRestrict()) {
3178     Result.AddInformativeChunk(" restrict");
3179     return;
3180   }
3181 
3182   // Handle multiple qualifiers.
3183   std::string QualsStr;
3184   if (Proto->isConst())
3185     QualsStr += " const";
3186   if (Proto->isVolatile())
3187     QualsStr += " volatile";
3188   if (Proto->isRestrict())
3189     QualsStr += " restrict";
3190   Result.AddInformativeChunk(Result.getAllocator().CopyString(QualsStr));
3191 }
3192 
3193 /// Add the name of the given declaration
3194 static void AddTypedNameChunk(ASTContext &Context, const PrintingPolicy &Policy,
3195                               const NamedDecl *ND,
3196                               CodeCompletionBuilder &Result) {
3197   DeclarationName Name = ND->getDeclName();
3198   if (!Name)
3199     return;
3200 
3201   switch (Name.getNameKind()) {
3202   case DeclarationName::CXXOperatorName: {
3203     const char *OperatorName = nullptr;
3204     switch (Name.getCXXOverloadedOperator()) {
3205     case OO_None:
3206     case OO_Conditional:
3207     case NUM_OVERLOADED_OPERATORS:
3208       OperatorName = "operator";
3209       break;
3210 
3211 #define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly)  \
3212   case OO_##Name:                                                              \
3213     OperatorName = "operator" Spelling;                                        \
3214     break;
3215 #define OVERLOADED_OPERATOR_MULTI(Name, Spelling, Unary, Binary, MemberOnly)
3216 #include "clang/Basic/OperatorKinds.def"
3217 
3218     case OO_New:
3219       OperatorName = "operator new";
3220       break;
3221     case OO_Delete:
3222       OperatorName = "operator delete";
3223       break;
3224     case OO_Array_New:
3225       OperatorName = "operator new[]";
3226       break;
3227     case OO_Array_Delete:
3228       OperatorName = "operator delete[]";
3229       break;
3230     case OO_Call:
3231       OperatorName = "operator()";
3232       break;
3233     case OO_Subscript:
3234       OperatorName = "operator[]";
3235       break;
3236     }
3237     Result.AddTypedTextChunk(OperatorName);
3238     break;
3239   }
3240 
3241   case DeclarationName::Identifier:
3242   case DeclarationName::CXXConversionFunctionName:
3243   case DeclarationName::CXXDestructorName:
3244   case DeclarationName::CXXLiteralOperatorName:
3245     Result.AddTypedTextChunk(
3246         Result.getAllocator().CopyString(ND->getNameAsString()));
3247     break;
3248 
3249   case DeclarationName::CXXDeductionGuideName:
3250   case DeclarationName::CXXUsingDirective:
3251   case DeclarationName::ObjCZeroArgSelector:
3252   case DeclarationName::ObjCOneArgSelector:
3253   case DeclarationName::ObjCMultiArgSelector:
3254     break;
3255 
3256   case DeclarationName::CXXConstructorName: {
3257     CXXRecordDecl *Record = nullptr;
3258     QualType Ty = Name.getCXXNameType();
3259     if (const auto *RecordTy = Ty->getAs<RecordType>())
3260       Record = cast<CXXRecordDecl>(RecordTy->getDecl());
3261     else if (const auto *InjectedTy = Ty->getAs<InjectedClassNameType>())
3262       Record = InjectedTy->getDecl();
3263     else {
3264       Result.AddTypedTextChunk(
3265           Result.getAllocator().CopyString(ND->getNameAsString()));
3266       break;
3267     }
3268 
3269     Result.AddTypedTextChunk(
3270         Result.getAllocator().CopyString(Record->getNameAsString()));
3271     if (ClassTemplateDecl *Template = Record->getDescribedClassTemplate()) {
3272       Result.AddChunk(CodeCompletionString::CK_LeftAngle);
3273       AddTemplateParameterChunks(Context, Policy, Template, Result);
3274       Result.AddChunk(CodeCompletionString::CK_RightAngle);
3275     }
3276     break;
3277   }
3278   }
3279 }
3280 
3281 CodeCompletionString *CodeCompletionResult::CreateCodeCompletionString(
3282     Sema &S, const CodeCompletionContext &CCContext,
3283     CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo,
3284     bool IncludeBriefComments) {
3285   return CreateCodeCompletionString(S.Context, S.PP, CCContext, Allocator,
3286                                     CCTUInfo, IncludeBriefComments);
3287 }
3288 
3289 CodeCompletionString *CodeCompletionResult::CreateCodeCompletionStringForMacro(
3290     Preprocessor &PP, CodeCompletionAllocator &Allocator,
3291     CodeCompletionTUInfo &CCTUInfo) {
3292   assert(Kind == RK_Macro);
3293   CodeCompletionBuilder Result(Allocator, CCTUInfo, Priority, Availability);
3294   const MacroInfo *MI = PP.getMacroInfo(Macro);
3295   Result.AddTypedTextChunk(Result.getAllocator().CopyString(Macro->getName()));
3296 
3297   if (!MI || !MI->isFunctionLike())
3298     return Result.TakeString();
3299 
3300   // Format a function-like macro with placeholders for the arguments.
3301   Result.AddChunk(CodeCompletionString::CK_LeftParen);
3302   MacroInfo::param_iterator A = MI->param_begin(), AEnd = MI->param_end();
3303 
3304   // C99 variadic macros add __VA_ARGS__ at the end. Skip it.
3305   if (MI->isC99Varargs()) {
3306     --AEnd;
3307 
3308     if (A == AEnd) {
3309       Result.AddPlaceholderChunk("...");
3310     }
3311   }
3312 
3313   for (MacroInfo::param_iterator A = MI->param_begin(); A != AEnd; ++A) {
3314     if (A != MI->param_begin())
3315       Result.AddChunk(CodeCompletionString::CK_Comma);
3316 
3317     if (MI->isVariadic() && (A + 1) == AEnd) {
3318       SmallString<32> Arg = (*A)->getName();
3319       if (MI->isC99Varargs())
3320         Arg += ", ...";
3321       else
3322         Arg += "...";
3323       Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Arg));
3324       break;
3325     }
3326 
3327     // Non-variadic macros are simple.
3328     Result.AddPlaceholderChunk(
3329         Result.getAllocator().CopyString((*A)->getName()));
3330   }
3331   Result.AddChunk(CodeCompletionString::CK_RightParen);
3332   return Result.TakeString();
3333 }
3334 
3335 /// If possible, create a new code completion string for the given
3336 /// result.
3337 ///
3338 /// \returns Either a new, heap-allocated code completion string describing
3339 /// how to use this result, or NULL to indicate that the string or name of the
3340 /// result is all that is needed.
3341 CodeCompletionString *CodeCompletionResult::CreateCodeCompletionString(
3342     ASTContext &Ctx, Preprocessor &PP, const CodeCompletionContext &CCContext,
3343     CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo,
3344     bool IncludeBriefComments) {
3345   if (Kind == RK_Macro)
3346     return CreateCodeCompletionStringForMacro(PP, Allocator, CCTUInfo);
3347 
3348   CodeCompletionBuilder Result(Allocator, CCTUInfo, Priority, Availability);
3349 
3350   PrintingPolicy Policy = getCompletionPrintingPolicy(Ctx, PP);
3351   if (Kind == RK_Pattern) {
3352     Pattern->Priority = Priority;
3353     Pattern->Availability = Availability;
3354 
3355     if (Declaration) {
3356       Result.addParentContext(Declaration->getDeclContext());
3357       Pattern->ParentName = Result.getParentName();
3358       if (const RawComment *RC =
3359               getPatternCompletionComment(Ctx, Declaration)) {
3360         Result.addBriefComment(RC->getBriefText(Ctx));
3361         Pattern->BriefComment = Result.getBriefComment();
3362       }
3363     }
3364 
3365     return Pattern;
3366   }
3367 
3368   if (Kind == RK_Keyword) {
3369     Result.AddTypedTextChunk(Keyword);
3370     return Result.TakeString();
3371   }
3372   assert(Kind == RK_Declaration && "Missed a result kind?");
3373   return createCodeCompletionStringForDecl(
3374       PP, Ctx, Result, IncludeBriefComments, CCContext, Policy);
3375 }
3376 
3377 static void printOverrideString(const CodeCompletionString &CCS,
3378                                 std::string &BeforeName,
3379                                 std::string &NameAndSignature) {
3380   bool SeenTypedChunk = false;
3381   for (auto &Chunk : CCS) {
3382     if (Chunk.Kind == CodeCompletionString::CK_Optional) {
3383       assert(SeenTypedChunk && "optional parameter before name");
3384       // Note that we put all chunks inside into NameAndSignature.
3385       printOverrideString(*Chunk.Optional, NameAndSignature, NameAndSignature);
3386       continue;
3387     }
3388     SeenTypedChunk |= Chunk.Kind == CodeCompletionString::CK_TypedText;
3389     if (SeenTypedChunk)
3390       NameAndSignature += Chunk.Text;
3391     else
3392       BeforeName += Chunk.Text;
3393   }
3394 }
3395 
3396 CodeCompletionString *
3397 CodeCompletionResult::createCodeCompletionStringForOverride(
3398     Preprocessor &PP, ASTContext &Ctx, CodeCompletionBuilder &Result,
3399     bool IncludeBriefComments, const CodeCompletionContext &CCContext,
3400     PrintingPolicy &Policy) {
3401   auto *CCS = createCodeCompletionStringForDecl(PP, Ctx, Result,
3402                                                 /*IncludeBriefComments=*/false,
3403                                                 CCContext, Policy);
3404   std::string BeforeName;
3405   std::string NameAndSignature;
3406   // For overrides all chunks go into the result, none are informative.
3407   printOverrideString(*CCS, BeforeName, NameAndSignature);
3408   NameAndSignature += " override";
3409 
3410   Result.AddTextChunk(Result.getAllocator().CopyString(BeforeName));
3411   Result.AddChunk(CodeCompletionString::CK_HorizontalSpace);
3412   Result.AddTypedTextChunk(Result.getAllocator().CopyString(NameAndSignature));
3413   return Result.TakeString();
3414 }
3415 
3416 // FIXME: Right now this works well with lambdas. Add support for other functor
3417 // types like std::function.
3418 static const NamedDecl *extractFunctorCallOperator(const NamedDecl *ND) {
3419   const auto *VD = dyn_cast<VarDecl>(ND);
3420   if (!VD)
3421     return nullptr;
3422   const auto *RecordDecl = VD->getType()->getAsCXXRecordDecl();
3423   if (!RecordDecl || !RecordDecl->isLambda())
3424     return nullptr;
3425   return RecordDecl->getLambdaCallOperator();
3426 }
3427 
3428 CodeCompletionString *CodeCompletionResult::createCodeCompletionStringForDecl(
3429     Preprocessor &PP, ASTContext &Ctx, CodeCompletionBuilder &Result,
3430     bool IncludeBriefComments, const CodeCompletionContext &CCContext,
3431     PrintingPolicy &Policy) {
3432   const NamedDecl *ND = Declaration;
3433   Result.addParentContext(ND->getDeclContext());
3434 
3435   if (IncludeBriefComments) {
3436     // Add documentation comment, if it exists.
3437     if (const RawComment *RC = getCompletionComment(Ctx, Declaration)) {
3438       Result.addBriefComment(RC->getBriefText(Ctx));
3439     }
3440   }
3441 
3442   if (StartsNestedNameSpecifier) {
3443     Result.AddTypedTextChunk(
3444         Result.getAllocator().CopyString(ND->getNameAsString()));
3445     Result.AddTextChunk("::");
3446     return Result.TakeString();
3447   }
3448 
3449   for (const auto *I : ND->specific_attrs<AnnotateAttr>())
3450     Result.AddAnnotation(Result.getAllocator().CopyString(I->getAnnotation()));
3451 
3452   auto AddFunctionTypeAndResult = [&](const FunctionDecl *Function) {
3453     AddResultTypeChunk(Ctx, Policy, Function, CCContext.getBaseType(), Result);
3454     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
3455                                    Ctx, Policy);
3456     AddTypedNameChunk(Ctx, Policy, ND, Result);
3457     Result.AddChunk(CodeCompletionString::CK_LeftParen);
3458     AddFunctionParameterChunks(PP, Policy, Function, Result);
3459     Result.AddChunk(CodeCompletionString::CK_RightParen);
3460     AddFunctionTypeQualsToCompletionString(Result, Function);
3461   };
3462 
3463   if (const auto *Function = dyn_cast<FunctionDecl>(ND)) {
3464     AddFunctionTypeAndResult(Function);
3465     return Result.TakeString();
3466   }
3467 
3468   if (const auto *CallOperator =
3469           dyn_cast_or_null<FunctionDecl>(extractFunctorCallOperator(ND))) {
3470     AddFunctionTypeAndResult(CallOperator);
3471     return Result.TakeString();
3472   }
3473 
3474   AddResultTypeChunk(Ctx, Policy, ND, CCContext.getBaseType(), Result);
3475 
3476   if (const FunctionTemplateDecl *FunTmpl =
3477           dyn_cast<FunctionTemplateDecl>(ND)) {
3478     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
3479                                    Ctx, Policy);
3480     FunctionDecl *Function = FunTmpl->getTemplatedDecl();
3481     AddTypedNameChunk(Ctx, Policy, Function, Result);
3482 
3483     // Figure out which template parameters are deduced (or have default
3484     // arguments).
3485     llvm::SmallBitVector Deduced;
3486     Sema::MarkDeducedTemplateParameters(Ctx, FunTmpl, Deduced);
3487     unsigned LastDeducibleArgument;
3488     for (LastDeducibleArgument = Deduced.size(); LastDeducibleArgument > 0;
3489          --LastDeducibleArgument) {
3490       if (!Deduced[LastDeducibleArgument - 1]) {
3491         // C++0x: Figure out if the template argument has a default. If so,
3492         // the user doesn't need to type this argument.
3493         // FIXME: We need to abstract template parameters better!
3494         bool HasDefaultArg = false;
3495         NamedDecl *Param = FunTmpl->getTemplateParameters()->getParam(
3496             LastDeducibleArgument - 1);
3497         if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param))
3498           HasDefaultArg = TTP->hasDefaultArgument();
3499         else if (NonTypeTemplateParmDecl *NTTP =
3500                      dyn_cast<NonTypeTemplateParmDecl>(Param))
3501           HasDefaultArg = NTTP->hasDefaultArgument();
3502         else {
3503           assert(isa<TemplateTemplateParmDecl>(Param));
3504           HasDefaultArg =
3505               cast<TemplateTemplateParmDecl>(Param)->hasDefaultArgument();
3506         }
3507 
3508         if (!HasDefaultArg)
3509           break;
3510       }
3511     }
3512 
3513     if (LastDeducibleArgument) {
3514       // Some of the function template arguments cannot be deduced from a
3515       // function call, so we introduce an explicit template argument list
3516       // containing all of the arguments up to the first deducible argument.
3517       Result.AddChunk(CodeCompletionString::CK_LeftAngle);
3518       AddTemplateParameterChunks(Ctx, Policy, FunTmpl, Result,
3519                                  LastDeducibleArgument);
3520       Result.AddChunk(CodeCompletionString::CK_RightAngle);
3521     }
3522 
3523     // Add the function parameters
3524     Result.AddChunk(CodeCompletionString::CK_LeftParen);
3525     AddFunctionParameterChunks(PP, Policy, Function, Result);
3526     Result.AddChunk(CodeCompletionString::CK_RightParen);
3527     AddFunctionTypeQualsToCompletionString(Result, Function);
3528     return Result.TakeString();
3529   }
3530 
3531   if (const auto *Template = dyn_cast<TemplateDecl>(ND)) {
3532     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
3533                                    Ctx, Policy);
3534     Result.AddTypedTextChunk(
3535         Result.getAllocator().CopyString(Template->getNameAsString()));
3536     Result.AddChunk(CodeCompletionString::CK_LeftAngle);
3537     AddTemplateParameterChunks(Ctx, Policy, Template, Result);
3538     Result.AddChunk(CodeCompletionString::CK_RightAngle);
3539     return Result.TakeString();
3540   }
3541 
3542   if (const auto *Method = dyn_cast<ObjCMethodDecl>(ND)) {
3543     Selector Sel = Method->getSelector();
3544     if (Sel.isUnarySelector()) {
3545       Result.AddTypedTextChunk(
3546           Result.getAllocator().CopyString(Sel.getNameForSlot(0)));
3547       return Result.TakeString();
3548     }
3549 
3550     std::string SelName = Sel.getNameForSlot(0).str();
3551     SelName += ':';
3552     if (StartParameter == 0)
3553       Result.AddTypedTextChunk(Result.getAllocator().CopyString(SelName));
3554     else {
3555       Result.AddInformativeChunk(Result.getAllocator().CopyString(SelName));
3556 
3557       // If there is only one parameter, and we're past it, add an empty
3558       // typed-text chunk since there is nothing to type.
3559       if (Method->param_size() == 1)
3560         Result.AddTypedTextChunk("");
3561     }
3562     unsigned Idx = 0;
3563     // The extra Idx < Sel.getNumArgs() check is needed due to legacy C-style
3564     // method parameters.
3565     for (ObjCMethodDecl::param_const_iterator P = Method->param_begin(),
3566                                               PEnd = Method->param_end();
3567          P != PEnd && Idx < Sel.getNumArgs(); (void)++P, ++Idx) {
3568       if (Idx > 0) {
3569         std::string Keyword;
3570         if (Idx > StartParameter)
3571           Result.AddChunk(CodeCompletionString::CK_HorizontalSpace);
3572         if (IdentifierInfo *II = Sel.getIdentifierInfoForSlot(Idx))
3573           Keyword += II->getName();
3574         Keyword += ":";
3575         if (Idx < StartParameter || AllParametersAreInformative)
3576           Result.AddInformativeChunk(Result.getAllocator().CopyString(Keyword));
3577         else
3578           Result.AddTypedTextChunk(Result.getAllocator().CopyString(Keyword));
3579       }
3580 
3581       // If we're before the starting parameter, skip the placeholder.
3582       if (Idx < StartParameter)
3583         continue;
3584 
3585       std::string Arg;
3586       QualType ParamType = (*P)->getType();
3587       Optional<ArrayRef<QualType>> ObjCSubsts;
3588       if (!CCContext.getBaseType().isNull())
3589         ObjCSubsts = CCContext.getBaseType()->getObjCSubstitutions(Method);
3590 
3591       if (ParamType->isBlockPointerType() && !DeclaringEntity)
3592         Arg = FormatFunctionParameter(Policy, *P, true,
3593                                       /*SuppressBlock=*/false, ObjCSubsts);
3594       else {
3595         if (ObjCSubsts)
3596           ParamType = ParamType.substObjCTypeArgs(
3597               Ctx, *ObjCSubsts, ObjCSubstitutionContext::Parameter);
3598         Arg = "(" + formatObjCParamQualifiers((*P)->getObjCDeclQualifier(),
3599                                               ParamType);
3600         Arg += ParamType.getAsString(Policy) + ")";
3601         if (IdentifierInfo *II = (*P)->getIdentifier())
3602           if (DeclaringEntity || AllParametersAreInformative)
3603             Arg += II->getName();
3604       }
3605 
3606       if (Method->isVariadic() && (P + 1) == PEnd)
3607         Arg += ", ...";
3608 
3609       if (DeclaringEntity)
3610         Result.AddTextChunk(Result.getAllocator().CopyString(Arg));
3611       else if (AllParametersAreInformative)
3612         Result.AddInformativeChunk(Result.getAllocator().CopyString(Arg));
3613       else
3614         Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Arg));
3615     }
3616 
3617     if (Method->isVariadic()) {
3618       if (Method->param_size() == 0) {
3619         if (DeclaringEntity)
3620           Result.AddTextChunk(", ...");
3621         else if (AllParametersAreInformative)
3622           Result.AddInformativeChunk(", ...");
3623         else
3624           Result.AddPlaceholderChunk(", ...");
3625       }
3626 
3627       MaybeAddSentinel(PP, Method, Result);
3628     }
3629 
3630     return Result.TakeString();
3631   }
3632 
3633   if (Qualifier)
3634     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
3635                                    Ctx, Policy);
3636 
3637   Result.AddTypedTextChunk(
3638       Result.getAllocator().CopyString(ND->getNameAsString()));
3639   return Result.TakeString();
3640 }
3641 
3642 const RawComment *clang::getCompletionComment(const ASTContext &Ctx,
3643                                               const NamedDecl *ND) {
3644   if (!ND)
3645     return nullptr;
3646   if (auto *RC = Ctx.getRawCommentForAnyRedecl(ND))
3647     return RC;
3648 
3649   // Try to find comment from a property for ObjC methods.
3650   const auto *M = dyn_cast<ObjCMethodDecl>(ND);
3651   if (!M)
3652     return nullptr;
3653   const ObjCPropertyDecl *PDecl = M->findPropertyDecl();
3654   if (!PDecl)
3655     return nullptr;
3656 
3657   return Ctx.getRawCommentForAnyRedecl(PDecl);
3658 }
3659 
3660 const RawComment *clang::getPatternCompletionComment(const ASTContext &Ctx,
3661                                                      const NamedDecl *ND) {
3662   const auto *M = dyn_cast_or_null<ObjCMethodDecl>(ND);
3663   if (!M || !M->isPropertyAccessor())
3664     return nullptr;
3665 
3666   // Provide code completion comment for self.GetterName where
3667   // GetterName is the getter method for a property with name
3668   // different from the property name (declared via a property
3669   // getter attribute.
3670   const ObjCPropertyDecl *PDecl = M->findPropertyDecl();
3671   if (!PDecl)
3672     return nullptr;
3673   if (PDecl->getGetterName() == M->getSelector() &&
3674       PDecl->getIdentifier() != M->getIdentifier()) {
3675     if (auto *RC = Ctx.getRawCommentForAnyRedecl(M))
3676       return RC;
3677     if (auto *RC = Ctx.getRawCommentForAnyRedecl(PDecl))
3678       return RC;
3679   }
3680   return nullptr;
3681 }
3682 
3683 const RawComment *clang::getParameterComment(
3684     const ASTContext &Ctx,
3685     const CodeCompleteConsumer::OverloadCandidate &Result, unsigned ArgIndex) {
3686   auto FDecl = Result.getFunction();
3687   if (!FDecl)
3688     return nullptr;
3689   if (ArgIndex < FDecl->getNumParams())
3690     return Ctx.getRawCommentForAnyRedecl(FDecl->getParamDecl(ArgIndex));
3691   return nullptr;
3692 }
3693 
3694 static void AddOverloadAggregateChunks(const RecordDecl *RD,
3695                                        const PrintingPolicy &Policy,
3696                                        CodeCompletionBuilder &Result,
3697                                        unsigned CurrentArg) {
3698   unsigned ChunkIndex = 0;
3699   auto AddChunk = [&](llvm::StringRef Placeholder) {
3700     if (ChunkIndex > 0)
3701       Result.AddChunk(CodeCompletionString::CK_Comma);
3702     const char *Copy = Result.getAllocator().CopyString(Placeholder);
3703     if (ChunkIndex == CurrentArg)
3704       Result.AddCurrentParameterChunk(Copy);
3705     else
3706       Result.AddPlaceholderChunk(Copy);
3707     ++ChunkIndex;
3708   };
3709   // Aggregate initialization has all bases followed by all fields.
3710   // (Bases are not legal in C++11 but in that case we never get here).
3711   if (auto *CRD = llvm::dyn_cast<CXXRecordDecl>(RD)) {
3712     for (const auto &Base : CRD->bases())
3713       AddChunk(Base.getType().getAsString(Policy));
3714   }
3715   for (const auto &Field : RD->fields())
3716     AddChunk(FormatFunctionParameter(Policy, Field));
3717 }
3718 
3719 /// Add function overload parameter chunks to the given code completion
3720 /// string.
3721 static void AddOverloadParameterChunks(ASTContext &Context,
3722                                        const PrintingPolicy &Policy,
3723                                        const FunctionDecl *Function,
3724                                        const FunctionProtoType *Prototype,
3725                                        CodeCompletionBuilder &Result,
3726                                        unsigned CurrentArg, unsigned Start = 0,
3727                                        bool InOptional = false) {
3728   if (!Function && !Prototype) {
3729     Result.AddChunk(CodeCompletionString::CK_CurrentParameter, "...");
3730     return;
3731   }
3732 
3733   bool FirstParameter = true;
3734   unsigned NumParams =
3735       Function ? Function->getNumParams() : Prototype->getNumParams();
3736 
3737   for (unsigned P = Start; P != NumParams; ++P) {
3738     if (Function && Function->getParamDecl(P)->hasDefaultArg() && !InOptional) {
3739       // When we see an optional default argument, put that argument and
3740       // the remaining default arguments into a new, optional string.
3741       CodeCompletionBuilder Opt(Result.getAllocator(),
3742                                 Result.getCodeCompletionTUInfo());
3743       if (!FirstParameter)
3744         Opt.AddChunk(CodeCompletionString::CK_Comma);
3745       // Optional sections are nested.
3746       AddOverloadParameterChunks(Context, Policy, Function, Prototype, Opt,
3747                                  CurrentArg, P, /*InOptional=*/true);
3748       Result.AddOptionalChunk(Opt.TakeString());
3749       return;
3750     }
3751 
3752     if (FirstParameter)
3753       FirstParameter = false;
3754     else
3755       Result.AddChunk(CodeCompletionString::CK_Comma);
3756 
3757     InOptional = false;
3758 
3759     // Format the placeholder string.
3760     std::string Placeholder;
3761     if (Function) {
3762       const ParmVarDecl *Param = Function->getParamDecl(P);
3763       Placeholder = FormatFunctionParameter(Policy, Param);
3764       if (Param->hasDefaultArg())
3765         Placeholder += GetDefaultValueString(Param, Context.getSourceManager(),
3766                                              Context.getLangOpts());
3767     } else {
3768       Placeholder = Prototype->getParamType(P).getAsString(Policy);
3769     }
3770 
3771     if (P == CurrentArg)
3772       Result.AddCurrentParameterChunk(
3773           Result.getAllocator().CopyString(Placeholder));
3774     else
3775       Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Placeholder));
3776   }
3777 
3778   if (Prototype && Prototype->isVariadic()) {
3779     CodeCompletionBuilder Opt(Result.getAllocator(),
3780                               Result.getCodeCompletionTUInfo());
3781     if (!FirstParameter)
3782       Opt.AddChunk(CodeCompletionString::CK_Comma);
3783 
3784     if (CurrentArg < NumParams)
3785       Opt.AddPlaceholderChunk("...");
3786     else
3787       Opt.AddCurrentParameterChunk("...");
3788 
3789     Result.AddOptionalChunk(Opt.TakeString());
3790   }
3791 }
3792 
3793 static std::string
3794 formatTemplateParameterPlaceholder(const NamedDecl *Param, bool &Optional,
3795                                    const PrintingPolicy &Policy) {
3796   if (const auto *Type = dyn_cast<TemplateTypeParmDecl>(Param)) {
3797     Optional = Type->hasDefaultArgument();
3798   } else if (const auto *NonType = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
3799     Optional = NonType->hasDefaultArgument();
3800   } else if (const auto *Template = dyn_cast<TemplateTemplateParmDecl>(Param)) {
3801     Optional = Template->hasDefaultArgument();
3802   }
3803   std::string Result;
3804   llvm::raw_string_ostream OS(Result);
3805   Param->print(OS, Policy);
3806   return Result;
3807 }
3808 
3809 static std::string templateResultType(const TemplateDecl *TD,
3810                                       const PrintingPolicy &Policy) {
3811   if (const auto *CTD = dyn_cast<ClassTemplateDecl>(TD))
3812     return CTD->getTemplatedDecl()->getKindName().str();
3813   if (const auto *VTD = dyn_cast<VarTemplateDecl>(TD))
3814     return VTD->getTemplatedDecl()->getType().getAsString(Policy);
3815   if (const auto *FTD = dyn_cast<FunctionTemplateDecl>(TD))
3816     return FTD->getTemplatedDecl()->getReturnType().getAsString(Policy);
3817   if (isa<TypeAliasTemplateDecl>(TD))
3818     return "type";
3819   if (isa<TemplateTemplateParmDecl>(TD))
3820     return "class";
3821   if (isa<ConceptDecl>(TD))
3822     return "concept";
3823   return "";
3824 }
3825 
3826 static CodeCompletionString *createTemplateSignatureString(
3827     const TemplateDecl *TD, CodeCompletionBuilder &Builder, unsigned CurrentArg,
3828     const PrintingPolicy &Policy) {
3829   llvm::ArrayRef<NamedDecl *> Params = TD->getTemplateParameters()->asArray();
3830   CodeCompletionBuilder OptionalBuilder(Builder.getAllocator(),
3831                                         Builder.getCodeCompletionTUInfo());
3832   std::string ResultType = templateResultType(TD, Policy);
3833   if (!ResultType.empty())
3834     Builder.AddResultTypeChunk(Builder.getAllocator().CopyString(ResultType));
3835   Builder.AddTextChunk(
3836       Builder.getAllocator().CopyString(TD->getNameAsString()));
3837   Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
3838   // Initially we're writing into the main string. Once we see an optional arg
3839   // (with default), we're writing into the nested optional chunk.
3840   CodeCompletionBuilder *Current = &Builder;
3841   for (unsigned I = 0; I < Params.size(); ++I) {
3842     bool Optional = false;
3843     std::string Placeholder =
3844         formatTemplateParameterPlaceholder(Params[I], Optional, Policy);
3845     if (Optional)
3846       Current = &OptionalBuilder;
3847     if (I > 0)
3848       Current->AddChunk(CodeCompletionString::CK_Comma);
3849     Current->AddChunk(I == CurrentArg
3850                           ? CodeCompletionString::CK_CurrentParameter
3851                           : CodeCompletionString::CK_Placeholder,
3852                       Current->getAllocator().CopyString(Placeholder));
3853   }
3854   // Add the optional chunk to the main string if we ever used it.
3855   if (Current == &OptionalBuilder)
3856     Builder.AddOptionalChunk(OptionalBuilder.TakeString());
3857   Builder.AddChunk(CodeCompletionString::CK_RightAngle);
3858   // For function templates, ResultType was the function's return type.
3859   // Give some clue this is a function. (Don't show the possibly-bulky params).
3860   if (isa<FunctionTemplateDecl>(TD))
3861     Builder.AddInformativeChunk("()");
3862   return Builder.TakeString();
3863 }
3864 
3865 CodeCompletionString *
3866 CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(
3867     unsigned CurrentArg, Sema &S, CodeCompletionAllocator &Allocator,
3868     CodeCompletionTUInfo &CCTUInfo, bool IncludeBriefComments,
3869     bool Braced) const {
3870   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
3871   // Show signatures of constructors as they are declared:
3872   //   vector(int n) rather than vector<string>(int n)
3873   // This is less noisy without being less clear, and avoids tricky cases.
3874   Policy.SuppressTemplateArgsInCXXConstructors = true;
3875 
3876   // FIXME: Set priority, availability appropriately.
3877   CodeCompletionBuilder Result(Allocator, CCTUInfo, 1,
3878                                CXAvailability_Available);
3879 
3880   if (getKind() == CK_Template)
3881     return createTemplateSignatureString(getTemplate(), Result, CurrentArg,
3882                                          Policy);
3883 
3884   FunctionDecl *FDecl = getFunction();
3885   const FunctionProtoType *Proto =
3886       dyn_cast_or_null<FunctionProtoType>(getFunctionType());
3887 
3888   // First, the name/type of the callee.
3889   if (getKind() == CK_Aggregate) {
3890     Result.AddTextChunk(
3891         Result.getAllocator().CopyString(getAggregate()->getName()));
3892   } else if (FDecl) {
3893     if (IncludeBriefComments) {
3894       if (auto RC = getParameterComment(S.getASTContext(), *this, CurrentArg))
3895         Result.addBriefComment(RC->getBriefText(S.getASTContext()));
3896     }
3897     AddResultTypeChunk(S.Context, Policy, FDecl, QualType(), Result);
3898 
3899     std::string Name;
3900     llvm::raw_string_ostream OS(Name);
3901     FDecl->getDeclName().print(OS, Policy);
3902     Result.AddTextChunk(Result.getAllocator().CopyString(OS.str()));
3903   } else {
3904     // Function without a declaration. Just give the return type.
3905     Result.AddResultTypeChunk(Result.getAllocator().CopyString(
3906         getFunctionType()->getReturnType().getAsString(Policy)));
3907   }
3908 
3909   // Next, the brackets and parameters.
3910   Result.AddChunk(Braced ? CodeCompletionString::CK_LeftBrace
3911                          : CodeCompletionString::CK_LeftParen);
3912   if (getKind() == CK_Aggregate)
3913     AddOverloadAggregateChunks(getAggregate(), Policy, Result, CurrentArg);
3914   else
3915     AddOverloadParameterChunks(S.getASTContext(), Policy, FDecl, Proto, Result,
3916                                CurrentArg);
3917   Result.AddChunk(Braced ? CodeCompletionString::CK_RightBrace
3918                          : CodeCompletionString::CK_RightParen);
3919 
3920   return Result.TakeString();
3921 }
3922 
3923 unsigned clang::getMacroUsagePriority(StringRef MacroName,
3924                                       const LangOptions &LangOpts,
3925                                       bool PreferredTypeIsPointer) {
3926   unsigned Priority = CCP_Macro;
3927 
3928   // Treat the "nil", "Nil" and "NULL" macros as null pointer constants.
3929   if (MacroName.equals("nil") || MacroName.equals("NULL") ||
3930       MacroName.equals("Nil")) {
3931     Priority = CCP_Constant;
3932     if (PreferredTypeIsPointer)
3933       Priority = Priority / CCF_SimilarTypeMatch;
3934   }
3935   // Treat "YES", "NO", "true", and "false" as constants.
3936   else if (MacroName.equals("YES") || MacroName.equals("NO") ||
3937            MacroName.equals("true") || MacroName.equals("false"))
3938     Priority = CCP_Constant;
3939   // Treat "bool" as a type.
3940   else if (MacroName.equals("bool"))
3941     Priority = CCP_Type + (LangOpts.ObjC ? CCD_bool_in_ObjC : 0);
3942 
3943   return Priority;
3944 }
3945 
3946 CXCursorKind clang::getCursorKindForDecl(const Decl *D) {
3947   if (!D)
3948     return CXCursor_UnexposedDecl;
3949 
3950   switch (D->getKind()) {
3951   case Decl::Enum:
3952     return CXCursor_EnumDecl;
3953   case Decl::EnumConstant:
3954     return CXCursor_EnumConstantDecl;
3955   case Decl::Field:
3956     return CXCursor_FieldDecl;
3957   case Decl::Function:
3958     return CXCursor_FunctionDecl;
3959   case Decl::ObjCCategory:
3960     return CXCursor_ObjCCategoryDecl;
3961   case Decl::ObjCCategoryImpl:
3962     return CXCursor_ObjCCategoryImplDecl;
3963   case Decl::ObjCImplementation:
3964     return CXCursor_ObjCImplementationDecl;
3965 
3966   case Decl::ObjCInterface:
3967     return CXCursor_ObjCInterfaceDecl;
3968   case Decl::ObjCIvar:
3969     return CXCursor_ObjCIvarDecl;
3970   case Decl::ObjCMethod:
3971     return cast<ObjCMethodDecl>(D)->isInstanceMethod()
3972                ? CXCursor_ObjCInstanceMethodDecl
3973                : CXCursor_ObjCClassMethodDecl;
3974   case Decl::CXXMethod:
3975     return CXCursor_CXXMethod;
3976   case Decl::CXXConstructor:
3977     return CXCursor_Constructor;
3978   case Decl::CXXDestructor:
3979     return CXCursor_Destructor;
3980   case Decl::CXXConversion:
3981     return CXCursor_ConversionFunction;
3982   case Decl::ObjCProperty:
3983     return CXCursor_ObjCPropertyDecl;
3984   case Decl::ObjCProtocol:
3985     return CXCursor_ObjCProtocolDecl;
3986   case Decl::ParmVar:
3987     return CXCursor_ParmDecl;
3988   case Decl::Typedef:
3989     return CXCursor_TypedefDecl;
3990   case Decl::TypeAlias:
3991     return CXCursor_TypeAliasDecl;
3992   case Decl::TypeAliasTemplate:
3993     return CXCursor_TypeAliasTemplateDecl;
3994   case Decl::Var:
3995     return CXCursor_VarDecl;
3996   case Decl::Namespace:
3997     return CXCursor_Namespace;
3998   case Decl::NamespaceAlias:
3999     return CXCursor_NamespaceAlias;
4000   case Decl::TemplateTypeParm:
4001     return CXCursor_TemplateTypeParameter;
4002   case Decl::NonTypeTemplateParm:
4003     return CXCursor_NonTypeTemplateParameter;
4004   case Decl::TemplateTemplateParm:
4005     return CXCursor_TemplateTemplateParameter;
4006   case Decl::FunctionTemplate:
4007     return CXCursor_FunctionTemplate;
4008   case Decl::ClassTemplate:
4009     return CXCursor_ClassTemplate;
4010   case Decl::AccessSpec:
4011     return CXCursor_CXXAccessSpecifier;
4012   case Decl::ClassTemplatePartialSpecialization:
4013     return CXCursor_ClassTemplatePartialSpecialization;
4014   case Decl::UsingDirective:
4015     return CXCursor_UsingDirective;
4016   case Decl::StaticAssert:
4017     return CXCursor_StaticAssert;
4018   case Decl::Friend:
4019     return CXCursor_FriendDecl;
4020   case Decl::TranslationUnit:
4021     return CXCursor_TranslationUnit;
4022 
4023   case Decl::Using:
4024   case Decl::UnresolvedUsingValue:
4025   case Decl::UnresolvedUsingTypename:
4026     return CXCursor_UsingDeclaration;
4027 
4028   case Decl::UsingEnum:
4029     return CXCursor_EnumDecl;
4030 
4031   case Decl::ObjCPropertyImpl:
4032     switch (cast<ObjCPropertyImplDecl>(D)->getPropertyImplementation()) {
4033     case ObjCPropertyImplDecl::Dynamic:
4034       return CXCursor_ObjCDynamicDecl;
4035 
4036     case ObjCPropertyImplDecl::Synthesize:
4037       return CXCursor_ObjCSynthesizeDecl;
4038     }
4039     llvm_unreachable("Unexpected Kind!");
4040 
4041   case Decl::Import:
4042     return CXCursor_ModuleImportDecl;
4043 
4044   case Decl::ObjCTypeParam:
4045     return CXCursor_TemplateTypeParameter;
4046 
4047   case Decl::Concept:
4048     return CXCursor_ConceptDecl;
4049 
4050   default:
4051     if (const auto *TD = dyn_cast<TagDecl>(D)) {
4052       switch (TD->getTagKind()) {
4053       case TTK_Interface: // fall through
4054       case TTK_Struct:
4055         return CXCursor_StructDecl;
4056       case TTK_Class:
4057         return CXCursor_ClassDecl;
4058       case TTK_Union:
4059         return CXCursor_UnionDecl;
4060       case TTK_Enum:
4061         return CXCursor_EnumDecl;
4062       }
4063     }
4064   }
4065 
4066   return CXCursor_UnexposedDecl;
4067 }
4068 
4069 static void AddMacroResults(Preprocessor &PP, ResultBuilder &Results,
4070                             bool LoadExternal, bool IncludeUndefined,
4071                             bool TargetTypeIsPointer = false) {
4072   typedef CodeCompletionResult Result;
4073 
4074   Results.EnterNewScope();
4075 
4076   for (Preprocessor::macro_iterator M = PP.macro_begin(LoadExternal),
4077                                     MEnd = PP.macro_end(LoadExternal);
4078        M != MEnd; ++M) {
4079     auto MD = PP.getMacroDefinition(M->first);
4080     if (IncludeUndefined || MD) {
4081       MacroInfo *MI = MD.getMacroInfo();
4082       if (MI && MI->isUsedForHeaderGuard())
4083         continue;
4084 
4085       Results.AddResult(
4086           Result(M->first, MI,
4087                  getMacroUsagePriority(M->first->getName(), PP.getLangOpts(),
4088                                        TargetTypeIsPointer)));
4089     }
4090   }
4091 
4092   Results.ExitScope();
4093 }
4094 
4095 static void AddPrettyFunctionResults(const LangOptions &LangOpts,
4096                                      ResultBuilder &Results) {
4097   typedef CodeCompletionResult Result;
4098 
4099   Results.EnterNewScope();
4100 
4101   Results.AddResult(Result("__PRETTY_FUNCTION__", CCP_Constant));
4102   Results.AddResult(Result("__FUNCTION__", CCP_Constant));
4103   if (LangOpts.C99 || LangOpts.CPlusPlus11)
4104     Results.AddResult(Result("__func__", CCP_Constant));
4105   Results.ExitScope();
4106 }
4107 
4108 static void HandleCodeCompleteResults(Sema *S,
4109                                       CodeCompleteConsumer *CodeCompleter,
4110                                       CodeCompletionContext Context,
4111                                       CodeCompletionResult *Results,
4112                                       unsigned NumResults) {
4113   if (CodeCompleter)
4114     CodeCompleter->ProcessCodeCompleteResults(*S, Context, Results, NumResults);
4115 }
4116 
4117 static CodeCompletionContext
4118 mapCodeCompletionContext(Sema &S, Sema::ParserCompletionContext PCC) {
4119   switch (PCC) {
4120   case Sema::PCC_Namespace:
4121     return CodeCompletionContext::CCC_TopLevel;
4122 
4123   case Sema::PCC_Class:
4124     return CodeCompletionContext::CCC_ClassStructUnion;
4125 
4126   case Sema::PCC_ObjCInterface:
4127     return CodeCompletionContext::CCC_ObjCInterface;
4128 
4129   case Sema::PCC_ObjCImplementation:
4130     return CodeCompletionContext::CCC_ObjCImplementation;
4131 
4132   case Sema::PCC_ObjCInstanceVariableList:
4133     return CodeCompletionContext::CCC_ObjCIvarList;
4134 
4135   case Sema::PCC_Template:
4136   case Sema::PCC_MemberTemplate:
4137     if (S.CurContext->isFileContext())
4138       return CodeCompletionContext::CCC_TopLevel;
4139     if (S.CurContext->isRecord())
4140       return CodeCompletionContext::CCC_ClassStructUnion;
4141     return CodeCompletionContext::CCC_Other;
4142 
4143   case Sema::PCC_RecoveryInFunction:
4144     return CodeCompletionContext::CCC_Recovery;
4145 
4146   case Sema::PCC_ForInit:
4147     if (S.getLangOpts().CPlusPlus || S.getLangOpts().C99 ||
4148         S.getLangOpts().ObjC)
4149       return CodeCompletionContext::CCC_ParenthesizedExpression;
4150     else
4151       return CodeCompletionContext::CCC_Expression;
4152 
4153   case Sema::PCC_Expression:
4154     return CodeCompletionContext::CCC_Expression;
4155   case Sema::PCC_Condition:
4156     return CodeCompletionContext(CodeCompletionContext::CCC_Expression,
4157                                  S.getASTContext().BoolTy);
4158 
4159   case Sema::PCC_Statement:
4160     return CodeCompletionContext::CCC_Statement;
4161 
4162   case Sema::PCC_Type:
4163     return CodeCompletionContext::CCC_Type;
4164 
4165   case Sema::PCC_ParenthesizedExpression:
4166     return CodeCompletionContext::CCC_ParenthesizedExpression;
4167 
4168   case Sema::PCC_LocalDeclarationSpecifiers:
4169     return CodeCompletionContext::CCC_Type;
4170   }
4171 
4172   llvm_unreachable("Invalid ParserCompletionContext!");
4173 }
4174 
4175 /// If we're in a C++ virtual member function, add completion results
4176 /// that invoke the functions we override, since it's common to invoke the
4177 /// overridden function as well as adding new functionality.
4178 ///
4179 /// \param S The semantic analysis object for which we are generating results.
4180 ///
4181 /// \param InContext This context in which the nested-name-specifier preceding
4182 /// the code-completion point
4183 static void MaybeAddOverrideCalls(Sema &S, DeclContext *InContext,
4184                                   ResultBuilder &Results) {
4185   // Look through blocks.
4186   DeclContext *CurContext = S.CurContext;
4187   while (isa<BlockDecl>(CurContext))
4188     CurContext = CurContext->getParent();
4189 
4190   CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(CurContext);
4191   if (!Method || !Method->isVirtual())
4192     return;
4193 
4194   // We need to have names for all of the parameters, if we're going to
4195   // generate a forwarding call.
4196   for (auto P : Method->parameters())
4197     if (!P->getDeclName())
4198       return;
4199 
4200   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
4201   for (const CXXMethodDecl *Overridden : Method->overridden_methods()) {
4202     CodeCompletionBuilder Builder(Results.getAllocator(),
4203                                   Results.getCodeCompletionTUInfo());
4204     if (Overridden->getCanonicalDecl() == Method->getCanonicalDecl())
4205       continue;
4206 
4207     // If we need a nested-name-specifier, add one now.
4208     if (!InContext) {
4209       NestedNameSpecifier *NNS = getRequiredQualification(
4210           S.Context, CurContext, Overridden->getDeclContext());
4211       if (NNS) {
4212         std::string Str;
4213         llvm::raw_string_ostream OS(Str);
4214         NNS->print(OS, Policy);
4215         Builder.AddTextChunk(Results.getAllocator().CopyString(OS.str()));
4216       }
4217     } else if (!InContext->Equals(Overridden->getDeclContext()))
4218       continue;
4219 
4220     Builder.AddTypedTextChunk(
4221         Results.getAllocator().CopyString(Overridden->getNameAsString()));
4222     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4223     bool FirstParam = true;
4224     for (auto P : Method->parameters()) {
4225       if (FirstParam)
4226         FirstParam = false;
4227       else
4228         Builder.AddChunk(CodeCompletionString::CK_Comma);
4229 
4230       Builder.AddPlaceholderChunk(
4231           Results.getAllocator().CopyString(P->getIdentifier()->getName()));
4232     }
4233     Builder.AddChunk(CodeCompletionString::CK_RightParen);
4234     Results.AddResult(CodeCompletionResult(
4235         Builder.TakeString(), CCP_SuperCompletion, CXCursor_CXXMethod,
4236         CXAvailability_Available, Overridden));
4237     Results.Ignore(Overridden);
4238   }
4239 }
4240 
4241 void Sema::CodeCompleteModuleImport(SourceLocation ImportLoc,
4242                                     ModuleIdPath Path) {
4243   typedef CodeCompletionResult Result;
4244   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4245                         CodeCompleter->getCodeCompletionTUInfo(),
4246                         CodeCompletionContext::CCC_Other);
4247   Results.EnterNewScope();
4248 
4249   CodeCompletionAllocator &Allocator = Results.getAllocator();
4250   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
4251   typedef CodeCompletionResult Result;
4252   if (Path.empty()) {
4253     // Enumerate all top-level modules.
4254     SmallVector<Module *, 8> Modules;
4255     PP.getHeaderSearchInfo().collectAllModules(Modules);
4256     for (unsigned I = 0, N = Modules.size(); I != N; ++I) {
4257       Builder.AddTypedTextChunk(
4258           Builder.getAllocator().CopyString(Modules[I]->Name));
4259       Results.AddResult(Result(
4260           Builder.TakeString(), CCP_Declaration, CXCursor_ModuleImportDecl,
4261           Modules[I]->isAvailable() ? CXAvailability_Available
4262                                     : CXAvailability_NotAvailable));
4263     }
4264   } else if (getLangOpts().Modules) {
4265     // Load the named module.
4266     Module *Mod =
4267         PP.getModuleLoader().loadModule(ImportLoc, Path, Module::AllVisible,
4268                                         /*IsInclusionDirective=*/false);
4269     // Enumerate submodules.
4270     if (Mod) {
4271       for (Module::submodule_iterator Sub = Mod->submodule_begin(),
4272                                       SubEnd = Mod->submodule_end();
4273            Sub != SubEnd; ++Sub) {
4274 
4275         Builder.AddTypedTextChunk(
4276             Builder.getAllocator().CopyString((*Sub)->Name));
4277         Results.AddResult(Result(
4278             Builder.TakeString(), CCP_Declaration, CXCursor_ModuleImportDecl,
4279             (*Sub)->isAvailable() ? CXAvailability_Available
4280                                   : CXAvailability_NotAvailable));
4281       }
4282     }
4283   }
4284   Results.ExitScope();
4285   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4286                             Results.data(), Results.size());
4287 }
4288 
4289 void Sema::CodeCompleteOrdinaryName(Scope *S,
4290                                     ParserCompletionContext CompletionContext) {
4291   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4292                         CodeCompleter->getCodeCompletionTUInfo(),
4293                         mapCodeCompletionContext(*this, CompletionContext));
4294   Results.EnterNewScope();
4295 
4296   // Determine how to filter results, e.g., so that the names of
4297   // values (functions, enumerators, function templates, etc.) are
4298   // only allowed where we can have an expression.
4299   switch (CompletionContext) {
4300   case PCC_Namespace:
4301   case PCC_Class:
4302   case PCC_ObjCInterface:
4303   case PCC_ObjCImplementation:
4304   case PCC_ObjCInstanceVariableList:
4305   case PCC_Template:
4306   case PCC_MemberTemplate:
4307   case PCC_Type:
4308   case PCC_LocalDeclarationSpecifiers:
4309     Results.setFilter(&ResultBuilder::IsOrdinaryNonValueName);
4310     break;
4311 
4312   case PCC_Statement:
4313   case PCC_ParenthesizedExpression:
4314   case PCC_Expression:
4315   case PCC_ForInit:
4316   case PCC_Condition:
4317     if (WantTypesInContext(CompletionContext, getLangOpts()))
4318       Results.setFilter(&ResultBuilder::IsOrdinaryName);
4319     else
4320       Results.setFilter(&ResultBuilder::IsOrdinaryNonTypeName);
4321 
4322     if (getLangOpts().CPlusPlus)
4323       MaybeAddOverrideCalls(*this, /*InContext=*/nullptr, Results);
4324     break;
4325 
4326   case PCC_RecoveryInFunction:
4327     // Unfiltered
4328     break;
4329   }
4330 
4331   // If we are in a C++ non-static member function, check the qualifiers on
4332   // the member function to filter/prioritize the results list.
4333   auto ThisType = getCurrentThisType();
4334   if (!ThisType.isNull())
4335     Results.setObjectTypeQualifiers(ThisType->getPointeeType().getQualifiers(),
4336                                     VK_LValue);
4337 
4338   CodeCompletionDeclConsumer Consumer(Results, CurContext);
4339   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
4340                      CodeCompleter->includeGlobals(),
4341                      CodeCompleter->loadExternal());
4342 
4343   AddOrdinaryNameResults(CompletionContext, S, *this, Results);
4344   Results.ExitScope();
4345 
4346   switch (CompletionContext) {
4347   case PCC_ParenthesizedExpression:
4348   case PCC_Expression:
4349   case PCC_Statement:
4350   case PCC_RecoveryInFunction:
4351     if (S->getFnParent())
4352       AddPrettyFunctionResults(getLangOpts(), Results);
4353     break;
4354 
4355   case PCC_Namespace:
4356   case PCC_Class:
4357   case PCC_ObjCInterface:
4358   case PCC_ObjCImplementation:
4359   case PCC_ObjCInstanceVariableList:
4360   case PCC_Template:
4361   case PCC_MemberTemplate:
4362   case PCC_ForInit:
4363   case PCC_Condition:
4364   case PCC_Type:
4365   case PCC_LocalDeclarationSpecifiers:
4366     break;
4367   }
4368 
4369   if (CodeCompleter->includeMacros())
4370     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
4371 
4372   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4373                             Results.data(), Results.size());
4374 }
4375 
4376 static void AddClassMessageCompletions(Sema &SemaRef, Scope *S,
4377                                        ParsedType Receiver,
4378                                        ArrayRef<IdentifierInfo *> SelIdents,
4379                                        bool AtArgumentExpression, bool IsSuper,
4380                                        ResultBuilder &Results);
4381 
4382 void Sema::CodeCompleteDeclSpec(Scope *S, DeclSpec &DS,
4383                                 bool AllowNonIdentifiers,
4384                                 bool AllowNestedNameSpecifiers) {
4385   typedef CodeCompletionResult Result;
4386   ResultBuilder Results(
4387       *this, CodeCompleter->getAllocator(),
4388       CodeCompleter->getCodeCompletionTUInfo(),
4389       AllowNestedNameSpecifiers
4390           // FIXME: Try to separate codepath leading here to deduce whether we
4391           // need an existing symbol or a new one.
4392           ? CodeCompletionContext::CCC_SymbolOrNewName
4393           : CodeCompletionContext::CCC_NewName);
4394   Results.EnterNewScope();
4395 
4396   // Type qualifiers can come after names.
4397   Results.AddResult(Result("const"));
4398   Results.AddResult(Result("volatile"));
4399   if (getLangOpts().C99)
4400     Results.AddResult(Result("restrict"));
4401 
4402   if (getLangOpts().CPlusPlus) {
4403     if (getLangOpts().CPlusPlus11 &&
4404         (DS.getTypeSpecType() == DeclSpec::TST_class ||
4405          DS.getTypeSpecType() == DeclSpec::TST_struct))
4406       Results.AddResult("final");
4407 
4408     if (AllowNonIdentifiers) {
4409       Results.AddResult(Result("operator"));
4410     }
4411 
4412     // Add nested-name-specifiers.
4413     if (AllowNestedNameSpecifiers) {
4414       Results.allowNestedNameSpecifiers();
4415       Results.setFilter(&ResultBuilder::IsImpossibleToSatisfy);
4416       CodeCompletionDeclConsumer Consumer(Results, CurContext);
4417       LookupVisibleDecls(S, LookupNestedNameSpecifierName, Consumer,
4418                          CodeCompleter->includeGlobals(),
4419                          CodeCompleter->loadExternal());
4420       Results.setFilter(nullptr);
4421     }
4422   }
4423   Results.ExitScope();
4424 
4425   // If we're in a context where we might have an expression (rather than a
4426   // declaration), and what we've seen so far is an Objective-C type that could
4427   // be a receiver of a class message, this may be a class message send with
4428   // the initial opening bracket '[' missing. Add appropriate completions.
4429   if (AllowNonIdentifiers && !AllowNestedNameSpecifiers &&
4430       DS.getParsedSpecifiers() == DeclSpec::PQ_TypeSpecifier &&
4431       DS.getTypeSpecType() == DeclSpec::TST_typename &&
4432       DS.getTypeSpecComplex() == DeclSpec::TSC_unspecified &&
4433       DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified &&
4434       !DS.isTypeAltiVecVector() && S &&
4435       (S->getFlags() & Scope::DeclScope) != 0 &&
4436       (S->getFlags() & (Scope::ClassScope | Scope::TemplateParamScope |
4437                         Scope::FunctionPrototypeScope | Scope::AtCatchScope)) ==
4438           0) {
4439     ParsedType T = DS.getRepAsType();
4440     if (!T.get().isNull() && T.get()->isObjCObjectOrInterfaceType())
4441       AddClassMessageCompletions(*this, S, T, None, false, false, Results);
4442   }
4443 
4444   // Note that we intentionally suppress macro results here, since we do not
4445   // encourage using macros to produce the names of entities.
4446 
4447   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4448                             Results.data(), Results.size());
4449 }
4450 
4451 static const char *underscoreAttrScope(llvm::StringRef Scope) {
4452   if (Scope == "clang")
4453     return "_Clang";
4454   if (Scope == "gnu")
4455     return "__gnu__";
4456   return nullptr;
4457 }
4458 
4459 static const char *noUnderscoreAttrScope(llvm::StringRef Scope) {
4460   if (Scope == "_Clang")
4461     return "clang";
4462   if (Scope == "__gnu__")
4463     return "gnu";
4464   return nullptr;
4465 }
4466 
4467 void Sema::CodeCompleteAttribute(AttributeCommonInfo::Syntax Syntax,
4468                                  AttributeCompletion Completion,
4469                                  const IdentifierInfo *InScope) {
4470   if (Completion == AttributeCompletion::None)
4471     return;
4472   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4473                         CodeCompleter->getCodeCompletionTUInfo(),
4474                         CodeCompletionContext::CCC_Attribute);
4475 
4476   // We're going to iterate over the normalized spellings of the attribute.
4477   // These don't include "underscore guarding": the normalized spelling is
4478   // clang::foo but you can also write _Clang::__foo__.
4479   //
4480   // (Clang supports a mix like clang::__foo__ but we won't suggest it: either
4481   // you care about clashing with macros or you don't).
4482   //
4483   // So if we're already in a scope, we determine its canonical spellings
4484   // (for comparison with normalized attr spelling) and remember whether it was
4485   // underscore-guarded (so we know how to spell contained attributes).
4486   llvm::StringRef InScopeName;
4487   bool InScopeUnderscore = false;
4488   if (InScope) {
4489     InScopeName = InScope->getName();
4490     if (const char *NoUnderscore = noUnderscoreAttrScope(InScopeName)) {
4491       InScopeName = NoUnderscore;
4492       InScopeUnderscore = true;
4493     }
4494   }
4495   bool SyntaxSupportsGuards = Syntax == AttributeCommonInfo::AS_GNU ||
4496                               Syntax == AttributeCommonInfo::AS_CXX11 ||
4497                               Syntax == AttributeCommonInfo::AS_C2x;
4498 
4499   llvm::DenseSet<llvm::StringRef> FoundScopes;
4500   auto AddCompletions = [&](const ParsedAttrInfo &A) {
4501     if (A.IsTargetSpecific && !A.existsInTarget(Context.getTargetInfo()))
4502       return;
4503     if (!A.acceptsLangOpts(getLangOpts()))
4504       return;
4505     for (const auto &S : A.Spellings) {
4506       if (S.Syntax != Syntax)
4507         continue;
4508       llvm::StringRef Name = S.NormalizedFullName;
4509       llvm::StringRef Scope;
4510       if ((Syntax == AttributeCommonInfo::AS_CXX11 ||
4511            Syntax == AttributeCommonInfo::AS_C2x)) {
4512         std::tie(Scope, Name) = Name.split("::");
4513         if (Name.empty()) // oops, unscoped
4514           std::swap(Name, Scope);
4515       }
4516 
4517       // Do we just want a list of scopes rather than attributes?
4518       if (Completion == AttributeCompletion::Scope) {
4519         // Make sure to emit each scope only once.
4520         if (!Scope.empty() && FoundScopes.insert(Scope).second) {
4521           Results.AddResult(
4522               CodeCompletionResult(Results.getAllocator().CopyString(Scope)));
4523           // Include alternate form (__gnu__ instead of gnu).
4524           if (const char *Scope2 = underscoreAttrScope(Scope))
4525             Results.AddResult(CodeCompletionResult(Scope2));
4526         }
4527         continue;
4528       }
4529 
4530       // If a scope was specified, it must match but we don't need to print it.
4531       if (!InScopeName.empty()) {
4532         if (Scope != InScopeName)
4533           continue;
4534         Scope = "";
4535       }
4536 
4537       auto Add = [&](llvm::StringRef Scope, llvm::StringRef Name,
4538                      bool Underscores) {
4539         CodeCompletionBuilder Builder(Results.getAllocator(),
4540                                       Results.getCodeCompletionTUInfo());
4541         llvm::SmallString<32> Text;
4542         if (!Scope.empty()) {
4543           Text.append(Scope);
4544           Text.append("::");
4545         }
4546         if (Underscores)
4547           Text.append("__");
4548         Text.append(Name);
4549         if (Underscores)
4550           Text.append("__");
4551         Builder.AddTypedTextChunk(Results.getAllocator().CopyString(Text));
4552 
4553         if (!A.ArgNames.empty()) {
4554           Builder.AddChunk(CodeCompletionString::CK_LeftParen, "(");
4555           bool First = true;
4556           for (const char *Arg : A.ArgNames) {
4557             if (!First)
4558               Builder.AddChunk(CodeCompletionString::CK_Comma, ", ");
4559             First = false;
4560             Builder.AddPlaceholderChunk(Arg);
4561           }
4562           Builder.AddChunk(CodeCompletionString::CK_RightParen, ")");
4563         }
4564 
4565         Results.AddResult(Builder.TakeString());
4566       };
4567 
4568       // Generate the non-underscore-guarded result.
4569       // Note this is (a suffix of) the NormalizedFullName, no need to copy.
4570       // If an underscore-guarded scope was specified, only the
4571       // underscore-guarded attribute name is relevant.
4572       if (!InScopeUnderscore)
4573         Add(Scope, Name, /*Underscores=*/false);
4574 
4575       // Generate the underscore-guarded version, for syntaxes that support it.
4576       // We skip this if the scope was already spelled and not guarded, or
4577       // we must spell it and can't guard it.
4578       if (!(InScope && !InScopeUnderscore) && SyntaxSupportsGuards) {
4579         llvm::SmallString<32> Guarded;
4580         if (Scope.empty()) {
4581           Add(Scope, Name, /*Underscores=*/true);
4582         } else {
4583           const char *GuardedScope = underscoreAttrScope(Scope);
4584           if (!GuardedScope)
4585             continue;
4586           Add(GuardedScope, Name, /*Underscores=*/true);
4587         }
4588       }
4589 
4590       // It may be nice to include the Kind so we can look up the docs later.
4591     }
4592   };
4593 
4594   for (const auto *A : ParsedAttrInfo::getAllBuiltin())
4595     AddCompletions(*A);
4596   for (const auto &Entry : ParsedAttrInfoRegistry::entries())
4597     AddCompletions(*Entry.instantiate());
4598 
4599   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4600                             Results.data(), Results.size());
4601 }
4602 
4603 struct Sema::CodeCompleteExpressionData {
4604   CodeCompleteExpressionData(QualType PreferredType = QualType(),
4605                              bool IsParenthesized = false)
4606       : PreferredType(PreferredType), IntegralConstantExpression(false),
4607         ObjCCollection(false), IsParenthesized(IsParenthesized) {}
4608 
4609   QualType PreferredType;
4610   bool IntegralConstantExpression;
4611   bool ObjCCollection;
4612   bool IsParenthesized;
4613   SmallVector<Decl *, 4> IgnoreDecls;
4614 };
4615 
4616 namespace {
4617 /// Information that allows to avoid completing redundant enumerators.
4618 struct CoveredEnumerators {
4619   llvm::SmallPtrSet<EnumConstantDecl *, 8> Seen;
4620   NestedNameSpecifier *SuggestedQualifier = nullptr;
4621 };
4622 } // namespace
4623 
4624 static void AddEnumerators(ResultBuilder &Results, ASTContext &Context,
4625                            EnumDecl *Enum, DeclContext *CurContext,
4626                            const CoveredEnumerators &Enumerators) {
4627   NestedNameSpecifier *Qualifier = Enumerators.SuggestedQualifier;
4628   if (Context.getLangOpts().CPlusPlus && !Qualifier && Enumerators.Seen.empty()) {
4629     // If there are no prior enumerators in C++, check whether we have to
4630     // qualify the names of the enumerators that we suggest, because they
4631     // may not be visible in this scope.
4632     Qualifier = getRequiredQualification(Context, CurContext, Enum);
4633   }
4634 
4635   Results.EnterNewScope();
4636   for (auto *E : Enum->enumerators()) {
4637     if (Enumerators.Seen.count(E))
4638       continue;
4639 
4640     CodeCompletionResult R(E, CCP_EnumInCase, Qualifier);
4641     Results.AddResult(R, CurContext, nullptr, false);
4642   }
4643   Results.ExitScope();
4644 }
4645 
4646 /// Try to find a corresponding FunctionProtoType for function-like types (e.g.
4647 /// function pointers, std::function, etc).
4648 static const FunctionProtoType *TryDeconstructFunctionLike(QualType T) {
4649   assert(!T.isNull());
4650   // Try to extract first template argument from std::function<> and similar.
4651   // Note we only handle the sugared types, they closely match what users wrote.
4652   // We explicitly choose to not handle ClassTemplateSpecializationDecl.
4653   if (auto *Specialization = T->getAs<TemplateSpecializationType>()) {
4654     if (Specialization->getNumArgs() != 1)
4655       return nullptr;
4656     const TemplateArgument &Argument = Specialization->getArg(0);
4657     if (Argument.getKind() != TemplateArgument::Type)
4658       return nullptr;
4659     return Argument.getAsType()->getAs<FunctionProtoType>();
4660   }
4661   // Handle other cases.
4662   if (T->isPointerType())
4663     T = T->getPointeeType();
4664   return T->getAs<FunctionProtoType>();
4665 }
4666 
4667 /// Adds a pattern completion for a lambda expression with the specified
4668 /// parameter types and placeholders for parameter names.
4669 static void AddLambdaCompletion(ResultBuilder &Results,
4670                                 llvm::ArrayRef<QualType> Parameters,
4671                                 const LangOptions &LangOpts) {
4672   if (!Results.includeCodePatterns())
4673     return;
4674   CodeCompletionBuilder Completion(Results.getAllocator(),
4675                                    Results.getCodeCompletionTUInfo());
4676   // [](<parameters>) {}
4677   Completion.AddChunk(CodeCompletionString::CK_LeftBracket);
4678   Completion.AddPlaceholderChunk("=");
4679   Completion.AddChunk(CodeCompletionString::CK_RightBracket);
4680   if (!Parameters.empty()) {
4681     Completion.AddChunk(CodeCompletionString::CK_LeftParen);
4682     bool First = true;
4683     for (auto Parameter : Parameters) {
4684       if (!First)
4685         Completion.AddChunk(CodeCompletionString::ChunkKind::CK_Comma);
4686       else
4687         First = false;
4688 
4689       constexpr llvm::StringLiteral NamePlaceholder = "!#!NAME_GOES_HERE!#!";
4690       std::string Type = std::string(NamePlaceholder);
4691       Parameter.getAsStringInternal(Type, PrintingPolicy(LangOpts));
4692       llvm::StringRef Prefix, Suffix;
4693       std::tie(Prefix, Suffix) = llvm::StringRef(Type).split(NamePlaceholder);
4694       Prefix = Prefix.rtrim();
4695       Suffix = Suffix.ltrim();
4696 
4697       Completion.AddTextChunk(Completion.getAllocator().CopyString(Prefix));
4698       Completion.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4699       Completion.AddPlaceholderChunk("parameter");
4700       Completion.AddTextChunk(Completion.getAllocator().CopyString(Suffix));
4701     };
4702     Completion.AddChunk(CodeCompletionString::CK_RightParen);
4703   }
4704   Completion.AddChunk(clang::CodeCompletionString::CK_HorizontalSpace);
4705   Completion.AddChunk(CodeCompletionString::CK_LeftBrace);
4706   Completion.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4707   Completion.AddPlaceholderChunk("body");
4708   Completion.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4709   Completion.AddChunk(CodeCompletionString::CK_RightBrace);
4710 
4711   Results.AddResult(Completion.TakeString());
4712 }
4713 
4714 /// Perform code-completion in an expression context when we know what
4715 /// type we're looking for.
4716 void Sema::CodeCompleteExpression(Scope *S,
4717                                   const CodeCompleteExpressionData &Data) {
4718   ResultBuilder Results(
4719       *this, CodeCompleter->getAllocator(),
4720       CodeCompleter->getCodeCompletionTUInfo(),
4721       CodeCompletionContext(
4722           Data.IsParenthesized
4723               ? CodeCompletionContext::CCC_ParenthesizedExpression
4724               : CodeCompletionContext::CCC_Expression,
4725           Data.PreferredType));
4726   auto PCC =
4727       Data.IsParenthesized ? PCC_ParenthesizedExpression : PCC_Expression;
4728   if (Data.ObjCCollection)
4729     Results.setFilter(&ResultBuilder::IsObjCCollection);
4730   else if (Data.IntegralConstantExpression)
4731     Results.setFilter(&ResultBuilder::IsIntegralConstantValue);
4732   else if (WantTypesInContext(PCC, getLangOpts()))
4733     Results.setFilter(&ResultBuilder::IsOrdinaryName);
4734   else
4735     Results.setFilter(&ResultBuilder::IsOrdinaryNonTypeName);
4736 
4737   if (!Data.PreferredType.isNull())
4738     Results.setPreferredType(Data.PreferredType.getNonReferenceType());
4739 
4740   // Ignore any declarations that we were told that we don't care about.
4741   for (unsigned I = 0, N = Data.IgnoreDecls.size(); I != N; ++I)
4742     Results.Ignore(Data.IgnoreDecls[I]);
4743 
4744   CodeCompletionDeclConsumer Consumer(Results, CurContext);
4745   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
4746                      CodeCompleter->includeGlobals(),
4747                      CodeCompleter->loadExternal());
4748 
4749   Results.EnterNewScope();
4750   AddOrdinaryNameResults(PCC, S, *this, Results);
4751   Results.ExitScope();
4752 
4753   bool PreferredTypeIsPointer = false;
4754   if (!Data.PreferredType.isNull()) {
4755     PreferredTypeIsPointer = Data.PreferredType->isAnyPointerType() ||
4756                              Data.PreferredType->isMemberPointerType() ||
4757                              Data.PreferredType->isBlockPointerType();
4758     if (Data.PreferredType->isEnumeralType()) {
4759       EnumDecl *Enum = Data.PreferredType->castAs<EnumType>()->getDecl();
4760       if (auto *Def = Enum->getDefinition())
4761         Enum = Def;
4762       // FIXME: collect covered enumerators in cases like:
4763       //        if (x == my_enum::one) { ... } else if (x == ^) {}
4764       AddEnumerators(Results, Context, Enum, CurContext, CoveredEnumerators());
4765     }
4766   }
4767 
4768   if (S->getFnParent() && !Data.ObjCCollection &&
4769       !Data.IntegralConstantExpression)
4770     AddPrettyFunctionResults(getLangOpts(), Results);
4771 
4772   if (CodeCompleter->includeMacros())
4773     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false,
4774                     PreferredTypeIsPointer);
4775 
4776   // Complete a lambda expression when preferred type is a function.
4777   if (!Data.PreferredType.isNull() && getLangOpts().CPlusPlus11) {
4778     if (const FunctionProtoType *F =
4779             TryDeconstructFunctionLike(Data.PreferredType))
4780       AddLambdaCompletion(Results, F->getParamTypes(), getLangOpts());
4781   }
4782 
4783   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4784                             Results.data(), Results.size());
4785 }
4786 
4787 void Sema::CodeCompleteExpression(Scope *S, QualType PreferredType,
4788                                   bool IsParenthesized) {
4789   return CodeCompleteExpression(
4790       S, CodeCompleteExpressionData(PreferredType, IsParenthesized));
4791 }
4792 
4793 void Sema::CodeCompletePostfixExpression(Scope *S, ExprResult E,
4794                                          QualType PreferredType) {
4795   if (E.isInvalid())
4796     CodeCompleteExpression(S, PreferredType);
4797   else if (getLangOpts().ObjC)
4798     CodeCompleteObjCInstanceMessage(S, E.get(), None, false);
4799 }
4800 
4801 /// The set of properties that have already been added, referenced by
4802 /// property name.
4803 typedef llvm::SmallPtrSet<IdentifierInfo *, 16> AddedPropertiesSet;
4804 
4805 /// Retrieve the container definition, if any?
4806 static ObjCContainerDecl *getContainerDef(ObjCContainerDecl *Container) {
4807   if (ObjCInterfaceDecl *Interface = dyn_cast<ObjCInterfaceDecl>(Container)) {
4808     if (Interface->hasDefinition())
4809       return Interface->getDefinition();
4810 
4811     return Interface;
4812   }
4813 
4814   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
4815     if (Protocol->hasDefinition())
4816       return Protocol->getDefinition();
4817 
4818     return Protocol;
4819   }
4820   return Container;
4821 }
4822 
4823 /// Adds a block invocation code completion result for the given block
4824 /// declaration \p BD.
4825 static void AddObjCBlockCall(ASTContext &Context, const PrintingPolicy &Policy,
4826                              CodeCompletionBuilder &Builder,
4827                              const NamedDecl *BD,
4828                              const FunctionTypeLoc &BlockLoc,
4829                              const FunctionProtoTypeLoc &BlockProtoLoc) {
4830   Builder.AddResultTypeChunk(
4831       GetCompletionTypeString(BlockLoc.getReturnLoc().getType(), Context,
4832                               Policy, Builder.getAllocator()));
4833 
4834   AddTypedNameChunk(Context, Policy, BD, Builder);
4835   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4836 
4837   if (BlockProtoLoc && BlockProtoLoc.getTypePtr()->isVariadic()) {
4838     Builder.AddPlaceholderChunk("...");
4839   } else {
4840     for (unsigned I = 0, N = BlockLoc.getNumParams(); I != N; ++I) {
4841       if (I)
4842         Builder.AddChunk(CodeCompletionString::CK_Comma);
4843 
4844       // Format the placeholder string.
4845       std::string PlaceholderStr =
4846           FormatFunctionParameter(Policy, BlockLoc.getParam(I));
4847 
4848       if (I == N - 1 && BlockProtoLoc &&
4849           BlockProtoLoc.getTypePtr()->isVariadic())
4850         PlaceholderStr += ", ...";
4851 
4852       // Add the placeholder string.
4853       Builder.AddPlaceholderChunk(
4854           Builder.getAllocator().CopyString(PlaceholderStr));
4855     }
4856   }
4857 
4858   Builder.AddChunk(CodeCompletionString::CK_RightParen);
4859 }
4860 
4861 static void
4862 AddObjCProperties(const CodeCompletionContext &CCContext,
4863                   ObjCContainerDecl *Container, bool AllowCategories,
4864                   bool AllowNullaryMethods, DeclContext *CurContext,
4865                   AddedPropertiesSet &AddedProperties, ResultBuilder &Results,
4866                   bool IsBaseExprStatement = false,
4867                   bool IsClassProperty = false, bool InOriginalClass = true) {
4868   typedef CodeCompletionResult Result;
4869 
4870   // Retrieve the definition.
4871   Container = getContainerDef(Container);
4872 
4873   // Add properties in this container.
4874   const auto AddProperty = [&](const ObjCPropertyDecl *P) {
4875     if (!AddedProperties.insert(P->getIdentifier()).second)
4876       return;
4877 
4878     // FIXME: Provide block invocation completion for non-statement
4879     // expressions.
4880     if (!P->getType().getTypePtr()->isBlockPointerType() ||
4881         !IsBaseExprStatement) {
4882       Result R = Result(P, Results.getBasePriority(P), nullptr);
4883       if (!InOriginalClass)
4884         setInBaseClass(R);
4885       Results.MaybeAddResult(R, CurContext);
4886       return;
4887     }
4888 
4889     // Block setter and invocation completion is provided only when we are able
4890     // to find the FunctionProtoTypeLoc with parameter names for the block.
4891     FunctionTypeLoc BlockLoc;
4892     FunctionProtoTypeLoc BlockProtoLoc;
4893     findTypeLocationForBlockDecl(P->getTypeSourceInfo(), BlockLoc,
4894                                  BlockProtoLoc);
4895     if (!BlockLoc) {
4896       Result R = Result(P, Results.getBasePriority(P), nullptr);
4897       if (!InOriginalClass)
4898         setInBaseClass(R);
4899       Results.MaybeAddResult(R, CurContext);
4900       return;
4901     }
4902 
4903     // The default completion result for block properties should be the block
4904     // invocation completion when the base expression is a statement.
4905     CodeCompletionBuilder Builder(Results.getAllocator(),
4906                                   Results.getCodeCompletionTUInfo());
4907     AddObjCBlockCall(Container->getASTContext(),
4908                      getCompletionPrintingPolicy(Results.getSema()), Builder, P,
4909                      BlockLoc, BlockProtoLoc);
4910     Result R = Result(Builder.TakeString(), P, Results.getBasePriority(P));
4911     if (!InOriginalClass)
4912       setInBaseClass(R);
4913     Results.MaybeAddResult(R, CurContext);
4914 
4915     // Provide additional block setter completion iff the base expression is a
4916     // statement and the block property is mutable.
4917     if (!P->isReadOnly()) {
4918       CodeCompletionBuilder Builder(Results.getAllocator(),
4919                                     Results.getCodeCompletionTUInfo());
4920       AddResultTypeChunk(Container->getASTContext(),
4921                          getCompletionPrintingPolicy(Results.getSema()), P,
4922                          CCContext.getBaseType(), Builder);
4923       Builder.AddTypedTextChunk(
4924           Results.getAllocator().CopyString(P->getName()));
4925       Builder.AddChunk(CodeCompletionString::CK_Equal);
4926 
4927       std::string PlaceholderStr = formatBlockPlaceholder(
4928           getCompletionPrintingPolicy(Results.getSema()), P, BlockLoc,
4929           BlockProtoLoc, /*SuppressBlockName=*/true);
4930       // Add the placeholder string.
4931       Builder.AddPlaceholderChunk(
4932           Builder.getAllocator().CopyString(PlaceholderStr));
4933 
4934       // When completing blocks properties that return void the default
4935       // property completion result should show up before the setter,
4936       // otherwise the setter completion should show up before the default
4937       // property completion, as we normally want to use the result of the
4938       // call.
4939       Result R =
4940           Result(Builder.TakeString(), P,
4941                  Results.getBasePriority(P) +
4942                      (BlockLoc.getTypePtr()->getReturnType()->isVoidType()
4943                           ? CCD_BlockPropertySetter
4944                           : -CCD_BlockPropertySetter));
4945       if (!InOriginalClass)
4946         setInBaseClass(R);
4947       Results.MaybeAddResult(R, CurContext);
4948     }
4949   };
4950 
4951   if (IsClassProperty) {
4952     for (const auto *P : Container->class_properties())
4953       AddProperty(P);
4954   } else {
4955     for (const auto *P : Container->instance_properties())
4956       AddProperty(P);
4957   }
4958 
4959   // Add nullary methods or implicit class properties
4960   if (AllowNullaryMethods) {
4961     ASTContext &Context = Container->getASTContext();
4962     PrintingPolicy Policy = getCompletionPrintingPolicy(Results.getSema());
4963     // Adds a method result
4964     const auto AddMethod = [&](const ObjCMethodDecl *M) {
4965       IdentifierInfo *Name = M->getSelector().getIdentifierInfoForSlot(0);
4966       if (!Name)
4967         return;
4968       if (!AddedProperties.insert(Name).second)
4969         return;
4970       CodeCompletionBuilder Builder(Results.getAllocator(),
4971                                     Results.getCodeCompletionTUInfo());
4972       AddResultTypeChunk(Context, Policy, M, CCContext.getBaseType(), Builder);
4973       Builder.AddTypedTextChunk(
4974           Results.getAllocator().CopyString(Name->getName()));
4975       Result R = Result(Builder.TakeString(), M,
4976                         CCP_MemberDeclaration + CCD_MethodAsProperty);
4977       if (!InOriginalClass)
4978         setInBaseClass(R);
4979       Results.MaybeAddResult(R, CurContext);
4980     };
4981 
4982     if (IsClassProperty) {
4983       for (const auto *M : Container->methods()) {
4984         // Gather the class method that can be used as implicit property
4985         // getters. Methods with arguments or methods that return void aren't
4986         // added to the results as they can't be used as a getter.
4987         if (!M->getSelector().isUnarySelector() ||
4988             M->getReturnType()->isVoidType() || M->isInstanceMethod())
4989           continue;
4990         AddMethod(M);
4991       }
4992     } else {
4993       for (auto *M : Container->methods()) {
4994         if (M->getSelector().isUnarySelector())
4995           AddMethod(M);
4996       }
4997     }
4998   }
4999 
5000   // Add properties in referenced protocols.
5001   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
5002     for (auto *P : Protocol->protocols())
5003       AddObjCProperties(CCContext, P, AllowCategories, AllowNullaryMethods,
5004                         CurContext, AddedProperties, Results,
5005                         IsBaseExprStatement, IsClassProperty,
5006                         /*InOriginalClass*/ false);
5007   } else if (ObjCInterfaceDecl *IFace =
5008                  dyn_cast<ObjCInterfaceDecl>(Container)) {
5009     if (AllowCategories) {
5010       // Look through categories.
5011       for (auto *Cat : IFace->known_categories())
5012         AddObjCProperties(CCContext, Cat, AllowCategories, AllowNullaryMethods,
5013                           CurContext, AddedProperties, Results,
5014                           IsBaseExprStatement, IsClassProperty,
5015                           InOriginalClass);
5016     }
5017 
5018     // Look through protocols.
5019     for (auto *I : IFace->all_referenced_protocols())
5020       AddObjCProperties(CCContext, I, AllowCategories, AllowNullaryMethods,
5021                         CurContext, AddedProperties, Results,
5022                         IsBaseExprStatement, IsClassProperty,
5023                         /*InOriginalClass*/ false);
5024 
5025     // Look in the superclass.
5026     if (IFace->getSuperClass())
5027       AddObjCProperties(CCContext, IFace->getSuperClass(), AllowCategories,
5028                         AllowNullaryMethods, CurContext, AddedProperties,
5029                         Results, IsBaseExprStatement, IsClassProperty,
5030                         /*InOriginalClass*/ false);
5031   } else if (const auto *Category =
5032                  dyn_cast<ObjCCategoryDecl>(Container)) {
5033     // Look through protocols.
5034     for (auto *P : Category->protocols())
5035       AddObjCProperties(CCContext, P, AllowCategories, AllowNullaryMethods,
5036                         CurContext, AddedProperties, Results,
5037                         IsBaseExprStatement, IsClassProperty,
5038                         /*InOriginalClass*/ false);
5039   }
5040 }
5041 
5042 static void AddRecordMembersCompletionResults(
5043     Sema &SemaRef, ResultBuilder &Results, Scope *S, QualType BaseType,
5044     ExprValueKind BaseKind, RecordDecl *RD, Optional<FixItHint> AccessOpFixIt) {
5045   // Indicate that we are performing a member access, and the cv-qualifiers
5046   // for the base object type.
5047   Results.setObjectTypeQualifiers(BaseType.getQualifiers(), BaseKind);
5048 
5049   // Access to a C/C++ class, struct, or union.
5050   Results.allowNestedNameSpecifiers();
5051   std::vector<FixItHint> FixIts;
5052   if (AccessOpFixIt)
5053     FixIts.emplace_back(AccessOpFixIt.getValue());
5054   CodeCompletionDeclConsumer Consumer(Results, RD, BaseType, std::move(FixIts));
5055   SemaRef.LookupVisibleDecls(RD, Sema::LookupMemberName, Consumer,
5056                              SemaRef.CodeCompleter->includeGlobals(),
5057                              /*IncludeDependentBases=*/true,
5058                              SemaRef.CodeCompleter->loadExternal());
5059 
5060   if (SemaRef.getLangOpts().CPlusPlus) {
5061     if (!Results.empty()) {
5062       // The "template" keyword can follow "->" or "." in the grammar.
5063       // However, we only want to suggest the template keyword if something
5064       // is dependent.
5065       bool IsDependent = BaseType->isDependentType();
5066       if (!IsDependent) {
5067         for (Scope *DepScope = S; DepScope; DepScope = DepScope->getParent())
5068           if (DeclContext *Ctx = DepScope->getEntity()) {
5069             IsDependent = Ctx->isDependentContext();
5070             break;
5071           }
5072       }
5073 
5074       if (IsDependent)
5075         Results.AddResult(CodeCompletionResult("template"));
5076     }
5077   }
5078 }
5079 
5080 // Returns the RecordDecl inside the BaseType, falling back to primary template
5081 // in case of specializations. Since we might not have a decl for the
5082 // instantiation/specialization yet, e.g. dependent code.
5083 static RecordDecl *getAsRecordDecl(const QualType BaseType) {
5084   if (auto *RD = BaseType->getAsRecordDecl()) {
5085     if (const auto *CTSD =
5086             llvm::dyn_cast<ClassTemplateSpecializationDecl>(RD)) {
5087       // Template might not be instantiated yet, fall back to primary template
5088       // in such cases.
5089       if (CTSD->getTemplateSpecializationKind() == TSK_Undeclared)
5090         RD = CTSD->getSpecializedTemplate()->getTemplatedDecl();
5091     }
5092     return RD;
5093   }
5094 
5095   if (const auto *TST = BaseType->getAs<TemplateSpecializationType>()) {
5096     if (const auto *TD = dyn_cast_or_null<ClassTemplateDecl>(
5097             TST->getTemplateName().getAsTemplateDecl())) {
5098       return TD->getTemplatedDecl();
5099     }
5100   }
5101 
5102   return nullptr;
5103 }
5104 
5105 namespace {
5106 // Collects completion-relevant information about a concept-constrainted type T.
5107 // In particular, examines the constraint expressions to find members of T.
5108 //
5109 // The design is very simple: we walk down each constraint looking for
5110 // expressions of the form T.foo().
5111 // If we're extra lucky, the return type is specified.
5112 // We don't do any clever handling of && or || in constraint expressions, we
5113 // take members from both branches.
5114 //
5115 // For example, given:
5116 //   template <class T> concept X = requires (T t, string& s) { t.print(s); };
5117 //   template <X U> void foo(U u) { u.^ }
5118 // We want to suggest the inferred member function 'print(string)'.
5119 // We see that u has type U, so X<U> holds.
5120 // X<U> requires t.print(s) to be valid, where t has type U (substituted for T).
5121 // By looking at the CallExpr we find the signature of print().
5122 //
5123 // While we tend to know in advance which kind of members (access via . -> ::)
5124 // we want, it's simpler just to gather them all and post-filter.
5125 //
5126 // FIXME: some of this machinery could be used for non-concept type-parms too,
5127 // enabling completion for type parameters based on other uses of that param.
5128 //
5129 // FIXME: there are other cases where a type can be constrained by a concept,
5130 // e.g. inside `if constexpr(ConceptSpecializationExpr) { ... }`
5131 class ConceptInfo {
5132 public:
5133   // Describes a likely member of a type, inferred by concept constraints.
5134   // Offered as a code completion for T. T-> and T:: contexts.
5135   struct Member {
5136     // Always non-null: we only handle members with ordinary identifier names.
5137     const IdentifierInfo *Name = nullptr;
5138     // Set for functions we've seen called.
5139     // We don't have the declared parameter types, only the actual types of
5140     // arguments we've seen. These are still valuable, as it's hard to render
5141     // a useful function completion with neither parameter types nor names!
5142     llvm::Optional<SmallVector<QualType, 1>> ArgTypes;
5143     // Whether this is accessed as T.member, T->member, or T::member.
5144     enum AccessOperator {
5145       Colons,
5146       Arrow,
5147       Dot,
5148     } Operator = Dot;
5149     // What's known about the type of a variable or return type of a function.
5150     const TypeConstraint *ResultType = nullptr;
5151     // FIXME: also track:
5152     //   - kind of entity (function/variable/type), to expose structured results
5153     //   - template args kinds/types, as a proxy for template params
5154 
5155     // For now we simply return these results as "pattern" strings.
5156     CodeCompletionString *render(Sema &S, CodeCompletionAllocator &Alloc,
5157                                  CodeCompletionTUInfo &Info) const {
5158       CodeCompletionBuilder B(Alloc, Info);
5159       // Result type
5160       if (ResultType) {
5161         std::string AsString;
5162         {
5163           llvm::raw_string_ostream OS(AsString);
5164           QualType ExactType = deduceType(*ResultType);
5165           if (!ExactType.isNull())
5166             ExactType.print(OS, getCompletionPrintingPolicy(S));
5167           else
5168             ResultType->print(OS, getCompletionPrintingPolicy(S));
5169         }
5170         B.AddResultTypeChunk(Alloc.CopyString(AsString));
5171       }
5172       // Member name
5173       B.AddTypedTextChunk(Alloc.CopyString(Name->getName()));
5174       // Function argument list
5175       if (ArgTypes) {
5176         B.AddChunk(clang::CodeCompletionString::CK_LeftParen);
5177         bool First = true;
5178         for (QualType Arg : *ArgTypes) {
5179           if (First)
5180             First = false;
5181           else {
5182             B.AddChunk(clang::CodeCompletionString::CK_Comma);
5183             B.AddChunk(clang::CodeCompletionString::CK_HorizontalSpace);
5184           }
5185           B.AddPlaceholderChunk(Alloc.CopyString(
5186               Arg.getAsString(getCompletionPrintingPolicy(S))));
5187         }
5188         B.AddChunk(clang::CodeCompletionString::CK_RightParen);
5189       }
5190       return B.TakeString();
5191     }
5192   };
5193 
5194   // BaseType is the type parameter T to infer members from.
5195   // T must be accessible within S, as we use it to find the template entity
5196   // that T is attached to in order to gather the relevant constraints.
5197   ConceptInfo(const TemplateTypeParmType &BaseType, Scope *S) {
5198     auto *TemplatedEntity = getTemplatedEntity(BaseType.getDecl(), S);
5199     for (const Expr *E : constraintsForTemplatedEntity(TemplatedEntity))
5200       believe(E, &BaseType);
5201   }
5202 
5203   std::vector<Member> members() {
5204     std::vector<Member> Results;
5205     for (const auto &E : this->Results)
5206       Results.push_back(E.second);
5207     llvm::sort(Results, [](const Member &L, const Member &R) {
5208       return L.Name->getName() < R.Name->getName();
5209     });
5210     return Results;
5211   }
5212 
5213 private:
5214   // Infer members of T, given that the expression E (dependent on T) is true.
5215   void believe(const Expr *E, const TemplateTypeParmType *T) {
5216     if (!E || !T)
5217       return;
5218     if (auto *CSE = dyn_cast<ConceptSpecializationExpr>(E)) {
5219       // If the concept is
5220       //   template <class A, class B> concept CD = f<A, B>();
5221       // And the concept specialization is
5222       //   CD<int, T>
5223       // Then we're substituting T for B, so we want to make f<A, B>() true
5224       // by adding members to B - i.e. believe(f<A, B>(), B);
5225       //
5226       // For simplicity:
5227       // - we don't attempt to substitute int for A
5228       // - when T is used in other ways (like CD<T*>) we ignore it
5229       ConceptDecl *CD = CSE->getNamedConcept();
5230       TemplateParameterList *Params = CD->getTemplateParameters();
5231       unsigned Index = 0;
5232       for (const auto &Arg : CSE->getTemplateArguments()) {
5233         if (Index >= Params->size())
5234           break; // Won't happen in valid code.
5235         if (isApprox(Arg, T)) {
5236           auto *TTPD = dyn_cast<TemplateTypeParmDecl>(Params->getParam(Index));
5237           if (!TTPD)
5238             continue;
5239           // T was used as an argument, and bound to the parameter TT.
5240           auto *TT = cast<TemplateTypeParmType>(TTPD->getTypeForDecl());
5241           // So now we know the constraint as a function of TT is true.
5242           believe(CD->getConstraintExpr(), TT);
5243           // (concepts themselves have no associated constraints to require)
5244         }
5245 
5246         ++Index;
5247       }
5248     } else if (auto *BO = dyn_cast<BinaryOperator>(E)) {
5249       // For A && B, we can infer members from both branches.
5250       // For A || B, the union is still more useful than the intersection.
5251       if (BO->getOpcode() == BO_LAnd || BO->getOpcode() == BO_LOr) {
5252         believe(BO->getLHS(), T);
5253         believe(BO->getRHS(), T);
5254       }
5255     } else if (auto *RE = dyn_cast<RequiresExpr>(E)) {
5256       // A requires(){...} lets us infer members from each requirement.
5257       for (const concepts::Requirement *Req : RE->getRequirements()) {
5258         if (!Req->isDependent())
5259           continue; // Can't tell us anything about T.
5260         // Now Req cannot a substitution-error: those aren't dependent.
5261 
5262         if (auto *TR = dyn_cast<concepts::TypeRequirement>(Req)) {
5263           // Do a full traversal so we get `foo` from `typename T::foo::bar`.
5264           QualType AssertedType = TR->getType()->getType();
5265           ValidVisitor(this, T).TraverseType(AssertedType);
5266         } else if (auto *ER = dyn_cast<concepts::ExprRequirement>(Req)) {
5267           ValidVisitor Visitor(this, T);
5268           // If we have a type constraint on the value of the expression,
5269           // AND the whole outer expression describes a member, then we'll
5270           // be able to use the constraint to provide the return type.
5271           if (ER->getReturnTypeRequirement().isTypeConstraint()) {
5272             Visitor.OuterType =
5273                 ER->getReturnTypeRequirement().getTypeConstraint();
5274             Visitor.OuterExpr = ER->getExpr();
5275           }
5276           Visitor.TraverseStmt(ER->getExpr());
5277         } else if (auto *NR = dyn_cast<concepts::NestedRequirement>(Req)) {
5278           believe(NR->getConstraintExpr(), T);
5279         }
5280       }
5281     }
5282   }
5283 
5284   // This visitor infers members of T based on traversing expressions/types
5285   // that involve T. It is invoked with code known to be valid for T.
5286   class ValidVisitor : public RecursiveASTVisitor<ValidVisitor> {
5287     ConceptInfo *Outer;
5288     const TemplateTypeParmType *T;
5289 
5290     CallExpr *Caller = nullptr;
5291     Expr *Callee = nullptr;
5292 
5293   public:
5294     // If set, OuterExpr is constrained by OuterType.
5295     Expr *OuterExpr = nullptr;
5296     const TypeConstraint *OuterType = nullptr;
5297 
5298     ValidVisitor(ConceptInfo *Outer, const TemplateTypeParmType *T)
5299         : Outer(Outer), T(T) {
5300       assert(T);
5301     }
5302 
5303     // In T.foo or T->foo, `foo` is a member function/variable.
5304     bool VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E) {
5305       const Type *Base = E->getBaseType().getTypePtr();
5306       bool IsArrow = E->isArrow();
5307       if (Base->isPointerType() && IsArrow) {
5308         IsArrow = false;
5309         Base = Base->getPointeeType().getTypePtr();
5310       }
5311       if (isApprox(Base, T))
5312         addValue(E, E->getMember(), IsArrow ? Member::Arrow : Member::Dot);
5313       return true;
5314     }
5315 
5316     // In T::foo, `foo` is a static member function/variable.
5317     bool VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) {
5318       if (E->getQualifier() && isApprox(E->getQualifier()->getAsType(), T))
5319         addValue(E, E->getDeclName(), Member::Colons);
5320       return true;
5321     }
5322 
5323     // In T::typename foo, `foo` is a type.
5324     bool VisitDependentNameType(DependentNameType *DNT) {
5325       const auto *Q = DNT->getQualifier();
5326       if (Q && isApprox(Q->getAsType(), T))
5327         addType(DNT->getIdentifier());
5328       return true;
5329     }
5330 
5331     // In T::foo::bar, `foo` must be a type.
5332     // VisitNNS() doesn't exist, and TraverseNNS isn't always called :-(
5333     bool TraverseNestedNameSpecifierLoc(NestedNameSpecifierLoc NNSL) {
5334       if (NNSL) {
5335         NestedNameSpecifier *NNS = NNSL.getNestedNameSpecifier();
5336         const auto *Q = NNS->getPrefix();
5337         if (Q && isApprox(Q->getAsType(), T))
5338           addType(NNS->getAsIdentifier());
5339       }
5340       // FIXME: also handle T::foo<X>::bar
5341       return RecursiveASTVisitor::TraverseNestedNameSpecifierLoc(NNSL);
5342     }
5343 
5344     // FIXME also handle T::foo<X>
5345 
5346     // Track the innermost caller/callee relationship so we can tell if a
5347     // nested expr is being called as a function.
5348     bool VisitCallExpr(CallExpr *CE) {
5349       Caller = CE;
5350       Callee = CE->getCallee();
5351       return true;
5352     }
5353 
5354   private:
5355     void addResult(Member &&M) {
5356       auto R = Outer->Results.try_emplace(M.Name);
5357       Member &O = R.first->second;
5358       // Overwrite existing if the new member has more info.
5359       // The preference of . vs :: vs -> is fairly arbitrary.
5360       if (/*Inserted*/ R.second ||
5361           std::make_tuple(M.ArgTypes.hasValue(), M.ResultType != nullptr,
5362                           M.Operator) > std::make_tuple(O.ArgTypes.hasValue(),
5363                                                         O.ResultType != nullptr,
5364                                                         O.Operator))
5365         O = std::move(M);
5366     }
5367 
5368     void addType(const IdentifierInfo *Name) {
5369       if (!Name)
5370         return;
5371       Member M;
5372       M.Name = Name;
5373       M.Operator = Member::Colons;
5374       addResult(std::move(M));
5375     }
5376 
5377     void addValue(Expr *E, DeclarationName Name,
5378                   Member::AccessOperator Operator) {
5379       if (!Name.isIdentifier())
5380         return;
5381       Member Result;
5382       Result.Name = Name.getAsIdentifierInfo();
5383       Result.Operator = Operator;
5384       // If this is the callee of an immediately-enclosing CallExpr, then
5385       // treat it as a method, otherwise it's a variable.
5386       if (Caller != nullptr && Callee == E) {
5387         Result.ArgTypes.emplace();
5388         for (const auto *Arg : Caller->arguments())
5389           Result.ArgTypes->push_back(Arg->getType());
5390         if (Caller == OuterExpr) {
5391           Result.ResultType = OuterType;
5392         }
5393       } else {
5394         if (E == OuterExpr)
5395           Result.ResultType = OuterType;
5396       }
5397       addResult(std::move(Result));
5398     }
5399   };
5400 
5401   static bool isApprox(const TemplateArgument &Arg, const Type *T) {
5402     return Arg.getKind() == TemplateArgument::Type &&
5403            isApprox(Arg.getAsType().getTypePtr(), T);
5404   }
5405 
5406   static bool isApprox(const Type *T1, const Type *T2) {
5407     return T1 && T2 &&
5408            T1->getCanonicalTypeUnqualified() ==
5409                T2->getCanonicalTypeUnqualified();
5410   }
5411 
5412   // Returns the DeclContext immediately enclosed by the template parameter
5413   // scope. For primary templates, this is the templated (e.g.) CXXRecordDecl.
5414   // For specializations, this is e.g. ClassTemplatePartialSpecializationDecl.
5415   static DeclContext *getTemplatedEntity(const TemplateTypeParmDecl *D,
5416                                          Scope *S) {
5417     if (D == nullptr)
5418       return nullptr;
5419     Scope *Inner = nullptr;
5420     while (S) {
5421       if (S->isTemplateParamScope() && S->isDeclScope(D))
5422         return Inner ? Inner->getEntity() : nullptr;
5423       Inner = S;
5424       S = S->getParent();
5425     }
5426     return nullptr;
5427   }
5428 
5429   // Gets all the type constraint expressions that might apply to the type
5430   // variables associated with DC (as returned by getTemplatedEntity()).
5431   static SmallVector<const Expr *, 1>
5432   constraintsForTemplatedEntity(DeclContext *DC) {
5433     SmallVector<const Expr *, 1> Result;
5434     if (DC == nullptr)
5435       return Result;
5436     // Primary templates can have constraints.
5437     if (const auto *TD = cast<Decl>(DC)->getDescribedTemplate())
5438       TD->getAssociatedConstraints(Result);
5439     // Partial specializations may have constraints.
5440     if (const auto *CTPSD =
5441             dyn_cast<ClassTemplatePartialSpecializationDecl>(DC))
5442       CTPSD->getAssociatedConstraints(Result);
5443     if (const auto *VTPSD = dyn_cast<VarTemplatePartialSpecializationDecl>(DC))
5444       VTPSD->getAssociatedConstraints(Result);
5445     return Result;
5446   }
5447 
5448   // Attempt to find the unique type satisfying a constraint.
5449   // This lets us show e.g. `int` instead of `std::same_as<int>`.
5450   static QualType deduceType(const TypeConstraint &T) {
5451     // Assume a same_as<T> return type constraint is std::same_as or equivalent.
5452     // In this case the return type is T.
5453     DeclarationName DN = T.getNamedConcept()->getDeclName();
5454     if (DN.isIdentifier() && DN.getAsIdentifierInfo()->isStr("same_as"))
5455       if (const auto *Args = T.getTemplateArgsAsWritten())
5456         if (Args->getNumTemplateArgs() == 1) {
5457           const auto &Arg = Args->arguments().front().getArgument();
5458           if (Arg.getKind() == TemplateArgument::Type)
5459             return Arg.getAsType();
5460         }
5461     return {};
5462   }
5463 
5464   llvm::DenseMap<const IdentifierInfo *, Member> Results;
5465 };
5466 
5467 // Returns a type for E that yields acceptable member completions.
5468 // In particular, when E->getType() is DependentTy, try to guess a likely type.
5469 // We accept some lossiness (like dropping parameters).
5470 // We only try to handle common expressions on the LHS of MemberExpr.
5471 QualType getApproximateType(const Expr *E) {
5472   QualType Unresolved = E->getType();
5473   if (Unresolved.isNull() ||
5474       !Unresolved->isSpecificBuiltinType(BuiltinType::Dependent))
5475     return Unresolved;
5476   E = E->IgnoreParens();
5477   // A call: approximate-resolve callee to a function type, get its return type
5478   if (const CallExpr *CE = llvm::dyn_cast<CallExpr>(E)) {
5479     QualType Callee = getApproximateType(CE->getCallee());
5480     if (Callee.isNull() ||
5481         Callee->isSpecificPlaceholderType(BuiltinType::BoundMember))
5482       Callee = Expr::findBoundMemberType(CE->getCallee());
5483     if (Callee.isNull())
5484       return Unresolved;
5485 
5486     if (const auto *FnTypePtr = Callee->getAs<PointerType>()) {
5487       Callee = FnTypePtr->getPointeeType();
5488     } else if (const auto *BPT = Callee->getAs<BlockPointerType>()) {
5489       Callee = BPT->getPointeeType();
5490     }
5491     if (const FunctionType *FnType = Callee->getAs<FunctionType>())
5492       return FnType->getReturnType().getNonReferenceType();
5493 
5494     // Unresolved call: try to guess the return type.
5495     if (const auto *OE = llvm::dyn_cast<OverloadExpr>(CE->getCallee())) {
5496       // If all candidates have the same approximate return type, use it.
5497       // Discard references and const to allow more to be "the same".
5498       // (In particular, if there's one candidate + ADL, resolve it).
5499       const Type *Common = nullptr;
5500       for (const auto *D : OE->decls()) {
5501         QualType ReturnType;
5502         if (const auto *FD = llvm::dyn_cast<FunctionDecl>(D))
5503           ReturnType = FD->getReturnType();
5504         else if (const auto *FTD = llvm::dyn_cast<FunctionTemplateDecl>(D))
5505           ReturnType = FTD->getTemplatedDecl()->getReturnType();
5506         if (ReturnType.isNull())
5507           continue;
5508         const Type *Candidate =
5509             ReturnType.getNonReferenceType().getCanonicalType().getTypePtr();
5510         if (Common && Common != Candidate)
5511           return Unresolved; // Multiple candidates.
5512         Common = Candidate;
5513       }
5514       if (Common != nullptr)
5515         return QualType(Common, 0);
5516     }
5517   }
5518   // A dependent member: approximate-resolve the base, then lookup.
5519   if (const auto *CDSME = llvm::dyn_cast<CXXDependentScopeMemberExpr>(E)) {
5520     QualType Base = CDSME->isImplicitAccess()
5521                         ? CDSME->getBaseType()
5522                         : getApproximateType(CDSME->getBase());
5523     if (CDSME->isArrow() && !Base.isNull())
5524       Base = Base->getPointeeType(); // could handle unique_ptr etc here?
5525     auto *RD =
5526         Base.isNull()
5527             ? nullptr
5528             : llvm::dyn_cast_or_null<CXXRecordDecl>(getAsRecordDecl(Base));
5529     if (RD && RD->isCompleteDefinition()) {
5530       // Look up member heuristically, including in bases.
5531       for (const auto *Member : RD->lookupDependentName(
5532                CDSME->getMember(), [](const NamedDecl *Member) {
5533                  return llvm::isa<ValueDecl>(Member);
5534                })) {
5535         return llvm::cast<ValueDecl>(Member)->getType().getNonReferenceType();
5536       }
5537     }
5538   }
5539   return Unresolved;
5540 }
5541 
5542 // If \p Base is ParenListExpr, assume a chain of comma operators and pick the
5543 // last expr. We expect other ParenListExprs to be resolved to e.g. constructor
5544 // calls before here. (So the ParenListExpr should be nonempty, but check just
5545 // in case)
5546 Expr *unwrapParenList(Expr *Base) {
5547   if (auto *PLE = llvm::dyn_cast_or_null<ParenListExpr>(Base)) {
5548     if (PLE->getNumExprs() == 0)
5549       return nullptr;
5550     Base = PLE->getExpr(PLE->getNumExprs() - 1);
5551   }
5552   return Base;
5553 }
5554 
5555 } // namespace
5556 
5557 void Sema::CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
5558                                            Expr *OtherOpBase,
5559                                            SourceLocation OpLoc, bool IsArrow,
5560                                            bool IsBaseExprStatement,
5561                                            QualType PreferredType) {
5562   Base = unwrapParenList(Base);
5563   OtherOpBase = unwrapParenList(OtherOpBase);
5564   if (!Base || !CodeCompleter)
5565     return;
5566 
5567   ExprResult ConvertedBase = PerformMemberExprBaseConversion(Base, IsArrow);
5568   if (ConvertedBase.isInvalid())
5569     return;
5570   QualType ConvertedBaseType = getApproximateType(ConvertedBase.get());
5571 
5572   enum CodeCompletionContext::Kind contextKind;
5573 
5574   if (IsArrow) {
5575     if (const auto *Ptr = ConvertedBaseType->getAs<PointerType>())
5576       ConvertedBaseType = Ptr->getPointeeType();
5577   }
5578 
5579   if (IsArrow) {
5580     contextKind = CodeCompletionContext::CCC_ArrowMemberAccess;
5581   } else {
5582     if (ConvertedBaseType->isObjCObjectPointerType() ||
5583         ConvertedBaseType->isObjCObjectOrInterfaceType()) {
5584       contextKind = CodeCompletionContext::CCC_ObjCPropertyAccess;
5585     } else {
5586       contextKind = CodeCompletionContext::CCC_DotMemberAccess;
5587     }
5588   }
5589 
5590   CodeCompletionContext CCContext(contextKind, ConvertedBaseType);
5591   CCContext.setPreferredType(PreferredType);
5592   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5593                         CodeCompleter->getCodeCompletionTUInfo(), CCContext,
5594                         &ResultBuilder::IsMember);
5595 
5596   auto DoCompletion = [&](Expr *Base, bool IsArrow,
5597                           Optional<FixItHint> AccessOpFixIt) -> bool {
5598     if (!Base)
5599       return false;
5600 
5601     ExprResult ConvertedBase = PerformMemberExprBaseConversion(Base, IsArrow);
5602     if (ConvertedBase.isInvalid())
5603       return false;
5604     Base = ConvertedBase.get();
5605 
5606     QualType BaseType = getApproximateType(Base);
5607     if (BaseType.isNull())
5608       return false;
5609     ExprValueKind BaseKind = Base->getValueKind();
5610 
5611     if (IsArrow) {
5612       if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
5613         BaseType = Ptr->getPointeeType();
5614         BaseKind = VK_LValue;
5615       } else if (BaseType->isObjCObjectPointerType() ||
5616                  BaseType->isTemplateTypeParmType()) {
5617         // Both cases (dot/arrow) handled below.
5618       } else {
5619         return false;
5620       }
5621     }
5622 
5623     if (RecordDecl *RD = getAsRecordDecl(BaseType)) {
5624       AddRecordMembersCompletionResults(*this, Results, S, BaseType, BaseKind,
5625                                         RD, std::move(AccessOpFixIt));
5626     } else if (const auto *TTPT =
5627                    dyn_cast<TemplateTypeParmType>(BaseType.getTypePtr())) {
5628       auto Operator =
5629           IsArrow ? ConceptInfo::Member::Arrow : ConceptInfo::Member::Dot;
5630       for (const auto &R : ConceptInfo(*TTPT, S).members()) {
5631         if (R.Operator != Operator)
5632           continue;
5633         CodeCompletionResult Result(
5634             R.render(*this, CodeCompleter->getAllocator(),
5635                      CodeCompleter->getCodeCompletionTUInfo()));
5636         if (AccessOpFixIt)
5637           Result.FixIts.push_back(*AccessOpFixIt);
5638         Results.AddResult(std::move(Result));
5639       }
5640     } else if (!IsArrow && BaseType->isObjCObjectPointerType()) {
5641       // Objective-C property reference. Bail if we're performing fix-it code
5642       // completion since Objective-C properties are normally backed by ivars,
5643       // most Objective-C fix-its here would have little value.
5644       if (AccessOpFixIt.hasValue()) {
5645         return false;
5646       }
5647       AddedPropertiesSet AddedProperties;
5648 
5649       if (const ObjCObjectPointerType *ObjCPtr =
5650               BaseType->getAsObjCInterfacePointerType()) {
5651         // Add property results based on our interface.
5652         assert(ObjCPtr && "Non-NULL pointer guaranteed above!");
5653         AddObjCProperties(CCContext, ObjCPtr->getInterfaceDecl(), true,
5654                           /*AllowNullaryMethods=*/true, CurContext,
5655                           AddedProperties, Results, IsBaseExprStatement);
5656       }
5657 
5658       // Add properties from the protocols in a qualified interface.
5659       for (auto *I : BaseType->castAs<ObjCObjectPointerType>()->quals())
5660         AddObjCProperties(CCContext, I, true, /*AllowNullaryMethods=*/true,
5661                           CurContext, AddedProperties, Results,
5662                           IsBaseExprStatement, /*IsClassProperty*/ false,
5663                           /*InOriginalClass*/ false);
5664     } else if ((IsArrow && BaseType->isObjCObjectPointerType()) ||
5665                (!IsArrow && BaseType->isObjCObjectType())) {
5666       // Objective-C instance variable access. Bail if we're performing fix-it
5667       // code completion since Objective-C properties are normally backed by
5668       // ivars, most Objective-C fix-its here would have little value.
5669       if (AccessOpFixIt.hasValue()) {
5670         return false;
5671       }
5672       ObjCInterfaceDecl *Class = nullptr;
5673       if (const ObjCObjectPointerType *ObjCPtr =
5674               BaseType->getAs<ObjCObjectPointerType>())
5675         Class = ObjCPtr->getInterfaceDecl();
5676       else
5677         Class = BaseType->castAs<ObjCObjectType>()->getInterface();
5678 
5679       // Add all ivars from this class and its superclasses.
5680       if (Class) {
5681         CodeCompletionDeclConsumer Consumer(Results, Class, BaseType);
5682         Results.setFilter(&ResultBuilder::IsObjCIvar);
5683         LookupVisibleDecls(
5684             Class, LookupMemberName, Consumer, CodeCompleter->includeGlobals(),
5685             /*IncludeDependentBases=*/false, CodeCompleter->loadExternal());
5686       }
5687     }
5688 
5689     // FIXME: How do we cope with isa?
5690     return true;
5691   };
5692 
5693   Results.EnterNewScope();
5694 
5695   bool CompletionSucceded = DoCompletion(Base, IsArrow, None);
5696   if (CodeCompleter->includeFixIts()) {
5697     const CharSourceRange OpRange =
5698         CharSourceRange::getTokenRange(OpLoc, OpLoc);
5699     CompletionSucceded |= DoCompletion(
5700         OtherOpBase, !IsArrow,
5701         FixItHint::CreateReplacement(OpRange, IsArrow ? "." : "->"));
5702   }
5703 
5704   Results.ExitScope();
5705 
5706   if (!CompletionSucceded)
5707     return;
5708 
5709   // Hand off the results found for code completion.
5710   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5711                             Results.data(), Results.size());
5712 }
5713 
5714 void Sema::CodeCompleteObjCClassPropertyRefExpr(Scope *S,
5715                                                 IdentifierInfo &ClassName,
5716                                                 SourceLocation ClassNameLoc,
5717                                                 bool IsBaseExprStatement) {
5718   IdentifierInfo *ClassNamePtr = &ClassName;
5719   ObjCInterfaceDecl *IFace = getObjCInterfaceDecl(ClassNamePtr, ClassNameLoc);
5720   if (!IFace)
5721     return;
5722   CodeCompletionContext CCContext(
5723       CodeCompletionContext::CCC_ObjCPropertyAccess);
5724   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5725                         CodeCompleter->getCodeCompletionTUInfo(), CCContext,
5726                         &ResultBuilder::IsMember);
5727   Results.EnterNewScope();
5728   AddedPropertiesSet AddedProperties;
5729   AddObjCProperties(CCContext, IFace, true,
5730                     /*AllowNullaryMethods=*/true, CurContext, AddedProperties,
5731                     Results, IsBaseExprStatement,
5732                     /*IsClassProperty=*/true);
5733   Results.ExitScope();
5734   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5735                             Results.data(), Results.size());
5736 }
5737 
5738 void Sema::CodeCompleteTag(Scope *S, unsigned TagSpec) {
5739   if (!CodeCompleter)
5740     return;
5741 
5742   ResultBuilder::LookupFilter Filter = nullptr;
5743   enum CodeCompletionContext::Kind ContextKind =
5744       CodeCompletionContext::CCC_Other;
5745   switch ((DeclSpec::TST)TagSpec) {
5746   case DeclSpec::TST_enum:
5747     Filter = &ResultBuilder::IsEnum;
5748     ContextKind = CodeCompletionContext::CCC_EnumTag;
5749     break;
5750 
5751   case DeclSpec::TST_union:
5752     Filter = &ResultBuilder::IsUnion;
5753     ContextKind = CodeCompletionContext::CCC_UnionTag;
5754     break;
5755 
5756   case DeclSpec::TST_struct:
5757   case DeclSpec::TST_class:
5758   case DeclSpec::TST_interface:
5759     Filter = &ResultBuilder::IsClassOrStruct;
5760     ContextKind = CodeCompletionContext::CCC_ClassOrStructTag;
5761     break;
5762 
5763   default:
5764     llvm_unreachable("Unknown type specifier kind in CodeCompleteTag");
5765   }
5766 
5767   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5768                         CodeCompleter->getCodeCompletionTUInfo(), ContextKind);
5769   CodeCompletionDeclConsumer Consumer(Results, CurContext);
5770 
5771   // First pass: look for tags.
5772   Results.setFilter(Filter);
5773   LookupVisibleDecls(S, LookupTagName, Consumer,
5774                      CodeCompleter->includeGlobals(),
5775                      CodeCompleter->loadExternal());
5776 
5777   if (CodeCompleter->includeGlobals()) {
5778     // Second pass: look for nested name specifiers.
5779     Results.setFilter(&ResultBuilder::IsNestedNameSpecifier);
5780     LookupVisibleDecls(S, LookupNestedNameSpecifierName, Consumer,
5781                        CodeCompleter->includeGlobals(),
5782                        CodeCompleter->loadExternal());
5783   }
5784 
5785   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5786                             Results.data(), Results.size());
5787 }
5788 
5789 static void AddTypeQualifierResults(DeclSpec &DS, ResultBuilder &Results,
5790                                     const LangOptions &LangOpts) {
5791   if (!(DS.getTypeQualifiers() & DeclSpec::TQ_const))
5792     Results.AddResult("const");
5793   if (!(DS.getTypeQualifiers() & DeclSpec::TQ_volatile))
5794     Results.AddResult("volatile");
5795   if (LangOpts.C99 && !(DS.getTypeQualifiers() & DeclSpec::TQ_restrict))
5796     Results.AddResult("restrict");
5797   if (LangOpts.C11 && !(DS.getTypeQualifiers() & DeclSpec::TQ_atomic))
5798     Results.AddResult("_Atomic");
5799   if (LangOpts.MSVCCompat && !(DS.getTypeQualifiers() & DeclSpec::TQ_unaligned))
5800     Results.AddResult("__unaligned");
5801 }
5802 
5803 void Sema::CodeCompleteTypeQualifiers(DeclSpec &DS) {
5804   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5805                         CodeCompleter->getCodeCompletionTUInfo(),
5806                         CodeCompletionContext::CCC_TypeQualifiers);
5807   Results.EnterNewScope();
5808   AddTypeQualifierResults(DS, Results, LangOpts);
5809   Results.ExitScope();
5810   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5811                             Results.data(), Results.size());
5812 }
5813 
5814 void Sema::CodeCompleteFunctionQualifiers(DeclSpec &DS, Declarator &D,
5815                                           const VirtSpecifiers *VS) {
5816   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5817                         CodeCompleter->getCodeCompletionTUInfo(),
5818                         CodeCompletionContext::CCC_TypeQualifiers);
5819   Results.EnterNewScope();
5820   AddTypeQualifierResults(DS, Results, LangOpts);
5821   if (LangOpts.CPlusPlus11) {
5822     Results.AddResult("noexcept");
5823     if (D.getContext() == DeclaratorContext::Member && !D.isCtorOrDtor() &&
5824         !D.isStaticMember()) {
5825       if (!VS || !VS->isFinalSpecified())
5826         Results.AddResult("final");
5827       if (!VS || !VS->isOverrideSpecified())
5828         Results.AddResult("override");
5829     }
5830   }
5831   Results.ExitScope();
5832   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5833                             Results.data(), Results.size());
5834 }
5835 
5836 void Sema::CodeCompleteBracketDeclarator(Scope *S) {
5837   CodeCompleteExpression(S, QualType(getASTContext().getSizeType()));
5838 }
5839 
5840 void Sema::CodeCompleteCase(Scope *S) {
5841   if (getCurFunction()->SwitchStack.empty() || !CodeCompleter)
5842     return;
5843 
5844   SwitchStmt *Switch = getCurFunction()->SwitchStack.back().getPointer();
5845   // Condition expression might be invalid, do not continue in this case.
5846   if (!Switch->getCond())
5847     return;
5848   QualType type = Switch->getCond()->IgnoreImplicit()->getType();
5849   if (!type->isEnumeralType()) {
5850     CodeCompleteExpressionData Data(type);
5851     Data.IntegralConstantExpression = true;
5852     CodeCompleteExpression(S, Data);
5853     return;
5854   }
5855 
5856   // Code-complete the cases of a switch statement over an enumeration type
5857   // by providing the list of
5858   EnumDecl *Enum = type->castAs<EnumType>()->getDecl();
5859   if (EnumDecl *Def = Enum->getDefinition())
5860     Enum = Def;
5861 
5862   // Determine which enumerators we have already seen in the switch statement.
5863   // FIXME: Ideally, we would also be able to look *past* the code-completion
5864   // token, in case we are code-completing in the middle of the switch and not
5865   // at the end. However, we aren't able to do so at the moment.
5866   CoveredEnumerators Enumerators;
5867   for (SwitchCase *SC = Switch->getSwitchCaseList(); SC;
5868        SC = SC->getNextSwitchCase()) {
5869     CaseStmt *Case = dyn_cast<CaseStmt>(SC);
5870     if (!Case)
5871       continue;
5872 
5873     Expr *CaseVal = Case->getLHS()->IgnoreParenCasts();
5874     if (auto *DRE = dyn_cast<DeclRefExpr>(CaseVal))
5875       if (auto *Enumerator =
5876               dyn_cast<EnumConstantDecl>(DRE->getDecl())) {
5877         // We look into the AST of the case statement to determine which
5878         // enumerator was named. Alternatively, we could compute the value of
5879         // the integral constant expression, then compare it against the
5880         // values of each enumerator. However, value-based approach would not
5881         // work as well with C++ templates where enumerators declared within a
5882         // template are type- and value-dependent.
5883         Enumerators.Seen.insert(Enumerator);
5884 
5885         // If this is a qualified-id, keep track of the nested-name-specifier
5886         // so that we can reproduce it as part of code completion, e.g.,
5887         //
5888         //   switch (TagD.getKind()) {
5889         //     case TagDecl::TK_enum:
5890         //       break;
5891         //     case XXX
5892         //
5893         // At the XXX, our completions are TagDecl::TK_union,
5894         // TagDecl::TK_struct, and TagDecl::TK_class, rather than TK_union,
5895         // TK_struct, and TK_class.
5896         Enumerators.SuggestedQualifier = DRE->getQualifier();
5897       }
5898   }
5899 
5900   // Add any enumerators that have not yet been mentioned.
5901   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5902                         CodeCompleter->getCodeCompletionTUInfo(),
5903                         CodeCompletionContext::CCC_Expression);
5904   AddEnumerators(Results, Context, Enum, CurContext, Enumerators);
5905 
5906   if (CodeCompleter->includeMacros()) {
5907     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
5908   }
5909   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5910                             Results.data(), Results.size());
5911 }
5912 
5913 static bool anyNullArguments(ArrayRef<Expr *> Args) {
5914   if (Args.size() && !Args.data())
5915     return true;
5916 
5917   for (unsigned I = 0; I != Args.size(); ++I)
5918     if (!Args[I])
5919       return true;
5920 
5921   return false;
5922 }
5923 
5924 typedef CodeCompleteConsumer::OverloadCandidate ResultCandidate;
5925 
5926 static void mergeCandidatesWithResults(
5927     Sema &SemaRef, SmallVectorImpl<ResultCandidate> &Results,
5928     OverloadCandidateSet &CandidateSet, SourceLocation Loc, size_t ArgSize) {
5929   // Sort the overload candidate set by placing the best overloads first.
5930   llvm::stable_sort(CandidateSet, [&](const OverloadCandidate &X,
5931                                       const OverloadCandidate &Y) {
5932     return isBetterOverloadCandidate(SemaRef, X, Y, Loc,
5933                                      CandidateSet.getKind());
5934   });
5935 
5936   // Add the remaining viable overload candidates as code-completion results.
5937   for (OverloadCandidate &Candidate : CandidateSet) {
5938     if (Candidate.Function) {
5939       if (Candidate.Function->isDeleted())
5940         continue;
5941       if (shouldEnforceArgLimit(/*PartialOverloading=*/true,
5942                                 Candidate.Function) &&
5943           Candidate.Function->getNumParams() <= ArgSize &&
5944           // Having zero args is annoying, normally we don't surface a function
5945           // with 2 params, if you already have 2 params, because you are
5946           // inserting the 3rd now. But with zero, it helps the user to figure
5947           // out there are no overloads that take any arguments. Hence we are
5948           // keeping the overload.
5949           ArgSize > 0)
5950         continue;
5951     }
5952     if (Candidate.Viable)
5953       Results.push_back(ResultCandidate(Candidate.Function));
5954   }
5955 }
5956 
5957 /// Get the type of the Nth parameter from a given set of overload
5958 /// candidates.
5959 static QualType getParamType(Sema &SemaRef,
5960                              ArrayRef<ResultCandidate> Candidates, unsigned N) {
5961 
5962   // Given the overloads 'Candidates' for a function call matching all arguments
5963   // up to N, return the type of the Nth parameter if it is the same for all
5964   // overload candidates.
5965   QualType ParamType;
5966   for (auto &Candidate : Candidates) {
5967     QualType CandidateParamType = Candidate.getParamType(N);
5968     if (CandidateParamType.isNull())
5969       continue;
5970     if (ParamType.isNull()) {
5971       ParamType = CandidateParamType;
5972       continue;
5973     }
5974     if (!SemaRef.Context.hasSameUnqualifiedType(
5975             ParamType.getNonReferenceType(),
5976             CandidateParamType.getNonReferenceType()))
5977       // Two conflicting types, give up.
5978       return QualType();
5979   }
5980 
5981   return ParamType;
5982 }
5983 
5984 static QualType
5985 ProduceSignatureHelp(Sema &SemaRef, MutableArrayRef<ResultCandidate> Candidates,
5986                      unsigned CurrentArg, SourceLocation OpenParLoc,
5987                      bool Braced) {
5988   if (Candidates.empty())
5989     return QualType();
5990   if (SemaRef.getPreprocessor().isCodeCompletionReached())
5991     SemaRef.CodeCompleter->ProcessOverloadCandidates(
5992         SemaRef, CurrentArg, Candidates.data(), Candidates.size(), OpenParLoc,
5993         Braced);
5994   return getParamType(SemaRef, Candidates, CurrentArg);
5995 }
5996 
5997 QualType Sema::ProduceCallSignatureHelp(Expr *Fn, ArrayRef<Expr *> Args,
5998                                         SourceLocation OpenParLoc) {
5999   Fn = unwrapParenList(Fn);
6000   if (!CodeCompleter || !Fn)
6001     return QualType();
6002 
6003   // FIXME: Provide support for variadic template functions.
6004   // Ignore type-dependent call expressions entirely.
6005   if (Fn->isTypeDependent() || anyNullArguments(Args))
6006     return QualType();
6007   // In presence of dependent args we surface all possible signatures using the
6008   // non-dependent args in the prefix. Afterwards we do a post filtering to make
6009   // sure provided candidates satisfy parameter count restrictions.
6010   auto ArgsWithoutDependentTypes =
6011       Args.take_while([](Expr *Arg) { return !Arg->isTypeDependent(); });
6012 
6013   SmallVector<ResultCandidate, 8> Results;
6014 
6015   Expr *NakedFn = Fn->IgnoreParenCasts();
6016   // Build an overload candidate set based on the functions we find.
6017   SourceLocation Loc = Fn->getExprLoc();
6018   OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal);
6019 
6020   if (auto ULE = dyn_cast<UnresolvedLookupExpr>(NakedFn)) {
6021     AddOverloadedCallCandidates(ULE, ArgsWithoutDependentTypes, CandidateSet,
6022                                 /*PartialOverloading=*/true);
6023   } else if (auto UME = dyn_cast<UnresolvedMemberExpr>(NakedFn)) {
6024     TemplateArgumentListInfo TemplateArgsBuffer, *TemplateArgs = nullptr;
6025     if (UME->hasExplicitTemplateArgs()) {
6026       UME->copyTemplateArgumentsInto(TemplateArgsBuffer);
6027       TemplateArgs = &TemplateArgsBuffer;
6028     }
6029 
6030     // Add the base as first argument (use a nullptr if the base is implicit).
6031     SmallVector<Expr *, 12> ArgExprs(
6032         1, UME->isImplicitAccess() ? nullptr : UME->getBase());
6033     ArgExprs.append(ArgsWithoutDependentTypes.begin(),
6034                     ArgsWithoutDependentTypes.end());
6035     UnresolvedSet<8> Decls;
6036     Decls.append(UME->decls_begin(), UME->decls_end());
6037     const bool FirstArgumentIsBase = !UME->isImplicitAccess() && UME->getBase();
6038     AddFunctionCandidates(Decls, ArgExprs, CandidateSet, TemplateArgs,
6039                           /*SuppressUserConversions=*/false,
6040                           /*PartialOverloading=*/true, FirstArgumentIsBase);
6041   } else {
6042     FunctionDecl *FD = nullptr;
6043     if (auto *MCE = dyn_cast<MemberExpr>(NakedFn))
6044       FD = dyn_cast<FunctionDecl>(MCE->getMemberDecl());
6045     else if (auto *DRE = dyn_cast<DeclRefExpr>(NakedFn))
6046       FD = dyn_cast<FunctionDecl>(DRE->getDecl());
6047     if (FD) { // We check whether it's a resolved function declaration.
6048       if (!getLangOpts().CPlusPlus ||
6049           !FD->getType()->getAs<FunctionProtoType>())
6050         Results.push_back(ResultCandidate(FD));
6051       else
6052         AddOverloadCandidate(FD, DeclAccessPair::make(FD, FD->getAccess()),
6053                              ArgsWithoutDependentTypes, CandidateSet,
6054                              /*SuppressUserConversions=*/false,
6055                              /*PartialOverloading=*/true);
6056 
6057     } else if (auto DC = NakedFn->getType()->getAsCXXRecordDecl()) {
6058       // If expression's type is CXXRecordDecl, it may overload the function
6059       // call operator, so we check if it does and add them as candidates.
6060       // A complete type is needed to lookup for member function call operators.
6061       if (isCompleteType(Loc, NakedFn->getType())) {
6062         DeclarationName OpName =
6063             Context.DeclarationNames.getCXXOperatorName(OO_Call);
6064         LookupResult R(*this, OpName, Loc, LookupOrdinaryName);
6065         LookupQualifiedName(R, DC);
6066         R.suppressDiagnostics();
6067         SmallVector<Expr *, 12> ArgExprs(1, NakedFn);
6068         ArgExprs.append(ArgsWithoutDependentTypes.begin(),
6069                         ArgsWithoutDependentTypes.end());
6070         AddFunctionCandidates(R.asUnresolvedSet(), ArgExprs, CandidateSet,
6071                               /*ExplicitArgs=*/nullptr,
6072                               /*SuppressUserConversions=*/false,
6073                               /*PartialOverloading=*/true);
6074       }
6075     } else {
6076       // Lastly we check whether expression's type is function pointer or
6077       // function.
6078       QualType T = NakedFn->getType();
6079       if (!T->getPointeeType().isNull())
6080         T = T->getPointeeType();
6081 
6082       if (auto FP = T->getAs<FunctionProtoType>()) {
6083         if (!TooManyArguments(FP->getNumParams(),
6084                               ArgsWithoutDependentTypes.size(),
6085                               /*PartialOverloading=*/true) ||
6086             FP->isVariadic())
6087           Results.push_back(ResultCandidate(FP));
6088       } else if (auto FT = T->getAs<FunctionType>())
6089         // No prototype and declaration, it may be a K & R style function.
6090         Results.push_back(ResultCandidate(FT));
6091     }
6092   }
6093   mergeCandidatesWithResults(*this, Results, CandidateSet, Loc, Args.size());
6094   QualType ParamType = ProduceSignatureHelp(*this, Results, Args.size(),
6095                                             OpenParLoc, /*Braced=*/false);
6096   return !CandidateSet.empty() ? ParamType : QualType();
6097 }
6098 
6099 // Determine which param to continue aggregate initialization from after
6100 // a designated initializer.
6101 //
6102 // Given struct S { int a,b,c,d,e; }:
6103 //   after `S{.b=1,`       we want to suggest c to continue
6104 //   after `S{.b=1, 2,`    we continue with d (this is legal C and ext in C++)
6105 //   after `S{.b=1, .a=2,` we continue with b (this is legal C and ext in C++)
6106 //
6107 // Possible outcomes:
6108 //   - we saw a designator for a field, and continue from the returned index.
6109 //     Only aggregate initialization is allowed.
6110 //   - we saw a designator, but it was complex or we couldn't find the field.
6111 //     Only aggregate initialization is possible, but we can't assist with it.
6112 //     Returns an out-of-range index.
6113 //   - we saw no designators, just positional arguments.
6114 //     Returns None.
6115 static llvm::Optional<unsigned>
6116 getNextAggregateIndexAfterDesignatedInit(const ResultCandidate &Aggregate,
6117                                          ArrayRef<Expr *> Args) {
6118   static constexpr unsigned Invalid = std::numeric_limits<unsigned>::max();
6119   assert(Aggregate.getKind() == ResultCandidate::CK_Aggregate);
6120 
6121   // Look for designated initializers.
6122   // They're in their syntactic form, not yet resolved to fields.
6123   IdentifierInfo *DesignatedFieldName = nullptr;
6124   unsigned ArgsAfterDesignator = 0;
6125   for (const Expr *Arg : Args) {
6126     if (const auto *DIE = dyn_cast<DesignatedInitExpr>(Arg)) {
6127       if (DIE->size() == 1 && DIE->getDesignator(0)->isFieldDesignator()) {
6128         DesignatedFieldName = DIE->getDesignator(0)->getFieldName();
6129         ArgsAfterDesignator = 0;
6130       } else {
6131         return Invalid; // Complicated designator.
6132       }
6133     } else if (isa<DesignatedInitUpdateExpr>(Arg)) {
6134       return Invalid; // Unsupported.
6135     } else {
6136       ++ArgsAfterDesignator;
6137     }
6138   }
6139   if (!DesignatedFieldName)
6140     return llvm::None;
6141 
6142   // Find the index within the class's fields.
6143   // (Probing getParamDecl() directly would be quadratic in number of fields).
6144   unsigned DesignatedIndex = 0;
6145   const FieldDecl *DesignatedField = nullptr;
6146   for (const auto *Field : Aggregate.getAggregate()->fields()) {
6147     if (Field->getIdentifier() == DesignatedFieldName) {
6148       DesignatedField = Field;
6149       break;
6150     }
6151     ++DesignatedIndex;
6152   }
6153   if (!DesignatedField)
6154     return Invalid; // Designator referred to a missing field, give up.
6155 
6156   // Find the index within the aggregate (which may have leading bases).
6157   unsigned AggregateSize = Aggregate.getNumParams();
6158   while (DesignatedIndex < AggregateSize &&
6159          Aggregate.getParamDecl(DesignatedIndex) != DesignatedField)
6160     ++DesignatedIndex;
6161 
6162   // Continue from the index after the last named field.
6163   return DesignatedIndex + ArgsAfterDesignator + 1;
6164 }
6165 
6166 QualType Sema::ProduceConstructorSignatureHelp(QualType Type,
6167                                                SourceLocation Loc,
6168                                                ArrayRef<Expr *> Args,
6169                                                SourceLocation OpenParLoc,
6170                                                bool Braced) {
6171   if (!CodeCompleter)
6172     return QualType();
6173   SmallVector<ResultCandidate, 8> Results;
6174 
6175   // A complete type is needed to lookup for constructors.
6176   RecordDecl *RD =
6177       isCompleteType(Loc, Type) ? Type->getAsRecordDecl() : nullptr;
6178   if (!RD)
6179     return Type;
6180   CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD);
6181 
6182   // Consider aggregate initialization.
6183   // We don't check that types so far are correct.
6184   // We also don't handle C99/C++17 brace-elision, we assume init-list elements
6185   // are 1:1 with fields.
6186   // FIXME: it would be nice to support "unwrapping" aggregates that contain
6187   // a single subaggregate, like std::array<T, N> -> T __elements[N].
6188   if (Braced && !RD->isUnion() &&
6189       (!LangOpts.CPlusPlus || (CRD && CRD->isAggregate()))) {
6190     ResultCandidate AggregateSig(RD);
6191     unsigned AggregateSize = AggregateSig.getNumParams();
6192 
6193     if (auto NextIndex =
6194             getNextAggregateIndexAfterDesignatedInit(AggregateSig, Args)) {
6195       // A designator was used, only aggregate init is possible.
6196       if (*NextIndex >= AggregateSize)
6197         return Type;
6198       Results.push_back(AggregateSig);
6199       return ProduceSignatureHelp(*this, Results, *NextIndex, OpenParLoc,
6200                                   Braced);
6201     }
6202 
6203     // Describe aggregate initialization, but also constructors below.
6204     if (Args.size() < AggregateSize)
6205       Results.push_back(AggregateSig);
6206   }
6207 
6208   // FIXME: Provide support for member initializers.
6209   // FIXME: Provide support for variadic template constructors.
6210 
6211   if (CRD) {
6212     OverloadCandidateSet CandidateSet(Loc, OverloadCandidateSet::CSK_Normal);
6213     for (NamedDecl *C : LookupConstructors(CRD)) {
6214       if (auto *FD = dyn_cast<FunctionDecl>(C)) {
6215         // FIXME: we can't yet provide correct signature help for initializer
6216         //        list constructors, so skip them entirely.
6217         if (Braced && LangOpts.CPlusPlus && isInitListConstructor(FD))
6218           continue;
6219         AddOverloadCandidate(FD, DeclAccessPair::make(FD, C->getAccess()), Args,
6220                              CandidateSet,
6221                              /*SuppressUserConversions=*/false,
6222                              /*PartialOverloading=*/true,
6223                              /*AllowExplicit*/ true);
6224       } else if (auto *FTD = dyn_cast<FunctionTemplateDecl>(C)) {
6225         if (Braced && LangOpts.CPlusPlus &&
6226             isInitListConstructor(FTD->getTemplatedDecl()))
6227           continue;
6228 
6229         AddTemplateOverloadCandidate(
6230             FTD, DeclAccessPair::make(FTD, C->getAccess()),
6231             /*ExplicitTemplateArgs=*/nullptr, Args, CandidateSet,
6232             /*SuppressUserConversions=*/false,
6233             /*PartialOverloading=*/true);
6234       }
6235     }
6236     mergeCandidatesWithResults(*this, Results, CandidateSet, Loc, Args.size());
6237   }
6238 
6239   return ProduceSignatureHelp(*this, Results, Args.size(), OpenParLoc, Braced);
6240 }
6241 
6242 QualType Sema::ProduceCtorInitMemberSignatureHelp(
6243     Decl *ConstructorDecl, CXXScopeSpec SS, ParsedType TemplateTypeTy,
6244     ArrayRef<Expr *> ArgExprs, IdentifierInfo *II, SourceLocation OpenParLoc,
6245     bool Braced) {
6246   if (!CodeCompleter)
6247     return QualType();
6248 
6249   CXXConstructorDecl *Constructor =
6250       dyn_cast<CXXConstructorDecl>(ConstructorDecl);
6251   if (!Constructor)
6252     return QualType();
6253   // FIXME: Add support for Base class constructors as well.
6254   if (ValueDecl *MemberDecl = tryLookupCtorInitMemberDecl(
6255           Constructor->getParent(), SS, TemplateTypeTy, II))
6256     return ProduceConstructorSignatureHelp(MemberDecl->getType(),
6257                                            MemberDecl->getLocation(), ArgExprs,
6258                                            OpenParLoc, Braced);
6259   return QualType();
6260 }
6261 
6262 static bool argMatchesTemplateParams(const ParsedTemplateArgument &Arg,
6263                                      unsigned Index,
6264                                      const TemplateParameterList &Params) {
6265   const NamedDecl *Param;
6266   if (Index < Params.size())
6267     Param = Params.getParam(Index);
6268   else if (Params.hasParameterPack())
6269     Param = Params.asArray().back();
6270   else
6271     return false; // too many args
6272 
6273   switch (Arg.getKind()) {
6274   case ParsedTemplateArgument::Type:
6275     return llvm::isa<TemplateTypeParmDecl>(Param); // constraints not checked
6276   case ParsedTemplateArgument::NonType:
6277     return llvm::isa<NonTypeTemplateParmDecl>(Param); // type not checked
6278   case ParsedTemplateArgument::Template:
6279     return llvm::isa<TemplateTemplateParmDecl>(Param); // signature not checked
6280   }
6281   llvm_unreachable("Unhandled switch case");
6282 }
6283 
6284 QualType Sema::ProduceTemplateArgumentSignatureHelp(
6285     TemplateTy ParsedTemplate, ArrayRef<ParsedTemplateArgument> Args,
6286     SourceLocation LAngleLoc) {
6287   if (!CodeCompleter || !ParsedTemplate)
6288     return QualType();
6289 
6290   SmallVector<ResultCandidate, 8> Results;
6291   auto Consider = [&](const TemplateDecl *TD) {
6292     // Only add if the existing args are compatible with the template.
6293     bool Matches = true;
6294     for (unsigned I = 0; I < Args.size(); ++I) {
6295       if (!argMatchesTemplateParams(Args[I], I, *TD->getTemplateParameters())) {
6296         Matches = false;
6297         break;
6298       }
6299     }
6300     if (Matches)
6301       Results.emplace_back(TD);
6302   };
6303 
6304   TemplateName Template = ParsedTemplate.get();
6305   if (const auto *TD = Template.getAsTemplateDecl()) {
6306     Consider(TD);
6307   } else if (const auto *OTS = Template.getAsOverloadedTemplate()) {
6308     for (const NamedDecl *ND : *OTS)
6309       if (const auto *TD = llvm::dyn_cast<TemplateDecl>(ND))
6310         Consider(TD);
6311   }
6312   return ProduceSignatureHelp(*this, Results, Args.size(), LAngleLoc,
6313                               /*Braced=*/false);
6314 }
6315 
6316 static QualType getDesignatedType(QualType BaseType, const Designation &Desig) {
6317   for (unsigned I = 0; I < Desig.getNumDesignators(); ++I) {
6318     if (BaseType.isNull())
6319       break;
6320     QualType NextType;
6321     const auto &D = Desig.getDesignator(I);
6322     if (D.isArrayDesignator() || D.isArrayRangeDesignator()) {
6323       if (BaseType->isArrayType())
6324         NextType = BaseType->getAsArrayTypeUnsafe()->getElementType();
6325     } else {
6326       assert(D.isFieldDesignator());
6327       auto *RD = getAsRecordDecl(BaseType);
6328       if (RD && RD->isCompleteDefinition()) {
6329         for (const auto *Member : RD->lookup(D.getField()))
6330           if (const FieldDecl *FD = llvm::dyn_cast<FieldDecl>(Member)) {
6331             NextType = FD->getType();
6332             break;
6333           }
6334       }
6335     }
6336     BaseType = NextType;
6337   }
6338   return BaseType;
6339 }
6340 
6341 void Sema::CodeCompleteDesignator(QualType BaseType,
6342                                   llvm::ArrayRef<Expr *> InitExprs,
6343                                   const Designation &D) {
6344   BaseType = getDesignatedType(BaseType, D);
6345   if (BaseType.isNull())
6346     return;
6347   const auto *RD = getAsRecordDecl(BaseType);
6348   if (!RD || RD->fields().empty())
6349     return;
6350 
6351   CodeCompletionContext CCC(CodeCompletionContext::CCC_DotMemberAccess,
6352                             BaseType);
6353   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6354                         CodeCompleter->getCodeCompletionTUInfo(), CCC);
6355 
6356   Results.EnterNewScope();
6357   for (const Decl *D : RD->decls()) {
6358     const FieldDecl *FD;
6359     if (auto *IFD = dyn_cast<IndirectFieldDecl>(D))
6360       FD = IFD->getAnonField();
6361     else if (auto *DFD = dyn_cast<FieldDecl>(D))
6362       FD = DFD;
6363     else
6364       continue;
6365 
6366     // FIXME: Make use of previous designators to mark any fields before those
6367     // inaccessible, and also compute the next initializer priority.
6368     ResultBuilder::Result Result(FD, Results.getBasePriority(FD));
6369     Results.AddResult(Result, CurContext, /*Hiding=*/nullptr);
6370   }
6371   Results.ExitScope();
6372   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6373                             Results.data(), Results.size());
6374 }
6375 
6376 void Sema::CodeCompleteInitializer(Scope *S, Decl *D) {
6377   ValueDecl *VD = dyn_cast_or_null<ValueDecl>(D);
6378   if (!VD) {
6379     CodeCompleteOrdinaryName(S, PCC_Expression);
6380     return;
6381   }
6382 
6383   CodeCompleteExpressionData Data;
6384   Data.PreferredType = VD->getType();
6385   // Ignore VD to avoid completing the variable itself, e.g. in 'int foo = ^'.
6386   Data.IgnoreDecls.push_back(VD);
6387 
6388   CodeCompleteExpression(S, Data);
6389 }
6390 
6391 void Sema::CodeCompleteAfterIf(Scope *S, bool IsBracedThen) {
6392   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6393                         CodeCompleter->getCodeCompletionTUInfo(),
6394                         mapCodeCompletionContext(*this, PCC_Statement));
6395   Results.setFilter(&ResultBuilder::IsOrdinaryName);
6396   Results.EnterNewScope();
6397 
6398   CodeCompletionDeclConsumer Consumer(Results, CurContext);
6399   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6400                      CodeCompleter->includeGlobals(),
6401                      CodeCompleter->loadExternal());
6402 
6403   AddOrdinaryNameResults(PCC_Statement, S, *this, Results);
6404 
6405   // "else" block
6406   CodeCompletionBuilder Builder(Results.getAllocator(),
6407                                 Results.getCodeCompletionTUInfo());
6408 
6409   auto AddElseBodyPattern = [&] {
6410     if (IsBracedThen) {
6411       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6412       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
6413       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
6414       Builder.AddPlaceholderChunk("statements");
6415       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
6416       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
6417     } else {
6418       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
6419       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6420       Builder.AddPlaceholderChunk("statement");
6421       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
6422     }
6423   };
6424   Builder.AddTypedTextChunk("else");
6425   if (Results.includeCodePatterns())
6426     AddElseBodyPattern();
6427   Results.AddResult(Builder.TakeString());
6428 
6429   // "else if" block
6430   Builder.AddTypedTextChunk("else if");
6431   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6432   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6433   if (getLangOpts().CPlusPlus)
6434     Builder.AddPlaceholderChunk("condition");
6435   else
6436     Builder.AddPlaceholderChunk("expression");
6437   Builder.AddChunk(CodeCompletionString::CK_RightParen);
6438   if (Results.includeCodePatterns()) {
6439     AddElseBodyPattern();
6440   }
6441   Results.AddResult(Builder.TakeString());
6442 
6443   Results.ExitScope();
6444 
6445   if (S->getFnParent())
6446     AddPrettyFunctionResults(getLangOpts(), Results);
6447 
6448   if (CodeCompleter->includeMacros())
6449     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
6450 
6451   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6452                             Results.data(), Results.size());
6453 }
6454 
6455 void Sema::CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS,
6456                                    bool EnteringContext,
6457                                    bool IsUsingDeclaration, QualType BaseType,
6458                                    QualType PreferredType) {
6459   if (SS.isEmpty() || !CodeCompleter)
6460     return;
6461 
6462   CodeCompletionContext CC(CodeCompletionContext::CCC_Symbol, PreferredType);
6463   CC.setIsUsingDeclaration(IsUsingDeclaration);
6464   CC.setCXXScopeSpecifier(SS);
6465 
6466   // We want to keep the scope specifier even if it's invalid (e.g. the scope
6467   // "a::b::" is not corresponding to any context/namespace in the AST), since
6468   // it can be useful for global code completion which have information about
6469   // contexts/symbols that are not in the AST.
6470   if (SS.isInvalid()) {
6471     // As SS is invalid, we try to collect accessible contexts from the current
6472     // scope with a dummy lookup so that the completion consumer can try to
6473     // guess what the specified scope is.
6474     ResultBuilder DummyResults(*this, CodeCompleter->getAllocator(),
6475                                CodeCompleter->getCodeCompletionTUInfo(), CC);
6476     if (!PreferredType.isNull())
6477       DummyResults.setPreferredType(PreferredType);
6478     if (S->getEntity()) {
6479       CodeCompletionDeclConsumer Consumer(DummyResults, S->getEntity(),
6480                                           BaseType);
6481       LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6482                          /*IncludeGlobalScope=*/false,
6483                          /*LoadExternal=*/false);
6484     }
6485     HandleCodeCompleteResults(this, CodeCompleter,
6486                               DummyResults.getCompletionContext(), nullptr, 0);
6487     return;
6488   }
6489   // Always pretend to enter a context to ensure that a dependent type
6490   // resolves to a dependent record.
6491   DeclContext *Ctx = computeDeclContext(SS, /*EnteringContext=*/true);
6492 
6493   // Try to instantiate any non-dependent declaration contexts before
6494   // we look in them. Bail out if we fail.
6495   NestedNameSpecifier *NNS = SS.getScopeRep();
6496   if (NNS != nullptr && SS.isValid() && !NNS->isDependent()) {
6497     if (Ctx == nullptr || RequireCompleteDeclContext(SS, Ctx))
6498       return;
6499   }
6500 
6501   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6502                         CodeCompleter->getCodeCompletionTUInfo(), CC);
6503   if (!PreferredType.isNull())
6504     Results.setPreferredType(PreferredType);
6505   Results.EnterNewScope();
6506 
6507   // The "template" keyword can follow "::" in the grammar, but only
6508   // put it into the grammar if the nested-name-specifier is dependent.
6509   // FIXME: results is always empty, this appears to be dead.
6510   if (!Results.empty() && NNS->isDependent())
6511     Results.AddResult("template");
6512 
6513   // If the scope is a concept-constrained type parameter, infer nested
6514   // members based on the constraints.
6515   if (const auto *TTPT =
6516           dyn_cast_or_null<TemplateTypeParmType>(NNS->getAsType())) {
6517     for (const auto &R : ConceptInfo(*TTPT, S).members()) {
6518       if (R.Operator != ConceptInfo::Member::Colons)
6519         continue;
6520       Results.AddResult(CodeCompletionResult(
6521           R.render(*this, CodeCompleter->getAllocator(),
6522                    CodeCompleter->getCodeCompletionTUInfo())));
6523     }
6524   }
6525 
6526   // Add calls to overridden virtual functions, if there are any.
6527   //
6528   // FIXME: This isn't wonderful, because we don't know whether we're actually
6529   // in a context that permits expressions. This is a general issue with
6530   // qualified-id completions.
6531   if (Ctx && !EnteringContext)
6532     MaybeAddOverrideCalls(*this, Ctx, Results);
6533   Results.ExitScope();
6534 
6535   if (Ctx &&
6536       (CodeCompleter->includeNamespaceLevelDecls() || !Ctx->isFileContext())) {
6537     CodeCompletionDeclConsumer Consumer(Results, Ctx, BaseType);
6538     LookupVisibleDecls(Ctx, LookupOrdinaryName, Consumer,
6539                        /*IncludeGlobalScope=*/true,
6540                        /*IncludeDependentBases=*/true,
6541                        CodeCompleter->loadExternal());
6542   }
6543 
6544   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6545                             Results.data(), Results.size());
6546 }
6547 
6548 void Sema::CodeCompleteUsing(Scope *S) {
6549   if (!CodeCompleter)
6550     return;
6551 
6552   // This can be both a using alias or using declaration, in the former we
6553   // expect a new name and a symbol in the latter case.
6554   CodeCompletionContext Context(CodeCompletionContext::CCC_SymbolOrNewName);
6555   Context.setIsUsingDeclaration(true);
6556 
6557   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6558                         CodeCompleter->getCodeCompletionTUInfo(), Context,
6559                         &ResultBuilder::IsNestedNameSpecifier);
6560   Results.EnterNewScope();
6561 
6562   // If we aren't in class scope, we could see the "namespace" keyword.
6563   if (!S->isClassScope())
6564     Results.AddResult(CodeCompletionResult("namespace"));
6565 
6566   // After "using", we can see anything that would start a
6567   // nested-name-specifier.
6568   CodeCompletionDeclConsumer Consumer(Results, CurContext);
6569   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6570                      CodeCompleter->includeGlobals(),
6571                      CodeCompleter->loadExternal());
6572   Results.ExitScope();
6573 
6574   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6575                             Results.data(), Results.size());
6576 }
6577 
6578 void Sema::CodeCompleteUsingDirective(Scope *S) {
6579   if (!CodeCompleter)
6580     return;
6581 
6582   // After "using namespace", we expect to see a namespace name or namespace
6583   // alias.
6584   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6585                         CodeCompleter->getCodeCompletionTUInfo(),
6586                         CodeCompletionContext::CCC_Namespace,
6587                         &ResultBuilder::IsNamespaceOrAlias);
6588   Results.EnterNewScope();
6589   CodeCompletionDeclConsumer Consumer(Results, CurContext);
6590   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6591                      CodeCompleter->includeGlobals(),
6592                      CodeCompleter->loadExternal());
6593   Results.ExitScope();
6594   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6595                             Results.data(), Results.size());
6596 }
6597 
6598 void Sema::CodeCompleteNamespaceDecl(Scope *S) {
6599   if (!CodeCompleter)
6600     return;
6601 
6602   DeclContext *Ctx = S->getEntity();
6603   if (!S->getParent())
6604     Ctx = Context.getTranslationUnitDecl();
6605 
6606   bool SuppressedGlobalResults =
6607       Ctx && !CodeCompleter->includeGlobals() && isa<TranslationUnitDecl>(Ctx);
6608 
6609   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6610                         CodeCompleter->getCodeCompletionTUInfo(),
6611                         SuppressedGlobalResults
6612                             ? CodeCompletionContext::CCC_Namespace
6613                             : CodeCompletionContext::CCC_Other,
6614                         &ResultBuilder::IsNamespace);
6615 
6616   if (Ctx && Ctx->isFileContext() && !SuppressedGlobalResults) {
6617     // We only want to see those namespaces that have already been defined
6618     // within this scope, because its likely that the user is creating an
6619     // extended namespace declaration. Keep track of the most recent
6620     // definition of each namespace.
6621     std::map<NamespaceDecl *, NamespaceDecl *> OrigToLatest;
6622     for (DeclContext::specific_decl_iterator<NamespaceDecl>
6623              NS(Ctx->decls_begin()),
6624          NSEnd(Ctx->decls_end());
6625          NS != NSEnd; ++NS)
6626       OrigToLatest[NS->getOriginalNamespace()] = *NS;
6627 
6628     // Add the most recent definition (or extended definition) of each
6629     // namespace to the list of results.
6630     Results.EnterNewScope();
6631     for (std::map<NamespaceDecl *, NamespaceDecl *>::iterator
6632              NS = OrigToLatest.begin(),
6633              NSEnd = OrigToLatest.end();
6634          NS != NSEnd; ++NS)
6635       Results.AddResult(
6636           CodeCompletionResult(NS->second, Results.getBasePriority(NS->second),
6637                                nullptr),
6638           CurContext, nullptr, false);
6639     Results.ExitScope();
6640   }
6641 
6642   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6643                             Results.data(), Results.size());
6644 }
6645 
6646 void Sema::CodeCompleteNamespaceAliasDecl(Scope *S) {
6647   if (!CodeCompleter)
6648     return;
6649 
6650   // After "namespace", we expect to see a namespace or alias.
6651   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6652                         CodeCompleter->getCodeCompletionTUInfo(),
6653                         CodeCompletionContext::CCC_Namespace,
6654                         &ResultBuilder::IsNamespaceOrAlias);
6655   CodeCompletionDeclConsumer Consumer(Results, CurContext);
6656   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6657                      CodeCompleter->includeGlobals(),
6658                      CodeCompleter->loadExternal());
6659   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6660                             Results.data(), Results.size());
6661 }
6662 
6663 void Sema::CodeCompleteOperatorName(Scope *S) {
6664   if (!CodeCompleter)
6665     return;
6666 
6667   typedef CodeCompletionResult Result;
6668   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6669                         CodeCompleter->getCodeCompletionTUInfo(),
6670                         CodeCompletionContext::CCC_Type,
6671                         &ResultBuilder::IsType);
6672   Results.EnterNewScope();
6673 
6674   // Add the names of overloadable operators. Note that OO_Conditional is not
6675   // actually overloadable.
6676 #define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly)  \
6677   if (OO_##Name != OO_Conditional)                                             \
6678     Results.AddResult(Result(Spelling));
6679 #include "clang/Basic/OperatorKinds.def"
6680 
6681   // Add any type names visible from the current scope
6682   Results.allowNestedNameSpecifiers();
6683   CodeCompletionDeclConsumer Consumer(Results, CurContext);
6684   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
6685                      CodeCompleter->includeGlobals(),
6686                      CodeCompleter->loadExternal());
6687 
6688   // Add any type specifiers
6689   AddTypeSpecifierResults(getLangOpts(), Results);
6690   Results.ExitScope();
6691 
6692   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6693                             Results.data(), Results.size());
6694 }
6695 
6696 void Sema::CodeCompleteConstructorInitializer(
6697     Decl *ConstructorD, ArrayRef<CXXCtorInitializer *> Initializers) {
6698   if (!ConstructorD)
6699     return;
6700 
6701   AdjustDeclIfTemplate(ConstructorD);
6702 
6703   auto *Constructor = dyn_cast<CXXConstructorDecl>(ConstructorD);
6704   if (!Constructor)
6705     return;
6706 
6707   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6708                         CodeCompleter->getCodeCompletionTUInfo(),
6709                         CodeCompletionContext::CCC_Symbol);
6710   Results.EnterNewScope();
6711 
6712   // Fill in any already-initialized fields or base classes.
6713   llvm::SmallPtrSet<FieldDecl *, 4> InitializedFields;
6714   llvm::SmallPtrSet<CanQualType, 4> InitializedBases;
6715   for (unsigned I = 0, E = Initializers.size(); I != E; ++I) {
6716     if (Initializers[I]->isBaseInitializer())
6717       InitializedBases.insert(Context.getCanonicalType(
6718           QualType(Initializers[I]->getBaseClass(), 0)));
6719     else
6720       InitializedFields.insert(
6721           cast<FieldDecl>(Initializers[I]->getAnyMember()));
6722   }
6723 
6724   // Add completions for base classes.
6725   PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
6726   bool SawLastInitializer = Initializers.empty();
6727   CXXRecordDecl *ClassDecl = Constructor->getParent();
6728 
6729   auto GenerateCCS = [&](const NamedDecl *ND, const char *Name) {
6730     CodeCompletionBuilder Builder(Results.getAllocator(),
6731                                   Results.getCodeCompletionTUInfo());
6732     Builder.AddTypedTextChunk(Name);
6733     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6734     if (const auto *Function = dyn_cast<FunctionDecl>(ND))
6735       AddFunctionParameterChunks(PP, Policy, Function, Builder);
6736     else if (const auto *FunTemplDecl = dyn_cast<FunctionTemplateDecl>(ND))
6737       AddFunctionParameterChunks(PP, Policy, FunTemplDecl->getTemplatedDecl(),
6738                                  Builder);
6739     Builder.AddChunk(CodeCompletionString::CK_RightParen);
6740     return Builder.TakeString();
6741   };
6742   auto AddDefaultCtorInit = [&](const char *Name, const char *Type,
6743                                 const NamedDecl *ND) {
6744     CodeCompletionBuilder Builder(Results.getAllocator(),
6745                                   Results.getCodeCompletionTUInfo());
6746     Builder.AddTypedTextChunk(Name);
6747     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6748     Builder.AddPlaceholderChunk(Type);
6749     Builder.AddChunk(CodeCompletionString::CK_RightParen);
6750     if (ND) {
6751       auto CCR = CodeCompletionResult(
6752           Builder.TakeString(), ND,
6753           SawLastInitializer ? CCP_NextInitializer : CCP_MemberDeclaration);
6754       if (isa<FieldDecl>(ND))
6755         CCR.CursorKind = CXCursor_MemberRef;
6756       return Results.AddResult(CCR);
6757     }
6758     return Results.AddResult(CodeCompletionResult(
6759         Builder.TakeString(),
6760         SawLastInitializer ? CCP_NextInitializer : CCP_MemberDeclaration));
6761   };
6762   auto AddCtorsWithName = [&](const CXXRecordDecl *RD, unsigned int Priority,
6763                               const char *Name, const FieldDecl *FD) {
6764     if (!RD)
6765       return AddDefaultCtorInit(Name,
6766                                 FD ? Results.getAllocator().CopyString(
6767                                          FD->getType().getAsString(Policy))
6768                                    : Name,
6769                                 FD);
6770     auto Ctors = getConstructors(Context, RD);
6771     if (Ctors.begin() == Ctors.end())
6772       return AddDefaultCtorInit(Name, Name, RD);
6773     for (const NamedDecl *Ctor : Ctors) {
6774       auto CCR = CodeCompletionResult(GenerateCCS(Ctor, Name), RD, Priority);
6775       CCR.CursorKind = getCursorKindForDecl(Ctor);
6776       Results.AddResult(CCR);
6777     }
6778   };
6779   auto AddBase = [&](const CXXBaseSpecifier &Base) {
6780     const char *BaseName =
6781         Results.getAllocator().CopyString(Base.getType().getAsString(Policy));
6782     const auto *RD = Base.getType()->getAsCXXRecordDecl();
6783     AddCtorsWithName(
6784         RD, SawLastInitializer ? CCP_NextInitializer : CCP_MemberDeclaration,
6785         BaseName, nullptr);
6786   };
6787   auto AddField = [&](const FieldDecl *FD) {
6788     const char *FieldName =
6789         Results.getAllocator().CopyString(FD->getIdentifier()->getName());
6790     const CXXRecordDecl *RD = FD->getType()->getAsCXXRecordDecl();
6791     AddCtorsWithName(
6792         RD, SawLastInitializer ? CCP_NextInitializer : CCP_MemberDeclaration,
6793         FieldName, FD);
6794   };
6795 
6796   for (const auto &Base : ClassDecl->bases()) {
6797     if (!InitializedBases.insert(Context.getCanonicalType(Base.getType()))
6798              .second) {
6799       SawLastInitializer =
6800           !Initializers.empty() && Initializers.back()->isBaseInitializer() &&
6801           Context.hasSameUnqualifiedType(
6802               Base.getType(), QualType(Initializers.back()->getBaseClass(), 0));
6803       continue;
6804     }
6805 
6806     AddBase(Base);
6807     SawLastInitializer = false;
6808   }
6809 
6810   // Add completions for virtual base classes.
6811   for (const auto &Base : ClassDecl->vbases()) {
6812     if (!InitializedBases.insert(Context.getCanonicalType(Base.getType()))
6813              .second) {
6814       SawLastInitializer =
6815           !Initializers.empty() && Initializers.back()->isBaseInitializer() &&
6816           Context.hasSameUnqualifiedType(
6817               Base.getType(), QualType(Initializers.back()->getBaseClass(), 0));
6818       continue;
6819     }
6820 
6821     AddBase(Base);
6822     SawLastInitializer = false;
6823   }
6824 
6825   // Add completions for members.
6826   for (auto *Field : ClassDecl->fields()) {
6827     if (!InitializedFields.insert(cast<FieldDecl>(Field->getCanonicalDecl()))
6828              .second) {
6829       SawLastInitializer = !Initializers.empty() &&
6830                            Initializers.back()->isAnyMemberInitializer() &&
6831                            Initializers.back()->getAnyMember() == Field;
6832       continue;
6833     }
6834 
6835     if (!Field->getDeclName())
6836       continue;
6837 
6838     AddField(Field);
6839     SawLastInitializer = false;
6840   }
6841   Results.ExitScope();
6842 
6843   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6844                             Results.data(), Results.size());
6845 }
6846 
6847 /// Determine whether this scope denotes a namespace.
6848 static bool isNamespaceScope(Scope *S) {
6849   DeclContext *DC = S->getEntity();
6850   if (!DC)
6851     return false;
6852 
6853   return DC->isFileContext();
6854 }
6855 
6856 void Sema::CodeCompleteLambdaIntroducer(Scope *S, LambdaIntroducer &Intro,
6857                                         bool AfterAmpersand) {
6858   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6859                         CodeCompleter->getCodeCompletionTUInfo(),
6860                         CodeCompletionContext::CCC_Other);
6861   Results.EnterNewScope();
6862 
6863   // Note what has already been captured.
6864   llvm::SmallPtrSet<IdentifierInfo *, 4> Known;
6865   bool IncludedThis = false;
6866   for (const auto &C : Intro.Captures) {
6867     if (C.Kind == LCK_This) {
6868       IncludedThis = true;
6869       continue;
6870     }
6871 
6872     Known.insert(C.Id);
6873   }
6874 
6875   // Look for other capturable variables.
6876   for (; S && !isNamespaceScope(S); S = S->getParent()) {
6877     for (const auto *D : S->decls()) {
6878       const auto *Var = dyn_cast<VarDecl>(D);
6879       if (!Var || !Var->hasLocalStorage() || Var->hasAttr<BlocksAttr>())
6880         continue;
6881 
6882       if (Known.insert(Var->getIdentifier()).second)
6883         Results.AddResult(CodeCompletionResult(Var, CCP_LocalDeclaration),
6884                           CurContext, nullptr, false);
6885     }
6886   }
6887 
6888   // Add 'this', if it would be valid.
6889   if (!IncludedThis && !AfterAmpersand && Intro.Default != LCD_ByCopy)
6890     addThisCompletion(*this, Results);
6891 
6892   Results.ExitScope();
6893 
6894   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6895                             Results.data(), Results.size());
6896 }
6897 
6898 void Sema::CodeCompleteAfterFunctionEquals(Declarator &D) {
6899   if (!LangOpts.CPlusPlus11)
6900     return;
6901   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6902                         CodeCompleter->getCodeCompletionTUInfo(),
6903                         CodeCompletionContext::CCC_Other);
6904   auto ShouldAddDefault = [&D, this]() {
6905     if (!D.isFunctionDeclarator())
6906       return false;
6907     auto &Id = D.getName();
6908     if (Id.getKind() == UnqualifiedIdKind::IK_DestructorName)
6909       return true;
6910     // FIXME(liuhui): Ideally, we should check the constructor parameter list to
6911     // verify that it is the default, copy or move constructor?
6912     if (Id.getKind() == UnqualifiedIdKind::IK_ConstructorName &&
6913         D.getFunctionTypeInfo().NumParams <= 1)
6914       return true;
6915     if (Id.getKind() == UnqualifiedIdKind::IK_OperatorFunctionId) {
6916       auto Op = Id.OperatorFunctionId.Operator;
6917       // FIXME(liuhui): Ideally, we should check the function parameter list to
6918       // verify that it is the copy or move assignment?
6919       if (Op == OverloadedOperatorKind::OO_Equal)
6920         return true;
6921       if (LangOpts.CPlusPlus20 &&
6922           (Op == OverloadedOperatorKind::OO_EqualEqual ||
6923            Op == OverloadedOperatorKind::OO_ExclaimEqual ||
6924            Op == OverloadedOperatorKind::OO_Less ||
6925            Op == OverloadedOperatorKind::OO_LessEqual ||
6926            Op == OverloadedOperatorKind::OO_Greater ||
6927            Op == OverloadedOperatorKind::OO_GreaterEqual ||
6928            Op == OverloadedOperatorKind::OO_Spaceship))
6929         return true;
6930     }
6931     return false;
6932   };
6933 
6934   Results.EnterNewScope();
6935   if (ShouldAddDefault())
6936     Results.AddResult("default");
6937   // FIXME(liuhui): Ideally, we should only provide `delete` completion for the
6938   // first function declaration.
6939   Results.AddResult("delete");
6940   Results.ExitScope();
6941   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
6942                             Results.data(), Results.size());
6943 }
6944 
6945 /// Macro that optionally prepends an "@" to the string literal passed in via
6946 /// Keyword, depending on whether NeedAt is true or false.
6947 #define OBJC_AT_KEYWORD_NAME(NeedAt, Keyword) ((NeedAt) ? "@" Keyword : Keyword)
6948 
6949 static void AddObjCImplementationResults(const LangOptions &LangOpts,
6950                                          ResultBuilder &Results, bool NeedAt) {
6951   typedef CodeCompletionResult Result;
6952   // Since we have an implementation, we can end it.
6953   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "end")));
6954 
6955   CodeCompletionBuilder Builder(Results.getAllocator(),
6956                                 Results.getCodeCompletionTUInfo());
6957   if (LangOpts.ObjC) {
6958     // @dynamic
6959     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "dynamic"));
6960     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6961     Builder.AddPlaceholderChunk("property");
6962     Results.AddResult(Result(Builder.TakeString()));
6963 
6964     // @synthesize
6965     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "synthesize"));
6966     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6967     Builder.AddPlaceholderChunk("property");
6968     Results.AddResult(Result(Builder.TakeString()));
6969   }
6970 }
6971 
6972 static void AddObjCInterfaceResults(const LangOptions &LangOpts,
6973                                     ResultBuilder &Results, bool NeedAt) {
6974   typedef CodeCompletionResult Result;
6975 
6976   // Since we have an interface or protocol, we can end it.
6977   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "end")));
6978 
6979   if (LangOpts.ObjC) {
6980     // @property
6981     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "property")));
6982 
6983     // @required
6984     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "required")));
6985 
6986     // @optional
6987     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "optional")));
6988   }
6989 }
6990 
6991 static void AddObjCTopLevelResults(ResultBuilder &Results, bool NeedAt) {
6992   typedef CodeCompletionResult Result;
6993   CodeCompletionBuilder Builder(Results.getAllocator(),
6994                                 Results.getCodeCompletionTUInfo());
6995 
6996   // @class name ;
6997   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "class"));
6998   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6999   Builder.AddPlaceholderChunk("name");
7000   Results.AddResult(Result(Builder.TakeString()));
7001 
7002   if (Results.includeCodePatterns()) {
7003     // @interface name
7004     // FIXME: Could introduce the whole pattern, including superclasses and
7005     // such.
7006     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "interface"));
7007     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7008     Builder.AddPlaceholderChunk("class");
7009     Results.AddResult(Result(Builder.TakeString()));
7010 
7011     // @protocol name
7012     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "protocol"));
7013     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7014     Builder.AddPlaceholderChunk("protocol");
7015     Results.AddResult(Result(Builder.TakeString()));
7016 
7017     // @implementation name
7018     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "implementation"));
7019     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7020     Builder.AddPlaceholderChunk("class");
7021     Results.AddResult(Result(Builder.TakeString()));
7022   }
7023 
7024   // @compatibility_alias name
7025   Builder.AddTypedTextChunk(
7026       OBJC_AT_KEYWORD_NAME(NeedAt, "compatibility_alias"));
7027   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7028   Builder.AddPlaceholderChunk("alias");
7029   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7030   Builder.AddPlaceholderChunk("class");
7031   Results.AddResult(Result(Builder.TakeString()));
7032 
7033   if (Results.getSema().getLangOpts().Modules) {
7034     // @import name
7035     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "import"));
7036     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7037     Builder.AddPlaceholderChunk("module");
7038     Results.AddResult(Result(Builder.TakeString()));
7039   }
7040 }
7041 
7042 void Sema::CodeCompleteObjCAtDirective(Scope *S) {
7043   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7044                         CodeCompleter->getCodeCompletionTUInfo(),
7045                         CodeCompletionContext::CCC_Other);
7046   Results.EnterNewScope();
7047   if (isa<ObjCImplDecl>(CurContext))
7048     AddObjCImplementationResults(getLangOpts(), Results, false);
7049   else if (CurContext->isObjCContainer())
7050     AddObjCInterfaceResults(getLangOpts(), Results, false);
7051   else
7052     AddObjCTopLevelResults(Results, false);
7053   Results.ExitScope();
7054   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7055                             Results.data(), Results.size());
7056 }
7057 
7058 static void AddObjCExpressionResults(ResultBuilder &Results, bool NeedAt) {
7059   typedef CodeCompletionResult Result;
7060   CodeCompletionBuilder Builder(Results.getAllocator(),
7061                                 Results.getCodeCompletionTUInfo());
7062 
7063   // @encode ( type-name )
7064   const char *EncodeType = "char[]";
7065   if (Results.getSema().getLangOpts().CPlusPlus ||
7066       Results.getSema().getLangOpts().ConstStrings)
7067     EncodeType = "const char[]";
7068   Builder.AddResultTypeChunk(EncodeType);
7069   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "encode"));
7070   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
7071   Builder.AddPlaceholderChunk("type-name");
7072   Builder.AddChunk(CodeCompletionString::CK_RightParen);
7073   Results.AddResult(Result(Builder.TakeString()));
7074 
7075   // @protocol ( protocol-name )
7076   Builder.AddResultTypeChunk("Protocol *");
7077   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "protocol"));
7078   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
7079   Builder.AddPlaceholderChunk("protocol-name");
7080   Builder.AddChunk(CodeCompletionString::CK_RightParen);
7081   Results.AddResult(Result(Builder.TakeString()));
7082 
7083   // @selector ( selector )
7084   Builder.AddResultTypeChunk("SEL");
7085   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "selector"));
7086   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
7087   Builder.AddPlaceholderChunk("selector");
7088   Builder.AddChunk(CodeCompletionString::CK_RightParen);
7089   Results.AddResult(Result(Builder.TakeString()));
7090 
7091   // @"string"
7092   Builder.AddResultTypeChunk("NSString *");
7093   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "\""));
7094   Builder.AddPlaceholderChunk("string");
7095   Builder.AddTextChunk("\"");
7096   Results.AddResult(Result(Builder.TakeString()));
7097 
7098   // @[objects, ...]
7099   Builder.AddResultTypeChunk("NSArray *");
7100   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "["));
7101   Builder.AddPlaceholderChunk("objects, ...");
7102   Builder.AddChunk(CodeCompletionString::CK_RightBracket);
7103   Results.AddResult(Result(Builder.TakeString()));
7104 
7105   // @{key : object, ...}
7106   Builder.AddResultTypeChunk("NSDictionary *");
7107   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "{"));
7108   Builder.AddPlaceholderChunk("key");
7109   Builder.AddChunk(CodeCompletionString::CK_Colon);
7110   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7111   Builder.AddPlaceholderChunk("object, ...");
7112   Builder.AddChunk(CodeCompletionString::CK_RightBrace);
7113   Results.AddResult(Result(Builder.TakeString()));
7114 
7115   // @(expression)
7116   Builder.AddResultTypeChunk("id");
7117   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "("));
7118   Builder.AddPlaceholderChunk("expression");
7119   Builder.AddChunk(CodeCompletionString::CK_RightParen);
7120   Results.AddResult(Result(Builder.TakeString()));
7121 }
7122 
7123 static void AddObjCStatementResults(ResultBuilder &Results, bool NeedAt) {
7124   typedef CodeCompletionResult Result;
7125   CodeCompletionBuilder Builder(Results.getAllocator(),
7126                                 Results.getCodeCompletionTUInfo());
7127 
7128   if (Results.includeCodePatterns()) {
7129     // @try { statements } @catch ( declaration ) { statements } @finally
7130     //   { statements }
7131     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "try"));
7132     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
7133     Builder.AddPlaceholderChunk("statements");
7134     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
7135     Builder.AddTextChunk("@catch");
7136     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
7137     Builder.AddPlaceholderChunk("parameter");
7138     Builder.AddChunk(CodeCompletionString::CK_RightParen);
7139     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
7140     Builder.AddPlaceholderChunk("statements");
7141     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
7142     Builder.AddTextChunk("@finally");
7143     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
7144     Builder.AddPlaceholderChunk("statements");
7145     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
7146     Results.AddResult(Result(Builder.TakeString()));
7147   }
7148 
7149   // @throw
7150   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "throw"));
7151   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7152   Builder.AddPlaceholderChunk("expression");
7153   Results.AddResult(Result(Builder.TakeString()));
7154 
7155   if (Results.includeCodePatterns()) {
7156     // @synchronized ( expression ) { statements }
7157     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "synchronized"));
7158     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7159     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
7160     Builder.AddPlaceholderChunk("expression");
7161     Builder.AddChunk(CodeCompletionString::CK_RightParen);
7162     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
7163     Builder.AddPlaceholderChunk("statements");
7164     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
7165     Results.AddResult(Result(Builder.TakeString()));
7166   }
7167 }
7168 
7169 static void AddObjCVisibilityResults(const LangOptions &LangOpts,
7170                                      ResultBuilder &Results, bool NeedAt) {
7171   typedef CodeCompletionResult Result;
7172   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "private")));
7173   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "protected")));
7174   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "public")));
7175   if (LangOpts.ObjC)
7176     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt, "package")));
7177 }
7178 
7179 void Sema::CodeCompleteObjCAtVisibility(Scope *S) {
7180   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7181                         CodeCompleter->getCodeCompletionTUInfo(),
7182                         CodeCompletionContext::CCC_Other);
7183   Results.EnterNewScope();
7184   AddObjCVisibilityResults(getLangOpts(), Results, false);
7185   Results.ExitScope();
7186   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7187                             Results.data(), Results.size());
7188 }
7189 
7190 void Sema::CodeCompleteObjCAtStatement(Scope *S) {
7191   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7192                         CodeCompleter->getCodeCompletionTUInfo(),
7193                         CodeCompletionContext::CCC_Other);
7194   Results.EnterNewScope();
7195   AddObjCStatementResults(Results, false);
7196   AddObjCExpressionResults(Results, false);
7197   Results.ExitScope();
7198   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7199                             Results.data(), Results.size());
7200 }
7201 
7202 void Sema::CodeCompleteObjCAtExpression(Scope *S) {
7203   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7204                         CodeCompleter->getCodeCompletionTUInfo(),
7205                         CodeCompletionContext::CCC_Other);
7206   Results.EnterNewScope();
7207   AddObjCExpressionResults(Results, false);
7208   Results.ExitScope();
7209   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7210                             Results.data(), Results.size());
7211 }
7212 
7213 /// Determine whether the addition of the given flag to an Objective-C
7214 /// property's attributes will cause a conflict.
7215 static bool ObjCPropertyFlagConflicts(unsigned Attributes, unsigned NewFlag) {
7216   // Check if we've already added this flag.
7217   if (Attributes & NewFlag)
7218     return true;
7219 
7220   Attributes |= NewFlag;
7221 
7222   // Check for collisions with "readonly".
7223   if ((Attributes & ObjCPropertyAttribute::kind_readonly) &&
7224       (Attributes & ObjCPropertyAttribute::kind_readwrite))
7225     return true;
7226 
7227   // Check for more than one of { assign, copy, retain, strong, weak }.
7228   unsigned AssignCopyRetMask =
7229       Attributes &
7230       (ObjCPropertyAttribute::kind_assign |
7231        ObjCPropertyAttribute::kind_unsafe_unretained |
7232        ObjCPropertyAttribute::kind_copy | ObjCPropertyAttribute::kind_retain |
7233        ObjCPropertyAttribute::kind_strong | ObjCPropertyAttribute::kind_weak);
7234   if (AssignCopyRetMask &&
7235       AssignCopyRetMask != ObjCPropertyAttribute::kind_assign &&
7236       AssignCopyRetMask != ObjCPropertyAttribute::kind_unsafe_unretained &&
7237       AssignCopyRetMask != ObjCPropertyAttribute::kind_copy &&
7238       AssignCopyRetMask != ObjCPropertyAttribute::kind_retain &&
7239       AssignCopyRetMask != ObjCPropertyAttribute::kind_strong &&
7240       AssignCopyRetMask != ObjCPropertyAttribute::kind_weak)
7241     return true;
7242 
7243   return false;
7244 }
7245 
7246 void Sema::CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS) {
7247   if (!CodeCompleter)
7248     return;
7249 
7250   unsigned Attributes = ODS.getPropertyAttributes();
7251 
7252   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7253                         CodeCompleter->getCodeCompletionTUInfo(),
7254                         CodeCompletionContext::CCC_Other);
7255   Results.EnterNewScope();
7256   if (!ObjCPropertyFlagConflicts(Attributes,
7257                                  ObjCPropertyAttribute::kind_readonly))
7258     Results.AddResult(CodeCompletionResult("readonly"));
7259   if (!ObjCPropertyFlagConflicts(Attributes,
7260                                  ObjCPropertyAttribute::kind_assign))
7261     Results.AddResult(CodeCompletionResult("assign"));
7262   if (!ObjCPropertyFlagConflicts(Attributes,
7263                                  ObjCPropertyAttribute::kind_unsafe_unretained))
7264     Results.AddResult(CodeCompletionResult("unsafe_unretained"));
7265   if (!ObjCPropertyFlagConflicts(Attributes,
7266                                  ObjCPropertyAttribute::kind_readwrite))
7267     Results.AddResult(CodeCompletionResult("readwrite"));
7268   if (!ObjCPropertyFlagConflicts(Attributes,
7269                                  ObjCPropertyAttribute::kind_retain))
7270     Results.AddResult(CodeCompletionResult("retain"));
7271   if (!ObjCPropertyFlagConflicts(Attributes,
7272                                  ObjCPropertyAttribute::kind_strong))
7273     Results.AddResult(CodeCompletionResult("strong"));
7274   if (!ObjCPropertyFlagConflicts(Attributes, ObjCPropertyAttribute::kind_copy))
7275     Results.AddResult(CodeCompletionResult("copy"));
7276   if (!ObjCPropertyFlagConflicts(Attributes,
7277                                  ObjCPropertyAttribute::kind_nonatomic))
7278     Results.AddResult(CodeCompletionResult("nonatomic"));
7279   if (!ObjCPropertyFlagConflicts(Attributes,
7280                                  ObjCPropertyAttribute::kind_atomic))
7281     Results.AddResult(CodeCompletionResult("atomic"));
7282 
7283   // Only suggest "weak" if we're compiling for ARC-with-weak-references or GC.
7284   if (getLangOpts().ObjCWeak || getLangOpts().getGC() != LangOptions::NonGC)
7285     if (!ObjCPropertyFlagConflicts(Attributes,
7286                                    ObjCPropertyAttribute::kind_weak))
7287       Results.AddResult(CodeCompletionResult("weak"));
7288 
7289   if (!ObjCPropertyFlagConflicts(Attributes,
7290                                  ObjCPropertyAttribute::kind_setter)) {
7291     CodeCompletionBuilder Setter(Results.getAllocator(),
7292                                  Results.getCodeCompletionTUInfo());
7293     Setter.AddTypedTextChunk("setter");
7294     Setter.AddTextChunk("=");
7295     Setter.AddPlaceholderChunk("method");
7296     Results.AddResult(CodeCompletionResult(Setter.TakeString()));
7297   }
7298   if (!ObjCPropertyFlagConflicts(Attributes,
7299                                  ObjCPropertyAttribute::kind_getter)) {
7300     CodeCompletionBuilder Getter(Results.getAllocator(),
7301                                  Results.getCodeCompletionTUInfo());
7302     Getter.AddTypedTextChunk("getter");
7303     Getter.AddTextChunk("=");
7304     Getter.AddPlaceholderChunk("method");
7305     Results.AddResult(CodeCompletionResult(Getter.TakeString()));
7306   }
7307   if (!ObjCPropertyFlagConflicts(Attributes,
7308                                  ObjCPropertyAttribute::kind_nullability)) {
7309     Results.AddResult(CodeCompletionResult("nonnull"));
7310     Results.AddResult(CodeCompletionResult("nullable"));
7311     Results.AddResult(CodeCompletionResult("null_unspecified"));
7312     Results.AddResult(CodeCompletionResult("null_resettable"));
7313   }
7314   Results.ExitScope();
7315   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7316                             Results.data(), Results.size());
7317 }
7318 
7319 /// Describes the kind of Objective-C method that we want to find
7320 /// via code completion.
7321 enum ObjCMethodKind {
7322   MK_Any, ///< Any kind of method, provided it means other specified criteria.
7323   MK_ZeroArgSelector, ///< Zero-argument (unary) selector.
7324   MK_OneArgSelector   ///< One-argument selector.
7325 };
7326 
7327 static bool isAcceptableObjCSelector(Selector Sel, ObjCMethodKind WantKind,
7328                                      ArrayRef<IdentifierInfo *> SelIdents,
7329                                      bool AllowSameLength = true) {
7330   unsigned NumSelIdents = SelIdents.size();
7331   if (NumSelIdents > Sel.getNumArgs())
7332     return false;
7333 
7334   switch (WantKind) {
7335   case MK_Any:
7336     break;
7337   case MK_ZeroArgSelector:
7338     return Sel.isUnarySelector();
7339   case MK_OneArgSelector:
7340     return Sel.getNumArgs() == 1;
7341   }
7342 
7343   if (!AllowSameLength && NumSelIdents && NumSelIdents == Sel.getNumArgs())
7344     return false;
7345 
7346   for (unsigned I = 0; I != NumSelIdents; ++I)
7347     if (SelIdents[I] != Sel.getIdentifierInfoForSlot(I))
7348       return false;
7349 
7350   return true;
7351 }
7352 
7353 static bool isAcceptableObjCMethod(ObjCMethodDecl *Method,
7354                                    ObjCMethodKind WantKind,
7355                                    ArrayRef<IdentifierInfo *> SelIdents,
7356                                    bool AllowSameLength = true) {
7357   return isAcceptableObjCSelector(Method->getSelector(), WantKind, SelIdents,
7358                                   AllowSameLength);
7359 }
7360 
7361 /// A set of selectors, which is used to avoid introducing multiple
7362 /// completions with the same selector into the result set.
7363 typedef llvm::SmallPtrSet<Selector, 16> VisitedSelectorSet;
7364 
7365 /// Add all of the Objective-C methods in the given Objective-C
7366 /// container to the set of results.
7367 ///
7368 /// The container will be a class, protocol, category, or implementation of
7369 /// any of the above. This mether will recurse to include methods from
7370 /// the superclasses of classes along with their categories, protocols, and
7371 /// implementations.
7372 ///
7373 /// \param Container the container in which we'll look to find methods.
7374 ///
7375 /// \param WantInstanceMethods Whether to add instance methods (only); if
7376 /// false, this routine will add factory methods (only).
7377 ///
7378 /// \param CurContext the context in which we're performing the lookup that
7379 /// finds methods.
7380 ///
7381 /// \param AllowSameLength Whether we allow a method to be added to the list
7382 /// when it has the same number of parameters as we have selector identifiers.
7383 ///
7384 /// \param Results the structure into which we'll add results.
7385 static void AddObjCMethods(ObjCContainerDecl *Container,
7386                            bool WantInstanceMethods, ObjCMethodKind WantKind,
7387                            ArrayRef<IdentifierInfo *> SelIdents,
7388                            DeclContext *CurContext,
7389                            VisitedSelectorSet &Selectors, bool AllowSameLength,
7390                            ResultBuilder &Results, bool InOriginalClass = true,
7391                            bool IsRootClass = false) {
7392   typedef CodeCompletionResult Result;
7393   Container = getContainerDef(Container);
7394   ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container);
7395   IsRootClass = IsRootClass || (IFace && !IFace->getSuperClass());
7396   for (ObjCMethodDecl *M : Container->methods()) {
7397     // The instance methods on the root class can be messaged via the
7398     // metaclass.
7399     if (M->isInstanceMethod() == WantInstanceMethods ||
7400         (IsRootClass && !WantInstanceMethods)) {
7401       // Check whether the selector identifiers we've been given are a
7402       // subset of the identifiers for this particular method.
7403       if (!isAcceptableObjCMethod(M, WantKind, SelIdents, AllowSameLength))
7404         continue;
7405 
7406       if (!Selectors.insert(M->getSelector()).second)
7407         continue;
7408 
7409       Result R = Result(M, Results.getBasePriority(M), nullptr);
7410       R.StartParameter = SelIdents.size();
7411       R.AllParametersAreInformative = (WantKind != MK_Any);
7412       if (!InOriginalClass)
7413         setInBaseClass(R);
7414       Results.MaybeAddResult(R, CurContext);
7415     }
7416   }
7417 
7418   // Visit the protocols of protocols.
7419   if (const auto *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
7420     if (Protocol->hasDefinition()) {
7421       const ObjCList<ObjCProtocolDecl> &Protocols =
7422           Protocol->getReferencedProtocols();
7423       for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
7424                                                 E = Protocols.end();
7425            I != E; ++I)
7426         AddObjCMethods(*I, WantInstanceMethods, WantKind, SelIdents, CurContext,
7427                        Selectors, AllowSameLength, Results, false, IsRootClass);
7428     }
7429   }
7430 
7431   if (!IFace || !IFace->hasDefinition())
7432     return;
7433 
7434   // Add methods in protocols.
7435   for (ObjCProtocolDecl *I : IFace->protocols())
7436     AddObjCMethods(I, WantInstanceMethods, WantKind, SelIdents, CurContext,
7437                    Selectors, AllowSameLength, Results, false, IsRootClass);
7438 
7439   // Add methods in categories.
7440   for (ObjCCategoryDecl *CatDecl : IFace->known_categories()) {
7441     AddObjCMethods(CatDecl, WantInstanceMethods, WantKind, SelIdents,
7442                    CurContext, Selectors, AllowSameLength, Results,
7443                    InOriginalClass, IsRootClass);
7444 
7445     // Add a categories protocol methods.
7446     const ObjCList<ObjCProtocolDecl> &Protocols =
7447         CatDecl->getReferencedProtocols();
7448     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
7449                                               E = Protocols.end();
7450          I != E; ++I)
7451       AddObjCMethods(*I, WantInstanceMethods, WantKind, SelIdents, CurContext,
7452                      Selectors, AllowSameLength, Results, false, IsRootClass);
7453 
7454     // Add methods in category implementations.
7455     if (ObjCCategoryImplDecl *Impl = CatDecl->getImplementation())
7456       AddObjCMethods(Impl, WantInstanceMethods, WantKind, SelIdents, CurContext,
7457                      Selectors, AllowSameLength, Results, InOriginalClass,
7458                      IsRootClass);
7459   }
7460 
7461   // Add methods in superclass.
7462   // Avoid passing in IsRootClass since root classes won't have super classes.
7463   if (IFace->getSuperClass())
7464     AddObjCMethods(IFace->getSuperClass(), WantInstanceMethods, WantKind,
7465                    SelIdents, CurContext, Selectors, AllowSameLength, Results,
7466                    /*IsRootClass=*/false);
7467 
7468   // Add methods in our implementation, if any.
7469   if (ObjCImplementationDecl *Impl = IFace->getImplementation())
7470     AddObjCMethods(Impl, WantInstanceMethods, WantKind, SelIdents, CurContext,
7471                    Selectors, AllowSameLength, Results, InOriginalClass,
7472                    IsRootClass);
7473 }
7474 
7475 void Sema::CodeCompleteObjCPropertyGetter(Scope *S) {
7476   // Try to find the interface where getters might live.
7477   ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurContext);
7478   if (!Class) {
7479     if (ObjCCategoryDecl *Category =
7480             dyn_cast_or_null<ObjCCategoryDecl>(CurContext))
7481       Class = Category->getClassInterface();
7482 
7483     if (!Class)
7484       return;
7485   }
7486 
7487   // Find all of the potential getters.
7488   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7489                         CodeCompleter->getCodeCompletionTUInfo(),
7490                         CodeCompletionContext::CCC_Other);
7491   Results.EnterNewScope();
7492 
7493   VisitedSelectorSet Selectors;
7494   AddObjCMethods(Class, true, MK_ZeroArgSelector, None, CurContext, Selectors,
7495                  /*AllowSameLength=*/true, Results);
7496   Results.ExitScope();
7497   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7498                             Results.data(), Results.size());
7499 }
7500 
7501 void Sema::CodeCompleteObjCPropertySetter(Scope *S) {
7502   // Try to find the interface where setters might live.
7503   ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurContext);
7504   if (!Class) {
7505     if (ObjCCategoryDecl *Category =
7506             dyn_cast_or_null<ObjCCategoryDecl>(CurContext))
7507       Class = Category->getClassInterface();
7508 
7509     if (!Class)
7510       return;
7511   }
7512 
7513   // Find all of the potential getters.
7514   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7515                         CodeCompleter->getCodeCompletionTUInfo(),
7516                         CodeCompletionContext::CCC_Other);
7517   Results.EnterNewScope();
7518 
7519   VisitedSelectorSet Selectors;
7520   AddObjCMethods(Class, true, MK_OneArgSelector, None, CurContext, Selectors,
7521                  /*AllowSameLength=*/true, Results);
7522 
7523   Results.ExitScope();
7524   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7525                             Results.data(), Results.size());
7526 }
7527 
7528 void Sema::CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
7529                                        bool IsParameter) {
7530   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7531                         CodeCompleter->getCodeCompletionTUInfo(),
7532                         CodeCompletionContext::CCC_Type);
7533   Results.EnterNewScope();
7534 
7535   // Add context-sensitive, Objective-C parameter-passing keywords.
7536   bool AddedInOut = false;
7537   if ((DS.getObjCDeclQualifier() &
7538        (ObjCDeclSpec::DQ_In | ObjCDeclSpec::DQ_Inout)) == 0) {
7539     Results.AddResult("in");
7540     Results.AddResult("inout");
7541     AddedInOut = true;
7542   }
7543   if ((DS.getObjCDeclQualifier() &
7544        (ObjCDeclSpec::DQ_Out | ObjCDeclSpec::DQ_Inout)) == 0) {
7545     Results.AddResult("out");
7546     if (!AddedInOut)
7547       Results.AddResult("inout");
7548   }
7549   if ((DS.getObjCDeclQualifier() &
7550        (ObjCDeclSpec::DQ_Bycopy | ObjCDeclSpec::DQ_Byref |
7551         ObjCDeclSpec::DQ_Oneway)) == 0) {
7552     Results.AddResult("bycopy");
7553     Results.AddResult("byref");
7554     Results.AddResult("oneway");
7555   }
7556   if ((DS.getObjCDeclQualifier() & ObjCDeclSpec::DQ_CSNullability) == 0) {
7557     Results.AddResult("nonnull");
7558     Results.AddResult("nullable");
7559     Results.AddResult("null_unspecified");
7560   }
7561 
7562   // If we're completing the return type of an Objective-C method and the
7563   // identifier IBAction refers to a macro, provide a completion item for
7564   // an action, e.g.,
7565   //   IBAction)<#selector#>:(id)sender
7566   if (DS.getObjCDeclQualifier() == 0 && !IsParameter &&
7567       PP.isMacroDefined("IBAction")) {
7568     CodeCompletionBuilder Builder(Results.getAllocator(),
7569                                   Results.getCodeCompletionTUInfo(),
7570                                   CCP_CodePattern, CXAvailability_Available);
7571     Builder.AddTypedTextChunk("IBAction");
7572     Builder.AddChunk(CodeCompletionString::CK_RightParen);
7573     Builder.AddPlaceholderChunk("selector");
7574     Builder.AddChunk(CodeCompletionString::CK_Colon);
7575     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
7576     Builder.AddTextChunk("id");
7577     Builder.AddChunk(CodeCompletionString::CK_RightParen);
7578     Builder.AddTextChunk("sender");
7579     Results.AddResult(CodeCompletionResult(Builder.TakeString()));
7580   }
7581 
7582   // If we're completing the return type, provide 'instancetype'.
7583   if (!IsParameter) {
7584     Results.AddResult(CodeCompletionResult("instancetype"));
7585   }
7586 
7587   // Add various builtin type names and specifiers.
7588   AddOrdinaryNameResults(PCC_Type, S, *this, Results);
7589   Results.ExitScope();
7590 
7591   // Add the various type names
7592   Results.setFilter(&ResultBuilder::IsOrdinaryNonValueName);
7593   CodeCompletionDeclConsumer Consumer(Results, CurContext);
7594   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
7595                      CodeCompleter->includeGlobals(),
7596                      CodeCompleter->loadExternal());
7597 
7598   if (CodeCompleter->includeMacros())
7599     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
7600 
7601   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7602                             Results.data(), Results.size());
7603 }
7604 
7605 /// When we have an expression with type "id", we may assume
7606 /// that it has some more-specific class type based on knowledge of
7607 /// common uses of Objective-C. This routine returns that class type,
7608 /// or NULL if no better result could be determined.
7609 static ObjCInterfaceDecl *GetAssumedMessageSendExprType(Expr *E) {
7610   auto *Msg = dyn_cast_or_null<ObjCMessageExpr>(E);
7611   if (!Msg)
7612     return nullptr;
7613 
7614   Selector Sel = Msg->getSelector();
7615   if (Sel.isNull())
7616     return nullptr;
7617 
7618   IdentifierInfo *Id = Sel.getIdentifierInfoForSlot(0);
7619   if (!Id)
7620     return nullptr;
7621 
7622   ObjCMethodDecl *Method = Msg->getMethodDecl();
7623   if (!Method)
7624     return nullptr;
7625 
7626   // Determine the class that we're sending the message to.
7627   ObjCInterfaceDecl *IFace = nullptr;
7628   switch (Msg->getReceiverKind()) {
7629   case ObjCMessageExpr::Class:
7630     if (const ObjCObjectType *ObjType =
7631             Msg->getClassReceiver()->getAs<ObjCObjectType>())
7632       IFace = ObjType->getInterface();
7633     break;
7634 
7635   case ObjCMessageExpr::Instance: {
7636     QualType T = Msg->getInstanceReceiver()->getType();
7637     if (const ObjCObjectPointerType *Ptr = T->getAs<ObjCObjectPointerType>())
7638       IFace = Ptr->getInterfaceDecl();
7639     break;
7640   }
7641 
7642   case ObjCMessageExpr::SuperInstance:
7643   case ObjCMessageExpr::SuperClass:
7644     break;
7645   }
7646 
7647   if (!IFace)
7648     return nullptr;
7649 
7650   ObjCInterfaceDecl *Super = IFace->getSuperClass();
7651   if (Method->isInstanceMethod())
7652     return llvm::StringSwitch<ObjCInterfaceDecl *>(Id->getName())
7653         .Case("retain", IFace)
7654         .Case("strong", IFace)
7655         .Case("autorelease", IFace)
7656         .Case("copy", IFace)
7657         .Case("copyWithZone", IFace)
7658         .Case("mutableCopy", IFace)
7659         .Case("mutableCopyWithZone", IFace)
7660         .Case("awakeFromCoder", IFace)
7661         .Case("replacementObjectFromCoder", IFace)
7662         .Case("class", IFace)
7663         .Case("classForCoder", IFace)
7664         .Case("superclass", Super)
7665         .Default(nullptr);
7666 
7667   return llvm::StringSwitch<ObjCInterfaceDecl *>(Id->getName())
7668       .Case("new", IFace)
7669       .Case("alloc", IFace)
7670       .Case("allocWithZone", IFace)
7671       .Case("class", IFace)
7672       .Case("superclass", Super)
7673       .Default(nullptr);
7674 }
7675 
7676 // Add a special completion for a message send to "super", which fills in the
7677 // most likely case of forwarding all of our arguments to the superclass
7678 // function.
7679 ///
7680 /// \param S The semantic analysis object.
7681 ///
7682 /// \param NeedSuperKeyword Whether we need to prefix this completion with
7683 /// the "super" keyword. Otherwise, we just need to provide the arguments.
7684 ///
7685 /// \param SelIdents The identifiers in the selector that have already been
7686 /// provided as arguments for a send to "super".
7687 ///
7688 /// \param Results The set of results to augment.
7689 ///
7690 /// \returns the Objective-C method declaration that would be invoked by
7691 /// this "super" completion. If NULL, no completion was added.
7692 static ObjCMethodDecl *
7693 AddSuperSendCompletion(Sema &S, bool NeedSuperKeyword,
7694                        ArrayRef<IdentifierInfo *> SelIdents,
7695                        ResultBuilder &Results) {
7696   ObjCMethodDecl *CurMethod = S.getCurMethodDecl();
7697   if (!CurMethod)
7698     return nullptr;
7699 
7700   ObjCInterfaceDecl *Class = CurMethod->getClassInterface();
7701   if (!Class)
7702     return nullptr;
7703 
7704   // Try to find a superclass method with the same selector.
7705   ObjCMethodDecl *SuperMethod = nullptr;
7706   while ((Class = Class->getSuperClass()) && !SuperMethod) {
7707     // Check in the class
7708     SuperMethod = Class->getMethod(CurMethod->getSelector(),
7709                                    CurMethod->isInstanceMethod());
7710 
7711     // Check in categories or class extensions.
7712     if (!SuperMethod) {
7713       for (const auto *Cat : Class->known_categories()) {
7714         if ((SuperMethod = Cat->getMethod(CurMethod->getSelector(),
7715                                           CurMethod->isInstanceMethod())))
7716           break;
7717       }
7718     }
7719   }
7720 
7721   if (!SuperMethod)
7722     return nullptr;
7723 
7724   // Check whether the superclass method has the same signature.
7725   if (CurMethod->param_size() != SuperMethod->param_size() ||
7726       CurMethod->isVariadic() != SuperMethod->isVariadic())
7727     return nullptr;
7728 
7729   for (ObjCMethodDecl::param_iterator CurP = CurMethod->param_begin(),
7730                                       CurPEnd = CurMethod->param_end(),
7731                                       SuperP = SuperMethod->param_begin();
7732        CurP != CurPEnd; ++CurP, ++SuperP) {
7733     // Make sure the parameter types are compatible.
7734     if (!S.Context.hasSameUnqualifiedType((*CurP)->getType(),
7735                                           (*SuperP)->getType()))
7736       return nullptr;
7737 
7738     // Make sure we have a parameter name to forward!
7739     if (!(*CurP)->getIdentifier())
7740       return nullptr;
7741   }
7742 
7743   // We have a superclass method. Now, form the send-to-super completion.
7744   CodeCompletionBuilder Builder(Results.getAllocator(),
7745                                 Results.getCodeCompletionTUInfo());
7746 
7747   // Give this completion a return type.
7748   AddResultTypeChunk(S.Context, getCompletionPrintingPolicy(S), SuperMethod,
7749                      Results.getCompletionContext().getBaseType(), Builder);
7750 
7751   // If we need the "super" keyword, add it (plus some spacing).
7752   if (NeedSuperKeyword) {
7753     Builder.AddTypedTextChunk("super");
7754     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7755   }
7756 
7757   Selector Sel = CurMethod->getSelector();
7758   if (Sel.isUnarySelector()) {
7759     if (NeedSuperKeyword)
7760       Builder.AddTextChunk(
7761           Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
7762     else
7763       Builder.AddTypedTextChunk(
7764           Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
7765   } else {
7766     ObjCMethodDecl::param_iterator CurP = CurMethod->param_begin();
7767     for (unsigned I = 0, N = Sel.getNumArgs(); I != N; ++I, ++CurP) {
7768       if (I > SelIdents.size())
7769         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7770 
7771       if (I < SelIdents.size())
7772         Builder.AddInformativeChunk(
7773             Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
7774       else if (NeedSuperKeyword || I > SelIdents.size()) {
7775         Builder.AddTextChunk(
7776             Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
7777         Builder.AddPlaceholderChunk(Builder.getAllocator().CopyString(
7778             (*CurP)->getIdentifier()->getName()));
7779       } else {
7780         Builder.AddTypedTextChunk(
7781             Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
7782         Builder.AddPlaceholderChunk(Builder.getAllocator().CopyString(
7783             (*CurP)->getIdentifier()->getName()));
7784       }
7785     }
7786   }
7787 
7788   Results.AddResult(CodeCompletionResult(Builder.TakeString(), SuperMethod,
7789                                          CCP_SuperCompletion));
7790   return SuperMethod;
7791 }
7792 
7793 void Sema::CodeCompleteObjCMessageReceiver(Scope *S) {
7794   typedef CodeCompletionResult Result;
7795   ResultBuilder Results(
7796       *this, CodeCompleter->getAllocator(),
7797       CodeCompleter->getCodeCompletionTUInfo(),
7798       CodeCompletionContext::CCC_ObjCMessageReceiver,
7799       getLangOpts().CPlusPlus11
7800           ? &ResultBuilder::IsObjCMessageReceiverOrLambdaCapture
7801           : &ResultBuilder::IsObjCMessageReceiver);
7802 
7803   CodeCompletionDeclConsumer Consumer(Results, CurContext);
7804   Results.EnterNewScope();
7805   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
7806                      CodeCompleter->includeGlobals(),
7807                      CodeCompleter->loadExternal());
7808 
7809   // If we are in an Objective-C method inside a class that has a superclass,
7810   // add "super" as an option.
7811   if (ObjCMethodDecl *Method = getCurMethodDecl())
7812     if (ObjCInterfaceDecl *Iface = Method->getClassInterface())
7813       if (Iface->getSuperClass()) {
7814         Results.AddResult(Result("super"));
7815 
7816         AddSuperSendCompletion(*this, /*NeedSuperKeyword=*/true, None, Results);
7817       }
7818 
7819   if (getLangOpts().CPlusPlus11)
7820     addThisCompletion(*this, Results);
7821 
7822   Results.ExitScope();
7823 
7824   if (CodeCompleter->includeMacros())
7825     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), false);
7826   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7827                             Results.data(), Results.size());
7828 }
7829 
7830 void Sema::CodeCompleteObjCSuperMessage(Scope *S, SourceLocation SuperLoc,
7831                                         ArrayRef<IdentifierInfo *> SelIdents,
7832                                         bool AtArgumentExpression) {
7833   ObjCInterfaceDecl *CDecl = nullptr;
7834   if (ObjCMethodDecl *CurMethod = getCurMethodDecl()) {
7835     // Figure out which interface we're in.
7836     CDecl = CurMethod->getClassInterface();
7837     if (!CDecl)
7838       return;
7839 
7840     // Find the superclass of this class.
7841     CDecl = CDecl->getSuperClass();
7842     if (!CDecl)
7843       return;
7844 
7845     if (CurMethod->isInstanceMethod()) {
7846       // We are inside an instance method, which means that the message
7847       // send [super ...] is actually calling an instance method on the
7848       // current object.
7849       return CodeCompleteObjCInstanceMessage(S, nullptr, SelIdents,
7850                                              AtArgumentExpression, CDecl);
7851     }
7852 
7853     // Fall through to send to the superclass in CDecl.
7854   } else {
7855     // "super" may be the name of a type or variable. Figure out which
7856     // it is.
7857     IdentifierInfo *Super = getSuperIdentifier();
7858     NamedDecl *ND = LookupSingleName(S, Super, SuperLoc, LookupOrdinaryName);
7859     if ((CDecl = dyn_cast_or_null<ObjCInterfaceDecl>(ND))) {
7860       // "super" names an interface. Use it.
7861     } else if (TypeDecl *TD = dyn_cast_or_null<TypeDecl>(ND)) {
7862       if (const ObjCObjectType *Iface =
7863               Context.getTypeDeclType(TD)->getAs<ObjCObjectType>())
7864         CDecl = Iface->getInterface();
7865     } else if (ND && isa<UnresolvedUsingTypenameDecl>(ND)) {
7866       // "super" names an unresolved type; we can't be more specific.
7867     } else {
7868       // Assume that "super" names some kind of value and parse that way.
7869       CXXScopeSpec SS;
7870       SourceLocation TemplateKWLoc;
7871       UnqualifiedId id;
7872       id.setIdentifier(Super, SuperLoc);
7873       ExprResult SuperExpr = ActOnIdExpression(S, SS, TemplateKWLoc, id,
7874                                                /*HasTrailingLParen=*/false,
7875                                                /*IsAddressOfOperand=*/false);
7876       return CodeCompleteObjCInstanceMessage(S, (Expr *)SuperExpr.get(),
7877                                              SelIdents, AtArgumentExpression);
7878     }
7879 
7880     // Fall through
7881   }
7882 
7883   ParsedType Receiver;
7884   if (CDecl)
7885     Receiver = ParsedType::make(Context.getObjCInterfaceType(CDecl));
7886   return CodeCompleteObjCClassMessage(S, Receiver, SelIdents,
7887                                       AtArgumentExpression,
7888                                       /*IsSuper=*/true);
7889 }
7890 
7891 /// Given a set of code-completion results for the argument of a message
7892 /// send, determine the preferred type (if any) for that argument expression.
7893 static QualType getPreferredArgumentTypeForMessageSend(ResultBuilder &Results,
7894                                                        unsigned NumSelIdents) {
7895   typedef CodeCompletionResult Result;
7896   ASTContext &Context = Results.getSema().Context;
7897 
7898   QualType PreferredType;
7899   unsigned BestPriority = CCP_Unlikely * 2;
7900   Result *ResultsData = Results.data();
7901   for (unsigned I = 0, N = Results.size(); I != N; ++I) {
7902     Result &R = ResultsData[I];
7903     if (R.Kind == Result::RK_Declaration &&
7904         isa<ObjCMethodDecl>(R.Declaration)) {
7905       if (R.Priority <= BestPriority) {
7906         const ObjCMethodDecl *Method = cast<ObjCMethodDecl>(R.Declaration);
7907         if (NumSelIdents <= Method->param_size()) {
7908           QualType MyPreferredType =
7909               Method->parameters()[NumSelIdents - 1]->getType();
7910           if (R.Priority < BestPriority || PreferredType.isNull()) {
7911             BestPriority = R.Priority;
7912             PreferredType = MyPreferredType;
7913           } else if (!Context.hasSameUnqualifiedType(PreferredType,
7914                                                      MyPreferredType)) {
7915             PreferredType = QualType();
7916           }
7917         }
7918       }
7919     }
7920   }
7921 
7922   return PreferredType;
7923 }
7924 
7925 static void AddClassMessageCompletions(Sema &SemaRef, Scope *S,
7926                                        ParsedType Receiver,
7927                                        ArrayRef<IdentifierInfo *> SelIdents,
7928                                        bool AtArgumentExpression, bool IsSuper,
7929                                        ResultBuilder &Results) {
7930   typedef CodeCompletionResult Result;
7931   ObjCInterfaceDecl *CDecl = nullptr;
7932 
7933   // If the given name refers to an interface type, retrieve the
7934   // corresponding declaration.
7935   if (Receiver) {
7936     QualType T = SemaRef.GetTypeFromParser(Receiver, nullptr);
7937     if (!T.isNull())
7938       if (const ObjCObjectType *Interface = T->getAs<ObjCObjectType>())
7939         CDecl = Interface->getInterface();
7940   }
7941 
7942   // Add all of the factory methods in this Objective-C class, its protocols,
7943   // superclasses, categories, implementation, etc.
7944   Results.EnterNewScope();
7945 
7946   // If this is a send-to-super, try to add the special "super" send
7947   // completion.
7948   if (IsSuper) {
7949     if (ObjCMethodDecl *SuperMethod =
7950             AddSuperSendCompletion(SemaRef, false, SelIdents, Results))
7951       Results.Ignore(SuperMethod);
7952   }
7953 
7954   // If we're inside an Objective-C method definition, prefer its selector to
7955   // others.
7956   if (ObjCMethodDecl *CurMethod = SemaRef.getCurMethodDecl())
7957     Results.setPreferredSelector(CurMethod->getSelector());
7958 
7959   VisitedSelectorSet Selectors;
7960   if (CDecl)
7961     AddObjCMethods(CDecl, false, MK_Any, SelIdents, SemaRef.CurContext,
7962                    Selectors, AtArgumentExpression, Results);
7963   else {
7964     // We're messaging "id" as a type; provide all class/factory methods.
7965 
7966     // If we have an external source, load the entire class method
7967     // pool from the AST file.
7968     if (SemaRef.getExternalSource()) {
7969       for (uint32_t I = 0,
7970                     N = SemaRef.getExternalSource()->GetNumExternalSelectors();
7971            I != N; ++I) {
7972         Selector Sel = SemaRef.getExternalSource()->GetExternalSelector(I);
7973         if (Sel.isNull() || SemaRef.MethodPool.count(Sel))
7974           continue;
7975 
7976         SemaRef.ReadMethodPool(Sel);
7977       }
7978     }
7979 
7980     for (Sema::GlobalMethodPool::iterator M = SemaRef.MethodPool.begin(),
7981                                           MEnd = SemaRef.MethodPool.end();
7982          M != MEnd; ++M) {
7983       for (ObjCMethodList *MethList = &M->second.second;
7984            MethList && MethList->getMethod(); MethList = MethList->getNext()) {
7985         if (!isAcceptableObjCMethod(MethList->getMethod(), MK_Any, SelIdents))
7986           continue;
7987 
7988         Result R(MethList->getMethod(),
7989                  Results.getBasePriority(MethList->getMethod()), nullptr);
7990         R.StartParameter = SelIdents.size();
7991         R.AllParametersAreInformative = false;
7992         Results.MaybeAddResult(R, SemaRef.CurContext);
7993       }
7994     }
7995   }
7996 
7997   Results.ExitScope();
7998 }
7999 
8000 void Sema::CodeCompleteObjCClassMessage(Scope *S, ParsedType Receiver,
8001                                         ArrayRef<IdentifierInfo *> SelIdents,
8002                                         bool AtArgumentExpression,
8003                                         bool IsSuper) {
8004 
8005   QualType T = this->GetTypeFromParser(Receiver);
8006 
8007   ResultBuilder Results(
8008       *this, CodeCompleter->getAllocator(),
8009       CodeCompleter->getCodeCompletionTUInfo(),
8010       CodeCompletionContext(CodeCompletionContext::CCC_ObjCClassMessage, T,
8011                             SelIdents));
8012 
8013   AddClassMessageCompletions(*this, S, Receiver, SelIdents,
8014                              AtArgumentExpression, IsSuper, Results);
8015 
8016   // If we're actually at the argument expression (rather than prior to the
8017   // selector), we're actually performing code completion for an expression.
8018   // Determine whether we have a single, best method. If so, we can
8019   // code-complete the expression using the corresponding parameter type as
8020   // our preferred type, improving completion results.
8021   if (AtArgumentExpression) {
8022     QualType PreferredType =
8023         getPreferredArgumentTypeForMessageSend(Results, SelIdents.size());
8024     if (PreferredType.isNull())
8025       CodeCompleteOrdinaryName(S, PCC_Expression);
8026     else
8027       CodeCompleteExpression(S, PreferredType);
8028     return;
8029   }
8030 
8031   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8032                             Results.data(), Results.size());
8033 }
8034 
8035 void Sema::CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver,
8036                                            ArrayRef<IdentifierInfo *> SelIdents,
8037                                            bool AtArgumentExpression,
8038                                            ObjCInterfaceDecl *Super) {
8039   typedef CodeCompletionResult Result;
8040 
8041   Expr *RecExpr = static_cast<Expr *>(Receiver);
8042 
8043   // If necessary, apply function/array conversion to the receiver.
8044   // C99 6.7.5.3p[7,8].
8045   if (RecExpr) {
8046     ExprResult Conv = DefaultFunctionArrayLvalueConversion(RecExpr);
8047     if (Conv.isInvalid()) // conversion failed. bail.
8048       return;
8049     RecExpr = Conv.get();
8050   }
8051   QualType ReceiverType = RecExpr
8052                               ? RecExpr->getType()
8053                               : Super ? Context.getObjCObjectPointerType(
8054                                             Context.getObjCInterfaceType(Super))
8055                                       : Context.getObjCIdType();
8056 
8057   // If we're messaging an expression with type "id" or "Class", check
8058   // whether we know something special about the receiver that allows
8059   // us to assume a more-specific receiver type.
8060   if (ReceiverType->isObjCIdType() || ReceiverType->isObjCClassType()) {
8061     if (ObjCInterfaceDecl *IFace = GetAssumedMessageSendExprType(RecExpr)) {
8062       if (ReceiverType->isObjCClassType())
8063         return CodeCompleteObjCClassMessage(
8064             S, ParsedType::make(Context.getObjCInterfaceType(IFace)), SelIdents,
8065             AtArgumentExpression, Super);
8066 
8067       ReceiverType =
8068           Context.getObjCObjectPointerType(Context.getObjCInterfaceType(IFace));
8069     }
8070   } else if (RecExpr && getLangOpts().CPlusPlus) {
8071     ExprResult Conv = PerformContextuallyConvertToObjCPointer(RecExpr);
8072     if (Conv.isUsable()) {
8073       RecExpr = Conv.get();
8074       ReceiverType = RecExpr->getType();
8075     }
8076   }
8077 
8078   // Build the set of methods we can see.
8079   ResultBuilder Results(
8080       *this, CodeCompleter->getAllocator(),
8081       CodeCompleter->getCodeCompletionTUInfo(),
8082       CodeCompletionContext(CodeCompletionContext::CCC_ObjCInstanceMessage,
8083                             ReceiverType, SelIdents));
8084 
8085   Results.EnterNewScope();
8086 
8087   // If this is a send-to-super, try to add the special "super" send
8088   // completion.
8089   if (Super) {
8090     if (ObjCMethodDecl *SuperMethod =
8091             AddSuperSendCompletion(*this, false, SelIdents, Results))
8092       Results.Ignore(SuperMethod);
8093   }
8094 
8095   // If we're inside an Objective-C method definition, prefer its selector to
8096   // others.
8097   if (ObjCMethodDecl *CurMethod = getCurMethodDecl())
8098     Results.setPreferredSelector(CurMethod->getSelector());
8099 
8100   // Keep track of the selectors we've already added.
8101   VisitedSelectorSet Selectors;
8102 
8103   // Handle messages to Class. This really isn't a message to an instance
8104   // method, so we treat it the same way we would treat a message send to a
8105   // class method.
8106   if (ReceiverType->isObjCClassType() ||
8107       ReceiverType->isObjCQualifiedClassType()) {
8108     if (ObjCMethodDecl *CurMethod = getCurMethodDecl()) {
8109       if (ObjCInterfaceDecl *ClassDecl = CurMethod->getClassInterface())
8110         AddObjCMethods(ClassDecl, false, MK_Any, SelIdents, CurContext,
8111                        Selectors, AtArgumentExpression, Results);
8112     }
8113   }
8114   // Handle messages to a qualified ID ("id<foo>").
8115   else if (const ObjCObjectPointerType *QualID =
8116                ReceiverType->getAsObjCQualifiedIdType()) {
8117     // Search protocols for instance methods.
8118     for (auto *I : QualID->quals())
8119       AddObjCMethods(I, true, MK_Any, SelIdents, CurContext, Selectors,
8120                      AtArgumentExpression, Results);
8121   }
8122   // Handle messages to a pointer to interface type.
8123   else if (const ObjCObjectPointerType *IFacePtr =
8124                ReceiverType->getAsObjCInterfacePointerType()) {
8125     // Search the class, its superclasses, etc., for instance methods.
8126     AddObjCMethods(IFacePtr->getInterfaceDecl(), true, MK_Any, SelIdents,
8127                    CurContext, Selectors, AtArgumentExpression, Results);
8128 
8129     // Search protocols for instance methods.
8130     for (auto *I : IFacePtr->quals())
8131       AddObjCMethods(I, true, MK_Any, SelIdents, CurContext, Selectors,
8132                      AtArgumentExpression, Results);
8133   }
8134   // Handle messages to "id".
8135   else if (ReceiverType->isObjCIdType()) {
8136     // We're messaging "id", so provide all instance methods we know
8137     // about as code-completion results.
8138 
8139     // If we have an external source, load the entire class method
8140     // pool from the AST file.
8141     if (ExternalSource) {
8142       for (uint32_t I = 0, N = ExternalSource->GetNumExternalSelectors();
8143            I != N; ++I) {
8144         Selector Sel = ExternalSource->GetExternalSelector(I);
8145         if (Sel.isNull() || MethodPool.count(Sel))
8146           continue;
8147 
8148         ReadMethodPool(Sel);
8149       }
8150     }
8151 
8152     for (GlobalMethodPool::iterator M = MethodPool.begin(),
8153                                     MEnd = MethodPool.end();
8154          M != MEnd; ++M) {
8155       for (ObjCMethodList *MethList = &M->second.first;
8156            MethList && MethList->getMethod(); MethList = MethList->getNext()) {
8157         if (!isAcceptableObjCMethod(MethList->getMethod(), MK_Any, SelIdents))
8158           continue;
8159 
8160         if (!Selectors.insert(MethList->getMethod()->getSelector()).second)
8161           continue;
8162 
8163         Result R(MethList->getMethod(),
8164                  Results.getBasePriority(MethList->getMethod()), nullptr);
8165         R.StartParameter = SelIdents.size();
8166         R.AllParametersAreInformative = false;
8167         Results.MaybeAddResult(R, CurContext);
8168       }
8169     }
8170   }
8171   Results.ExitScope();
8172 
8173   // If we're actually at the argument expression (rather than prior to the
8174   // selector), we're actually performing code completion for an expression.
8175   // Determine whether we have a single, best method. If so, we can
8176   // code-complete the expression using the corresponding parameter type as
8177   // our preferred type, improving completion results.
8178   if (AtArgumentExpression) {
8179     QualType PreferredType =
8180         getPreferredArgumentTypeForMessageSend(Results, SelIdents.size());
8181     if (PreferredType.isNull())
8182       CodeCompleteOrdinaryName(S, PCC_Expression);
8183     else
8184       CodeCompleteExpression(S, PreferredType);
8185     return;
8186   }
8187 
8188   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8189                             Results.data(), Results.size());
8190 }
8191 
8192 void Sema::CodeCompleteObjCForCollection(Scope *S,
8193                                          DeclGroupPtrTy IterationVar) {
8194   CodeCompleteExpressionData Data;
8195   Data.ObjCCollection = true;
8196 
8197   if (IterationVar.getAsOpaquePtr()) {
8198     DeclGroupRef DG = IterationVar.get();
8199     for (DeclGroupRef::iterator I = DG.begin(), End = DG.end(); I != End; ++I) {
8200       if (*I)
8201         Data.IgnoreDecls.push_back(*I);
8202     }
8203   }
8204 
8205   CodeCompleteExpression(S, Data);
8206 }
8207 
8208 void Sema::CodeCompleteObjCSelector(Scope *S,
8209                                     ArrayRef<IdentifierInfo *> SelIdents) {
8210   // If we have an external source, load the entire class method
8211   // pool from the AST file.
8212   if (ExternalSource) {
8213     for (uint32_t I = 0, N = ExternalSource->GetNumExternalSelectors(); I != N;
8214          ++I) {
8215       Selector Sel = ExternalSource->GetExternalSelector(I);
8216       if (Sel.isNull() || MethodPool.count(Sel))
8217         continue;
8218 
8219       ReadMethodPool(Sel);
8220     }
8221   }
8222 
8223   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8224                         CodeCompleter->getCodeCompletionTUInfo(),
8225                         CodeCompletionContext::CCC_SelectorName);
8226   Results.EnterNewScope();
8227   for (GlobalMethodPool::iterator M = MethodPool.begin(),
8228                                   MEnd = MethodPool.end();
8229        M != MEnd; ++M) {
8230 
8231     Selector Sel = M->first;
8232     if (!isAcceptableObjCSelector(Sel, MK_Any, SelIdents))
8233       continue;
8234 
8235     CodeCompletionBuilder Builder(Results.getAllocator(),
8236                                   Results.getCodeCompletionTUInfo());
8237     if (Sel.isUnarySelector()) {
8238       Builder.AddTypedTextChunk(
8239           Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
8240       Results.AddResult(Builder.TakeString());
8241       continue;
8242     }
8243 
8244     std::string Accumulator;
8245     for (unsigned I = 0, N = Sel.getNumArgs(); I != N; ++I) {
8246       if (I == SelIdents.size()) {
8247         if (!Accumulator.empty()) {
8248           Builder.AddInformativeChunk(
8249               Builder.getAllocator().CopyString(Accumulator));
8250           Accumulator.clear();
8251         }
8252       }
8253 
8254       Accumulator += Sel.getNameForSlot(I);
8255       Accumulator += ':';
8256     }
8257     Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(Accumulator));
8258     Results.AddResult(Builder.TakeString());
8259   }
8260   Results.ExitScope();
8261 
8262   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8263                             Results.data(), Results.size());
8264 }
8265 
8266 /// Add all of the protocol declarations that we find in the given
8267 /// (translation unit) context.
8268 static void AddProtocolResults(DeclContext *Ctx, DeclContext *CurContext,
8269                                bool OnlyForwardDeclarations,
8270                                ResultBuilder &Results) {
8271   typedef CodeCompletionResult Result;
8272 
8273   for (const auto *D : Ctx->decls()) {
8274     // Record any protocols we find.
8275     if (const auto *Proto = dyn_cast<ObjCProtocolDecl>(D))
8276       if (!OnlyForwardDeclarations || !Proto->hasDefinition())
8277         Results.AddResult(
8278             Result(Proto, Results.getBasePriority(Proto), nullptr), CurContext,
8279             nullptr, false);
8280   }
8281 }
8282 
8283 void Sema::CodeCompleteObjCProtocolReferences(
8284     ArrayRef<IdentifierLocPair> Protocols) {
8285   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8286                         CodeCompleter->getCodeCompletionTUInfo(),
8287                         CodeCompletionContext::CCC_ObjCProtocolName);
8288 
8289   if (CodeCompleter->includeGlobals()) {
8290     Results.EnterNewScope();
8291 
8292     // Tell the result set to ignore all of the protocols we have
8293     // already seen.
8294     // FIXME: This doesn't work when caching code-completion results.
8295     for (const IdentifierLocPair &Pair : Protocols)
8296       if (ObjCProtocolDecl *Protocol = LookupProtocol(Pair.first, Pair.second))
8297         Results.Ignore(Protocol);
8298 
8299     // Add all protocols.
8300     AddProtocolResults(Context.getTranslationUnitDecl(), CurContext, false,
8301                        Results);
8302 
8303     Results.ExitScope();
8304   }
8305 
8306   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8307                             Results.data(), Results.size());
8308 }
8309 
8310 void Sema::CodeCompleteObjCProtocolDecl(Scope *) {
8311   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8312                         CodeCompleter->getCodeCompletionTUInfo(),
8313                         CodeCompletionContext::CCC_ObjCProtocolName);
8314 
8315   if (CodeCompleter->includeGlobals()) {
8316     Results.EnterNewScope();
8317 
8318     // Add all protocols.
8319     AddProtocolResults(Context.getTranslationUnitDecl(), CurContext, true,
8320                        Results);
8321 
8322     Results.ExitScope();
8323   }
8324 
8325   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8326                             Results.data(), Results.size());
8327 }
8328 
8329 /// Add all of the Objective-C interface declarations that we find in
8330 /// the given (translation unit) context.
8331 static void AddInterfaceResults(DeclContext *Ctx, DeclContext *CurContext,
8332                                 bool OnlyForwardDeclarations,
8333                                 bool OnlyUnimplemented,
8334                                 ResultBuilder &Results) {
8335   typedef CodeCompletionResult Result;
8336 
8337   for (const auto *D : Ctx->decls()) {
8338     // Record any interfaces we find.
8339     if (const auto *Class = dyn_cast<ObjCInterfaceDecl>(D))
8340       if ((!OnlyForwardDeclarations || !Class->hasDefinition()) &&
8341           (!OnlyUnimplemented || !Class->getImplementation()))
8342         Results.AddResult(
8343             Result(Class, Results.getBasePriority(Class), nullptr), CurContext,
8344             nullptr, false);
8345   }
8346 }
8347 
8348 void Sema::CodeCompleteObjCInterfaceDecl(Scope *S) {
8349   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8350                         CodeCompleter->getCodeCompletionTUInfo(),
8351                         CodeCompletionContext::CCC_ObjCInterfaceName);
8352   Results.EnterNewScope();
8353 
8354   if (CodeCompleter->includeGlobals()) {
8355     // Add all classes.
8356     AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
8357                         false, Results);
8358   }
8359 
8360   Results.ExitScope();
8361 
8362   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8363                             Results.data(), Results.size());
8364 }
8365 
8366 void Sema::CodeCompleteObjCSuperclass(Scope *S, IdentifierInfo *ClassName,
8367                                       SourceLocation ClassNameLoc) {
8368   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8369                         CodeCompleter->getCodeCompletionTUInfo(),
8370                         CodeCompletionContext::CCC_ObjCInterfaceName);
8371   Results.EnterNewScope();
8372 
8373   // Make sure that we ignore the class we're currently defining.
8374   NamedDecl *CurClass =
8375       LookupSingleName(TUScope, ClassName, ClassNameLoc, LookupOrdinaryName);
8376   if (CurClass && isa<ObjCInterfaceDecl>(CurClass))
8377     Results.Ignore(CurClass);
8378 
8379   if (CodeCompleter->includeGlobals()) {
8380     // Add all classes.
8381     AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
8382                         false, Results);
8383   }
8384 
8385   Results.ExitScope();
8386 
8387   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8388                             Results.data(), Results.size());
8389 }
8390 
8391 void Sema::CodeCompleteObjCImplementationDecl(Scope *S) {
8392   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8393                         CodeCompleter->getCodeCompletionTUInfo(),
8394                         CodeCompletionContext::CCC_ObjCImplementation);
8395   Results.EnterNewScope();
8396 
8397   if (CodeCompleter->includeGlobals()) {
8398     // Add all unimplemented classes.
8399     AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
8400                         true, Results);
8401   }
8402 
8403   Results.ExitScope();
8404 
8405   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8406                             Results.data(), Results.size());
8407 }
8408 
8409 void Sema::CodeCompleteObjCInterfaceCategory(Scope *S,
8410                                              IdentifierInfo *ClassName,
8411                                              SourceLocation ClassNameLoc) {
8412   typedef CodeCompletionResult Result;
8413 
8414   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8415                         CodeCompleter->getCodeCompletionTUInfo(),
8416                         CodeCompletionContext::CCC_ObjCCategoryName);
8417 
8418   // Ignore any categories we find that have already been implemented by this
8419   // interface.
8420   llvm::SmallPtrSet<IdentifierInfo *, 16> CategoryNames;
8421   NamedDecl *CurClass =
8422       LookupSingleName(TUScope, ClassName, ClassNameLoc, LookupOrdinaryName);
8423   if (ObjCInterfaceDecl *Class =
8424           dyn_cast_or_null<ObjCInterfaceDecl>(CurClass)) {
8425     for (const auto *Cat : Class->visible_categories())
8426       CategoryNames.insert(Cat->getIdentifier());
8427   }
8428 
8429   // Add all of the categories we know about.
8430   Results.EnterNewScope();
8431   TranslationUnitDecl *TU = Context.getTranslationUnitDecl();
8432   for (const auto *D : TU->decls())
8433     if (const auto *Category = dyn_cast<ObjCCategoryDecl>(D))
8434       if (CategoryNames.insert(Category->getIdentifier()).second)
8435         Results.AddResult(
8436             Result(Category, Results.getBasePriority(Category), nullptr),
8437             CurContext, nullptr, false);
8438   Results.ExitScope();
8439 
8440   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8441                             Results.data(), Results.size());
8442 }
8443 
8444 void Sema::CodeCompleteObjCImplementationCategory(Scope *S,
8445                                                   IdentifierInfo *ClassName,
8446                                                   SourceLocation ClassNameLoc) {
8447   typedef CodeCompletionResult Result;
8448 
8449   // Find the corresponding interface. If we couldn't find the interface, the
8450   // program itself is ill-formed. However, we'll try to be helpful still by
8451   // providing the list of all of the categories we know about.
8452   NamedDecl *CurClass =
8453       LookupSingleName(TUScope, ClassName, ClassNameLoc, LookupOrdinaryName);
8454   ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurClass);
8455   if (!Class)
8456     return CodeCompleteObjCInterfaceCategory(S, ClassName, ClassNameLoc);
8457 
8458   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8459                         CodeCompleter->getCodeCompletionTUInfo(),
8460                         CodeCompletionContext::CCC_ObjCCategoryName);
8461 
8462   // Add all of the categories that have have corresponding interface
8463   // declarations in this class and any of its superclasses, except for
8464   // already-implemented categories in the class itself.
8465   llvm::SmallPtrSet<IdentifierInfo *, 16> CategoryNames;
8466   Results.EnterNewScope();
8467   bool IgnoreImplemented = true;
8468   while (Class) {
8469     for (const auto *Cat : Class->visible_categories()) {
8470       if ((!IgnoreImplemented || !Cat->getImplementation()) &&
8471           CategoryNames.insert(Cat->getIdentifier()).second)
8472         Results.AddResult(Result(Cat, Results.getBasePriority(Cat), nullptr),
8473                           CurContext, nullptr, false);
8474     }
8475 
8476     Class = Class->getSuperClass();
8477     IgnoreImplemented = false;
8478   }
8479   Results.ExitScope();
8480 
8481   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8482                             Results.data(), Results.size());
8483 }
8484 
8485 void Sema::CodeCompleteObjCPropertyDefinition(Scope *S) {
8486   CodeCompletionContext CCContext(CodeCompletionContext::CCC_Other);
8487   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8488                         CodeCompleter->getCodeCompletionTUInfo(), CCContext);
8489 
8490   // Figure out where this @synthesize lives.
8491   ObjCContainerDecl *Container =
8492       dyn_cast_or_null<ObjCContainerDecl>(CurContext);
8493   if (!Container || (!isa<ObjCImplementationDecl>(Container) &&
8494                      !isa<ObjCCategoryImplDecl>(Container)))
8495     return;
8496 
8497   // Ignore any properties that have already been implemented.
8498   Container = getContainerDef(Container);
8499   for (const auto *D : Container->decls())
8500     if (const auto *PropertyImpl = dyn_cast<ObjCPropertyImplDecl>(D))
8501       Results.Ignore(PropertyImpl->getPropertyDecl());
8502 
8503   // Add any properties that we find.
8504   AddedPropertiesSet AddedProperties;
8505   Results.EnterNewScope();
8506   if (ObjCImplementationDecl *ClassImpl =
8507           dyn_cast<ObjCImplementationDecl>(Container))
8508     AddObjCProperties(CCContext, ClassImpl->getClassInterface(), false,
8509                       /*AllowNullaryMethods=*/false, CurContext,
8510                       AddedProperties, Results);
8511   else
8512     AddObjCProperties(CCContext,
8513                       cast<ObjCCategoryImplDecl>(Container)->getCategoryDecl(),
8514                       false, /*AllowNullaryMethods=*/false, CurContext,
8515                       AddedProperties, Results);
8516   Results.ExitScope();
8517 
8518   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8519                             Results.data(), Results.size());
8520 }
8521 
8522 void Sema::CodeCompleteObjCPropertySynthesizeIvar(
8523     Scope *S, IdentifierInfo *PropertyName) {
8524   typedef CodeCompletionResult Result;
8525   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
8526                         CodeCompleter->getCodeCompletionTUInfo(),
8527                         CodeCompletionContext::CCC_Other);
8528 
8529   // Figure out where this @synthesize lives.
8530   ObjCContainerDecl *Container =
8531       dyn_cast_or_null<ObjCContainerDecl>(CurContext);
8532   if (!Container || (!isa<ObjCImplementationDecl>(Container) &&
8533                      !isa<ObjCCategoryImplDecl>(Container)))
8534     return;
8535 
8536   // Figure out which interface we're looking into.
8537   ObjCInterfaceDecl *Class = nullptr;
8538   if (ObjCImplementationDecl *ClassImpl =
8539           dyn_cast<ObjCImplementationDecl>(Container))
8540     Class = ClassImpl->getClassInterface();
8541   else
8542     Class = cast<ObjCCategoryImplDecl>(Container)
8543                 ->getCategoryDecl()
8544                 ->getClassInterface();
8545 
8546   // Determine the type of the property we're synthesizing.
8547   QualType PropertyType = Context.getObjCIdType();
8548   if (Class) {
8549     if (ObjCPropertyDecl *Property = Class->FindPropertyDeclaration(
8550             PropertyName, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {
8551       PropertyType =
8552           Property->getType().getNonReferenceType().getUnqualifiedType();
8553 
8554       // Give preference to ivars
8555       Results.setPreferredType(PropertyType);
8556     }
8557   }
8558 
8559   // Add all of the instance variables in this class and its superclasses.
8560   Results.EnterNewScope();
8561   bool SawSimilarlyNamedIvar = false;
8562   std::string NameWithPrefix;
8563   NameWithPrefix += '_';
8564   NameWithPrefix += PropertyName->getName();
8565   std::string NameWithSuffix = PropertyName->getName().str();
8566   NameWithSuffix += '_';
8567   for (; Class; Class = Class->getSuperClass()) {
8568     for (ObjCIvarDecl *Ivar = Class->all_declared_ivar_begin(); Ivar;
8569          Ivar = Ivar->getNextIvar()) {
8570       Results.AddResult(Result(Ivar, Results.getBasePriority(Ivar), nullptr),
8571                         CurContext, nullptr, false);
8572 
8573       // Determine whether we've seen an ivar with a name similar to the
8574       // property.
8575       if ((PropertyName == Ivar->getIdentifier() ||
8576            NameWithPrefix == Ivar->getName() ||
8577            NameWithSuffix == Ivar->getName())) {
8578         SawSimilarlyNamedIvar = true;
8579 
8580         // Reduce the priority of this result by one, to give it a slight
8581         // advantage over other results whose names don't match so closely.
8582         if (Results.size() &&
8583             Results.data()[Results.size() - 1].Kind ==
8584                 CodeCompletionResult::RK_Declaration &&
8585             Results.data()[Results.size() - 1].Declaration == Ivar)
8586           Results.data()[Results.size() - 1].Priority--;
8587       }
8588     }
8589   }
8590 
8591   if (!SawSimilarlyNamedIvar) {
8592     // Create ivar result _propName, that the user can use to synthesize
8593     // an ivar of the appropriate type.
8594     unsigned Priority = CCP_MemberDeclaration + 1;
8595     typedef CodeCompletionResult Result;
8596     CodeCompletionAllocator &Allocator = Results.getAllocator();
8597     CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo(),
8598                                   Priority, CXAvailability_Available);
8599 
8600     PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
8601     Builder.AddResultTypeChunk(
8602         GetCompletionTypeString(PropertyType, Context, Policy, Allocator));
8603     Builder.AddTypedTextChunk(Allocator.CopyString(NameWithPrefix));
8604     Results.AddResult(
8605         Result(Builder.TakeString(), Priority, CXCursor_ObjCIvarDecl));
8606   }
8607 
8608   Results.ExitScope();
8609 
8610   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
8611                             Results.data(), Results.size());
8612 }
8613 
8614 // Mapping from selectors to the methods that implement that selector, along
8615 // with the "in original class" flag.
8616 typedef llvm::DenseMap<Selector,
8617                        llvm::PointerIntPair<ObjCMethodDecl *, 1, bool>>
8618     KnownMethodsMap;
8619 
8620 /// Find all of the methods that reside in the given container
8621 /// (and its superclasses, protocols, etc.) that meet the given
8622 /// criteria. Insert those methods into the map of known methods,
8623 /// indexed by selector so they can be easily found.
8624 static void FindImplementableMethods(ASTContext &Context,
8625                                      ObjCContainerDecl *Container,
8626                                      Optional<bool> WantInstanceMethods,
8627                                      QualType ReturnType,
8628                                      KnownMethodsMap &KnownMethods,
8629                                      bool InOriginalClass = true) {
8630   if (ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container)) {
8631     // Make sure we have a definition; that's what we'll walk.
8632     if (!IFace->hasDefinition())
8633       return;
8634 
8635     IFace = IFace->getDefinition();
8636     Container = IFace;
8637 
8638     const ObjCList<ObjCProtocolDecl> &Protocols =
8639         IFace->getReferencedProtocols();
8640     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
8641                                               E = Protocols.end();
8642          I != E; ++I)
8643       FindImplementableMethods(Context, *I, WantInstanceMethods, ReturnType,
8644                                KnownMethods, InOriginalClass);
8645 
8646     // Add methods from any class extensions and categories.
8647     for (auto *Cat : IFace->visible_categories()) {
8648       FindImplementableMethods(Context, Cat, WantInstanceMethods, ReturnType,
8649                                KnownMethods, false);
8650     }
8651 
8652     // Visit the superclass.
8653     if (IFace->getSuperClass())
8654       FindImplementableMethods(Context, IFace->getSuperClass(),
8655                                WantInstanceMethods, ReturnType, KnownMethods,
8656                                false);
8657   }
8658 
8659   if (ObjCCategoryDecl *Category = dyn_cast<ObjCCategoryDecl>(Container)) {
8660     // Recurse into protocols.
8661     const ObjCList<ObjCProtocolDecl> &Protocols =
8662         Category->getReferencedProtocols();
8663     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
8664                                               E = Protocols.end();
8665          I != E; ++I)
8666       FindImplementableMethods(Context, *I, WantInstanceMethods, ReturnType,
8667                                KnownMethods, InOriginalClass);
8668 
8669     // If this category is the original class, jump to the interface.
8670     if (InOriginalClass && Category->getClassInterface())
8671       FindImplementableMethods(Context, Category->getClassInterface(),
8672                                WantInstanceMethods, ReturnType, KnownMethods,
8673                                false);
8674   }
8675 
8676   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
8677     // Make sure we have a definition; that's what we'll walk.
8678     if (!Protocol->hasDefinition())
8679       return;
8680     Protocol = Protocol->getDefinition();
8681     Container = Protocol;
8682 
8683     // Recurse into protocols.
8684     const ObjCList<ObjCProtocolDecl> &Protocols =
8685         Protocol->getReferencedProtocols();
8686     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
8687                                               E = Protocols.end();
8688          I != E; ++I)
8689       FindImplementableMethods(Context, *I, WantInstanceMethods, ReturnType,
8690                                KnownMethods, false);
8691   }
8692 
8693   // Add methods in this container. This operation occurs last because
8694   // we want the methods from this container to override any methods
8695   // we've previously seen with the same selector.
8696   for (auto *M : Container->methods()) {
8697     if (!WantInstanceMethods || M->isInstanceMethod() == *WantInstanceMethods) {
8698       if (!ReturnType.isNull() &&
8699           !Context.hasSameUnqualifiedType(ReturnType, M->getReturnType()))
8700         continue;
8701 
8702       KnownMethods[M->getSelector()] =
8703           KnownMethodsMap::mapped_type(M, InOriginalClass);
8704     }
8705   }
8706 }
8707 
8708 /// Add the parenthesized return or parameter type chunk to a code
8709 /// completion string.
8710 static void AddObjCPassingTypeChunk(QualType Type, unsigned ObjCDeclQuals,
8711                                     ASTContext &Context,
8712                                     const PrintingPolicy &Policy,
8713                                     CodeCompletionBuilder &Builder) {
8714   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8715   std::string Quals = formatObjCParamQualifiers(ObjCDeclQuals, Type);
8716   if (!Quals.empty())
8717     Builder.AddTextChunk(Builder.getAllocator().CopyString(Quals));
8718   Builder.AddTextChunk(
8719       GetCompletionTypeString(Type, Context, Policy, Builder.getAllocator()));
8720   Builder.AddChunk(CodeCompletionString::CK_RightParen);
8721 }
8722 
8723 /// Determine whether the given class is or inherits from a class by
8724 /// the given name.
8725 static bool InheritsFromClassNamed(ObjCInterfaceDecl *Class, StringRef Name) {
8726   if (!Class)
8727     return false;
8728 
8729   if (Class->getIdentifier() && Class->getIdentifier()->getName() == Name)
8730     return true;
8731 
8732   return InheritsFromClassNamed(Class->getSuperClass(), Name);
8733 }
8734 
8735 /// Add code completions for Objective-C Key-Value Coding (KVC) and
8736 /// Key-Value Observing (KVO).
8737 static void AddObjCKeyValueCompletions(ObjCPropertyDecl *Property,
8738                                        bool IsInstanceMethod,
8739                                        QualType ReturnType, ASTContext &Context,
8740                                        VisitedSelectorSet &KnownSelectors,
8741                                        ResultBuilder &Results) {
8742   IdentifierInfo *PropName = Property->getIdentifier();
8743   if (!PropName || PropName->getLength() == 0)
8744     return;
8745 
8746   PrintingPolicy Policy = getCompletionPrintingPolicy(Results.getSema());
8747 
8748   // Builder that will create each code completion.
8749   typedef CodeCompletionResult Result;
8750   CodeCompletionAllocator &Allocator = Results.getAllocator();
8751   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
8752 
8753   // The selector table.
8754   SelectorTable &Selectors = Context.Selectors;
8755 
8756   // The property name, copied into the code completion allocation region
8757   // on demand.
8758   struct KeyHolder {
8759     CodeCompletionAllocator &Allocator;
8760     StringRef Key;
8761     const char *CopiedKey;
8762 
8763     KeyHolder(CodeCompletionAllocator &Allocator, StringRef Key)
8764         : Allocator(Allocator), Key(Key), CopiedKey(nullptr) {}
8765 
8766     operator const char *() {
8767       if (CopiedKey)
8768         return CopiedKey;
8769 
8770       return CopiedKey = Allocator.CopyString(Key);
8771     }
8772   } Key(Allocator, PropName->getName());
8773 
8774   // The uppercased name of the property name.
8775   std::string UpperKey = std::string(PropName->getName());
8776   if (!UpperKey.empty())
8777     UpperKey[0] = toUppercase(UpperKey[0]);
8778 
8779   bool ReturnTypeMatchesProperty =
8780       ReturnType.isNull() ||
8781       Context.hasSameUnqualifiedType(ReturnType.getNonReferenceType(),
8782                                      Property->getType());
8783   bool ReturnTypeMatchesVoid = ReturnType.isNull() || ReturnType->isVoidType();
8784 
8785   // Add the normal accessor -(type)key.
8786   if (IsInstanceMethod &&
8787       KnownSelectors.insert(Selectors.getNullarySelector(PropName)).second &&
8788       ReturnTypeMatchesProperty && !Property->getGetterMethodDecl()) {
8789     if (ReturnType.isNull())
8790       AddObjCPassingTypeChunk(Property->getType(), /*Quals=*/0, Context, Policy,
8791                               Builder);
8792 
8793     Builder.AddTypedTextChunk(Key);
8794     Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
8795                              CXCursor_ObjCInstanceMethodDecl));
8796   }
8797 
8798   // If we have an integral or boolean property (or the user has provided
8799   // an integral or boolean return type), add the accessor -(type)isKey.
8800   if (IsInstanceMethod &&
8801       ((!ReturnType.isNull() &&
8802         (ReturnType->isIntegerType() || ReturnType->isBooleanType())) ||
8803        (ReturnType.isNull() && (Property->getType()->isIntegerType() ||
8804                                 Property->getType()->isBooleanType())))) {
8805     std::string SelectorName = (Twine("is") + UpperKey).str();
8806     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8807     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
8808             .second) {
8809       if (ReturnType.isNull()) {
8810         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8811         Builder.AddTextChunk("BOOL");
8812         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8813       }
8814 
8815       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorId->getName()));
8816       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
8817                                CXCursor_ObjCInstanceMethodDecl));
8818     }
8819   }
8820 
8821   // Add the normal mutator.
8822   if (IsInstanceMethod && ReturnTypeMatchesVoid &&
8823       !Property->getSetterMethodDecl()) {
8824     std::string SelectorName = (Twine("set") + UpperKey).str();
8825     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8826     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8827       if (ReturnType.isNull()) {
8828         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8829         Builder.AddTextChunk("void");
8830         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8831       }
8832 
8833       Builder.AddTypedTextChunk(
8834           Allocator.CopyString(SelectorId->getName() + ":"));
8835       AddObjCPassingTypeChunk(Property->getType(), /*Quals=*/0, Context, Policy,
8836                               Builder);
8837       Builder.AddTextChunk(Key);
8838       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
8839                                CXCursor_ObjCInstanceMethodDecl));
8840     }
8841   }
8842 
8843   // Indexed and unordered accessors
8844   unsigned IndexedGetterPriority = CCP_CodePattern;
8845   unsigned IndexedSetterPriority = CCP_CodePattern;
8846   unsigned UnorderedGetterPriority = CCP_CodePattern;
8847   unsigned UnorderedSetterPriority = CCP_CodePattern;
8848   if (const auto *ObjCPointer =
8849           Property->getType()->getAs<ObjCObjectPointerType>()) {
8850     if (ObjCInterfaceDecl *IFace = ObjCPointer->getInterfaceDecl()) {
8851       // If this interface type is not provably derived from a known
8852       // collection, penalize the corresponding completions.
8853       if (!InheritsFromClassNamed(IFace, "NSMutableArray")) {
8854         IndexedSetterPriority += CCD_ProbablyNotObjCCollection;
8855         if (!InheritsFromClassNamed(IFace, "NSArray"))
8856           IndexedGetterPriority += CCD_ProbablyNotObjCCollection;
8857       }
8858 
8859       if (!InheritsFromClassNamed(IFace, "NSMutableSet")) {
8860         UnorderedSetterPriority += CCD_ProbablyNotObjCCollection;
8861         if (!InheritsFromClassNamed(IFace, "NSSet"))
8862           UnorderedGetterPriority += CCD_ProbablyNotObjCCollection;
8863       }
8864     }
8865   } else {
8866     IndexedGetterPriority += CCD_ProbablyNotObjCCollection;
8867     IndexedSetterPriority += CCD_ProbablyNotObjCCollection;
8868     UnorderedGetterPriority += CCD_ProbablyNotObjCCollection;
8869     UnorderedSetterPriority += CCD_ProbablyNotObjCCollection;
8870   }
8871 
8872   // Add -(NSUInteger)countOf<key>
8873   if (IsInstanceMethod &&
8874       (ReturnType.isNull() || ReturnType->isIntegerType())) {
8875     std::string SelectorName = (Twine("countOf") + UpperKey).str();
8876     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8877     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
8878             .second) {
8879       if (ReturnType.isNull()) {
8880         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8881         Builder.AddTextChunk("NSUInteger");
8882         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8883       }
8884 
8885       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorId->getName()));
8886       Results.AddResult(
8887           Result(Builder.TakeString(),
8888                  std::min(IndexedGetterPriority, UnorderedGetterPriority),
8889                  CXCursor_ObjCInstanceMethodDecl));
8890     }
8891   }
8892 
8893   // Indexed getters
8894   // Add -(id)objectInKeyAtIndex:(NSUInteger)index
8895   if (IsInstanceMethod &&
8896       (ReturnType.isNull() || ReturnType->isObjCObjectPointerType())) {
8897     std::string SelectorName = (Twine("objectIn") + UpperKey + "AtIndex").str();
8898     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8899     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8900       if (ReturnType.isNull()) {
8901         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8902         Builder.AddTextChunk("id");
8903         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8904       }
8905 
8906       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8907       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8908       Builder.AddTextChunk("NSUInteger");
8909       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8910       Builder.AddTextChunk("index");
8911       Results.AddResult(Result(Builder.TakeString(), IndexedGetterPriority,
8912                                CXCursor_ObjCInstanceMethodDecl));
8913     }
8914   }
8915 
8916   // Add -(NSArray *)keyAtIndexes:(NSIndexSet *)indexes
8917   if (IsInstanceMethod &&
8918       (ReturnType.isNull() ||
8919        (ReturnType->isObjCObjectPointerType() &&
8920         ReturnType->castAs<ObjCObjectPointerType>()->getInterfaceDecl() &&
8921         ReturnType->castAs<ObjCObjectPointerType>()
8922                 ->getInterfaceDecl()
8923                 ->getName() == "NSArray"))) {
8924     std::string SelectorName = (Twine(Property->getName()) + "AtIndexes").str();
8925     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
8926     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
8927       if (ReturnType.isNull()) {
8928         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8929         Builder.AddTextChunk("NSArray *");
8930         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8931       }
8932 
8933       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8934       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8935       Builder.AddTextChunk("NSIndexSet *");
8936       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8937       Builder.AddTextChunk("indexes");
8938       Results.AddResult(Result(Builder.TakeString(), IndexedGetterPriority,
8939                                CXCursor_ObjCInstanceMethodDecl));
8940     }
8941   }
8942 
8943   // Add -(void)getKey:(type **)buffer range:(NSRange)inRange
8944   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8945     std::string SelectorName = (Twine("get") + UpperKey).str();
8946     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get(SelectorName),
8947                                       &Context.Idents.get("range")};
8948 
8949     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
8950       if (ReturnType.isNull()) {
8951         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8952         Builder.AddTextChunk("void");
8953         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8954       }
8955 
8956       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8957       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8958       Builder.AddPlaceholderChunk("object-type");
8959       Builder.AddTextChunk(" **");
8960       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8961       Builder.AddTextChunk("buffer");
8962       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
8963       Builder.AddTypedTextChunk("range:");
8964       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8965       Builder.AddTextChunk("NSRange");
8966       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8967       Builder.AddTextChunk("inRange");
8968       Results.AddResult(Result(Builder.TakeString(), IndexedGetterPriority,
8969                                CXCursor_ObjCInstanceMethodDecl));
8970     }
8971   }
8972 
8973   // Mutable indexed accessors
8974 
8975   // - (void)insertObject:(type *)object inKeyAtIndex:(NSUInteger)index
8976   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
8977     std::string SelectorName = (Twine("in") + UpperKey + "AtIndex").str();
8978     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get("insertObject"),
8979                                       &Context.Idents.get(SelectorName)};
8980 
8981     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
8982       if (ReturnType.isNull()) {
8983         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8984         Builder.AddTextChunk("void");
8985         Builder.AddChunk(CodeCompletionString::CK_RightParen);
8986       }
8987 
8988       Builder.AddTypedTextChunk("insertObject:");
8989       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8990       Builder.AddPlaceholderChunk("object-type");
8991       Builder.AddTextChunk(" *");
8992       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8993       Builder.AddTextChunk("object");
8994       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
8995       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
8996       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
8997       Builder.AddPlaceholderChunk("NSUInteger");
8998       Builder.AddChunk(CodeCompletionString::CK_RightParen);
8999       Builder.AddTextChunk("index");
9000       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
9001                                CXCursor_ObjCInstanceMethodDecl));
9002     }
9003   }
9004 
9005   // - (void)insertKey:(NSArray *)array atIndexes:(NSIndexSet *)indexes
9006   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9007     std::string SelectorName = (Twine("insert") + UpperKey).str();
9008     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get(SelectorName),
9009                                       &Context.Idents.get("atIndexes")};
9010 
9011     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
9012       if (ReturnType.isNull()) {
9013         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9014         Builder.AddTextChunk("void");
9015         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9016       }
9017 
9018       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9019       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9020       Builder.AddTextChunk("NSArray *");
9021       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9022       Builder.AddTextChunk("array");
9023       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9024       Builder.AddTypedTextChunk("atIndexes:");
9025       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9026       Builder.AddPlaceholderChunk("NSIndexSet *");
9027       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9028       Builder.AddTextChunk("indexes");
9029       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
9030                                CXCursor_ObjCInstanceMethodDecl));
9031     }
9032   }
9033 
9034   // -(void)removeObjectFromKeyAtIndex:(NSUInteger)index
9035   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9036     std::string SelectorName =
9037         (Twine("removeObjectFrom") + UpperKey + "AtIndex").str();
9038     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9039     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
9040       if (ReturnType.isNull()) {
9041         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9042         Builder.AddTextChunk("void");
9043         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9044       }
9045 
9046       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9047       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9048       Builder.AddTextChunk("NSUInteger");
9049       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9050       Builder.AddTextChunk("index");
9051       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
9052                                CXCursor_ObjCInstanceMethodDecl));
9053     }
9054   }
9055 
9056   // -(void)removeKeyAtIndexes:(NSIndexSet *)indexes
9057   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9058     std::string SelectorName = (Twine("remove") + UpperKey + "AtIndexes").str();
9059     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9060     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
9061       if (ReturnType.isNull()) {
9062         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9063         Builder.AddTextChunk("void");
9064         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9065       }
9066 
9067       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9068       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9069       Builder.AddTextChunk("NSIndexSet *");
9070       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9071       Builder.AddTextChunk("indexes");
9072       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
9073                                CXCursor_ObjCInstanceMethodDecl));
9074     }
9075   }
9076 
9077   // - (void)replaceObjectInKeyAtIndex:(NSUInteger)index withObject:(id)object
9078   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9079     std::string SelectorName =
9080         (Twine("replaceObjectIn") + UpperKey + "AtIndex").str();
9081     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get(SelectorName),
9082                                       &Context.Idents.get("withObject")};
9083 
9084     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
9085       if (ReturnType.isNull()) {
9086         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9087         Builder.AddTextChunk("void");
9088         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9089       }
9090 
9091       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9092       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9093       Builder.AddPlaceholderChunk("NSUInteger");
9094       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9095       Builder.AddTextChunk("index");
9096       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9097       Builder.AddTypedTextChunk("withObject:");
9098       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9099       Builder.AddTextChunk("id");
9100       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9101       Builder.AddTextChunk("object");
9102       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
9103                                CXCursor_ObjCInstanceMethodDecl));
9104     }
9105   }
9106 
9107   // - (void)replaceKeyAtIndexes:(NSIndexSet *)indexes withKey:(NSArray *)array
9108   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9109     std::string SelectorName1 =
9110         (Twine("replace") + UpperKey + "AtIndexes").str();
9111     std::string SelectorName2 = (Twine("with") + UpperKey).str();
9112     IdentifierInfo *SelectorIds[2] = {&Context.Idents.get(SelectorName1),
9113                                       &Context.Idents.get(SelectorName2)};
9114 
9115     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds)).second) {
9116       if (ReturnType.isNull()) {
9117         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9118         Builder.AddTextChunk("void");
9119         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9120       }
9121 
9122       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName1 + ":"));
9123       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9124       Builder.AddPlaceholderChunk("NSIndexSet *");
9125       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9126       Builder.AddTextChunk("indexes");
9127       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9128       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName2 + ":"));
9129       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9130       Builder.AddTextChunk("NSArray *");
9131       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9132       Builder.AddTextChunk("array");
9133       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
9134                                CXCursor_ObjCInstanceMethodDecl));
9135     }
9136   }
9137 
9138   // Unordered getters
9139   // - (NSEnumerator *)enumeratorOfKey
9140   if (IsInstanceMethod &&
9141       (ReturnType.isNull() ||
9142        (ReturnType->isObjCObjectPointerType() &&
9143         ReturnType->castAs<ObjCObjectPointerType>()->getInterfaceDecl() &&
9144         ReturnType->castAs<ObjCObjectPointerType>()
9145                 ->getInterfaceDecl()
9146                 ->getName() == "NSEnumerator"))) {
9147     std::string SelectorName = (Twine("enumeratorOf") + UpperKey).str();
9148     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9149     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
9150             .second) {
9151       if (ReturnType.isNull()) {
9152         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9153         Builder.AddTextChunk("NSEnumerator *");
9154         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9155       }
9156 
9157       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName));
9158       Results.AddResult(Result(Builder.TakeString(), UnorderedGetterPriority,
9159                                CXCursor_ObjCInstanceMethodDecl));
9160     }
9161   }
9162 
9163   // - (type *)memberOfKey:(type *)object
9164   if (IsInstanceMethod &&
9165       (ReturnType.isNull() || ReturnType->isObjCObjectPointerType())) {
9166     std::string SelectorName = (Twine("memberOf") + UpperKey).str();
9167     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9168     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
9169       if (ReturnType.isNull()) {
9170         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9171         Builder.AddPlaceholderChunk("object-type");
9172         Builder.AddTextChunk(" *");
9173         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9174       }
9175 
9176       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9177       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9178       if (ReturnType.isNull()) {
9179         Builder.AddPlaceholderChunk("object-type");
9180         Builder.AddTextChunk(" *");
9181       } else {
9182         Builder.AddTextChunk(GetCompletionTypeString(
9183             ReturnType, Context, Policy, Builder.getAllocator()));
9184       }
9185       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9186       Builder.AddTextChunk("object");
9187       Results.AddResult(Result(Builder.TakeString(), UnorderedGetterPriority,
9188                                CXCursor_ObjCInstanceMethodDecl));
9189     }
9190   }
9191 
9192   // Mutable unordered accessors
9193   // - (void)addKeyObject:(type *)object
9194   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9195     std::string SelectorName =
9196         (Twine("add") + UpperKey + Twine("Object")).str();
9197     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9198     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
9199       if (ReturnType.isNull()) {
9200         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9201         Builder.AddTextChunk("void");
9202         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9203       }
9204 
9205       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9206       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9207       Builder.AddPlaceholderChunk("object-type");
9208       Builder.AddTextChunk(" *");
9209       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9210       Builder.AddTextChunk("object");
9211       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
9212                                CXCursor_ObjCInstanceMethodDecl));
9213     }
9214   }
9215 
9216   // - (void)addKey:(NSSet *)objects
9217   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9218     std::string SelectorName = (Twine("add") + UpperKey).str();
9219     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9220     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
9221       if (ReturnType.isNull()) {
9222         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9223         Builder.AddTextChunk("void");
9224         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9225       }
9226 
9227       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9228       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9229       Builder.AddTextChunk("NSSet *");
9230       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9231       Builder.AddTextChunk("objects");
9232       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
9233                                CXCursor_ObjCInstanceMethodDecl));
9234     }
9235   }
9236 
9237   // - (void)removeKeyObject:(type *)object
9238   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9239     std::string SelectorName =
9240         (Twine("remove") + UpperKey + Twine("Object")).str();
9241     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9242     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
9243       if (ReturnType.isNull()) {
9244         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9245         Builder.AddTextChunk("void");
9246         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9247       }
9248 
9249       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9250       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9251       Builder.AddPlaceholderChunk("object-type");
9252       Builder.AddTextChunk(" *");
9253       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9254       Builder.AddTextChunk("object");
9255       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
9256                                CXCursor_ObjCInstanceMethodDecl));
9257     }
9258   }
9259 
9260   // - (void)removeKey:(NSSet *)objects
9261   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9262     std::string SelectorName = (Twine("remove") + UpperKey).str();
9263     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9264     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
9265       if (ReturnType.isNull()) {
9266         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9267         Builder.AddTextChunk("void");
9268         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9269       }
9270 
9271       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9272       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9273       Builder.AddTextChunk("NSSet *");
9274       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9275       Builder.AddTextChunk("objects");
9276       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
9277                                CXCursor_ObjCInstanceMethodDecl));
9278     }
9279   }
9280 
9281   // - (void)intersectKey:(NSSet *)objects
9282   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
9283     std::string SelectorName = (Twine("intersect") + UpperKey).str();
9284     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9285     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId)).second) {
9286       if (ReturnType.isNull()) {
9287         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9288         Builder.AddTextChunk("void");
9289         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9290       }
9291 
9292       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
9293       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9294       Builder.AddTextChunk("NSSet *");
9295       Builder.AddChunk(CodeCompletionString::CK_RightParen);
9296       Builder.AddTextChunk("objects");
9297       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
9298                                CXCursor_ObjCInstanceMethodDecl));
9299     }
9300   }
9301 
9302   // Key-Value Observing
9303   // + (NSSet *)keyPathsForValuesAffectingKey
9304   if (!IsInstanceMethod &&
9305       (ReturnType.isNull() ||
9306        (ReturnType->isObjCObjectPointerType() &&
9307         ReturnType->castAs<ObjCObjectPointerType>()->getInterfaceDecl() &&
9308         ReturnType->castAs<ObjCObjectPointerType>()
9309                 ->getInterfaceDecl()
9310                 ->getName() == "NSSet"))) {
9311     std::string SelectorName =
9312         (Twine("keyPathsForValuesAffecting") + UpperKey).str();
9313     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9314     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
9315             .second) {
9316       if (ReturnType.isNull()) {
9317         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9318         Builder.AddTextChunk("NSSet<NSString *> *");
9319         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9320       }
9321 
9322       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName));
9323       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
9324                                CXCursor_ObjCClassMethodDecl));
9325     }
9326   }
9327 
9328   // + (BOOL)automaticallyNotifiesObserversForKey
9329   if (!IsInstanceMethod &&
9330       (ReturnType.isNull() || ReturnType->isIntegerType() ||
9331        ReturnType->isBooleanType())) {
9332     std::string SelectorName =
9333         (Twine("automaticallyNotifiesObserversOf") + UpperKey).str();
9334     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
9335     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))
9336             .second) {
9337       if (ReturnType.isNull()) {
9338         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9339         Builder.AddTextChunk("BOOL");
9340         Builder.AddChunk(CodeCompletionString::CK_RightParen);
9341       }
9342 
9343       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName));
9344       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
9345                                CXCursor_ObjCClassMethodDecl));
9346     }
9347   }
9348 }
9349 
9350 void Sema::CodeCompleteObjCMethodDecl(Scope *S, Optional<bool> IsInstanceMethod,
9351                                       ParsedType ReturnTy) {
9352   // Determine the return type of the method we're declaring, if
9353   // provided.
9354   QualType ReturnType = GetTypeFromParser(ReturnTy);
9355   Decl *IDecl = nullptr;
9356   if (CurContext->isObjCContainer()) {
9357     ObjCContainerDecl *OCD = dyn_cast<ObjCContainerDecl>(CurContext);
9358     IDecl = OCD;
9359   }
9360   // Determine where we should start searching for methods.
9361   ObjCContainerDecl *SearchDecl = nullptr;
9362   bool IsInImplementation = false;
9363   if (Decl *D = IDecl) {
9364     if (ObjCImplementationDecl *Impl = dyn_cast<ObjCImplementationDecl>(D)) {
9365       SearchDecl = Impl->getClassInterface();
9366       IsInImplementation = true;
9367     } else if (ObjCCategoryImplDecl *CatImpl =
9368                    dyn_cast<ObjCCategoryImplDecl>(D)) {
9369       SearchDecl = CatImpl->getCategoryDecl();
9370       IsInImplementation = true;
9371     } else
9372       SearchDecl = dyn_cast<ObjCContainerDecl>(D);
9373   }
9374 
9375   if (!SearchDecl && S) {
9376     if (DeclContext *DC = S->getEntity())
9377       SearchDecl = dyn_cast<ObjCContainerDecl>(DC);
9378   }
9379 
9380   if (!SearchDecl) {
9381     HandleCodeCompleteResults(this, CodeCompleter,
9382                               CodeCompletionContext::CCC_Other, nullptr, 0);
9383     return;
9384   }
9385 
9386   // Find all of the methods that we could declare/implement here.
9387   KnownMethodsMap KnownMethods;
9388   FindImplementableMethods(Context, SearchDecl, IsInstanceMethod, ReturnType,
9389                            KnownMethods);
9390 
9391   // Add declarations or definitions for each of the known methods.
9392   typedef CodeCompletionResult Result;
9393   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9394                         CodeCompleter->getCodeCompletionTUInfo(),
9395                         CodeCompletionContext::CCC_Other);
9396   Results.EnterNewScope();
9397   PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
9398   for (KnownMethodsMap::iterator M = KnownMethods.begin(),
9399                                  MEnd = KnownMethods.end();
9400        M != MEnd; ++M) {
9401     ObjCMethodDecl *Method = M->second.getPointer();
9402     CodeCompletionBuilder Builder(Results.getAllocator(),
9403                                   Results.getCodeCompletionTUInfo());
9404 
9405     // Add the '-'/'+' prefix if it wasn't provided yet.
9406     if (!IsInstanceMethod) {
9407       Builder.AddTextChunk(Method->isInstanceMethod() ? "-" : "+");
9408       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9409     }
9410 
9411     // If the result type was not already provided, add it to the
9412     // pattern as (type).
9413     if (ReturnType.isNull()) {
9414       QualType ResTy = Method->getSendResultType().stripObjCKindOfType(Context);
9415       AttributedType::stripOuterNullability(ResTy);
9416       AddObjCPassingTypeChunk(ResTy, Method->getObjCDeclQualifier(), Context,
9417                               Policy, Builder);
9418     }
9419 
9420     Selector Sel = Method->getSelector();
9421 
9422     if (Sel.isUnarySelector()) {
9423       // Unary selectors have no arguments.
9424       Builder.AddTypedTextChunk(
9425           Builder.getAllocator().CopyString(Sel.getNameForSlot(0)));
9426     } else {
9427       // Add all parameters to the pattern.
9428       unsigned I = 0;
9429       for (ObjCMethodDecl::param_iterator P = Method->param_begin(),
9430                                           PEnd = Method->param_end();
9431            P != PEnd; (void)++P, ++I) {
9432         // Add the part of the selector name.
9433         if (I == 0)
9434           Builder.AddTypedTextChunk(
9435               Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
9436         else if (I < Sel.getNumArgs()) {
9437           Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9438           Builder.AddTypedTextChunk(
9439               Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
9440         } else
9441           break;
9442 
9443         // Add the parameter type.
9444         QualType ParamType;
9445         if ((*P)->getObjCDeclQualifier() & Decl::OBJC_TQ_CSNullability)
9446           ParamType = (*P)->getType();
9447         else
9448           ParamType = (*P)->getOriginalType();
9449         ParamType = ParamType.substObjCTypeArgs(
9450             Context, {}, ObjCSubstitutionContext::Parameter);
9451         AttributedType::stripOuterNullability(ParamType);
9452         AddObjCPassingTypeChunk(ParamType, (*P)->getObjCDeclQualifier(),
9453                                 Context, Policy, Builder);
9454 
9455         if (IdentifierInfo *Id = (*P)->getIdentifier())
9456           Builder.AddTextChunk(
9457               Builder.getAllocator().CopyString(Id->getName()));
9458       }
9459     }
9460 
9461     if (Method->isVariadic()) {
9462       if (Method->param_size() > 0)
9463         Builder.AddChunk(CodeCompletionString::CK_Comma);
9464       Builder.AddTextChunk("...");
9465     }
9466 
9467     if (IsInImplementation && Results.includeCodePatterns()) {
9468       // We will be defining the method here, so add a compound statement.
9469       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9470       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
9471       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
9472       if (!Method->getReturnType()->isVoidType()) {
9473         // If the result type is not void, add a return clause.
9474         Builder.AddTextChunk("return");
9475         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9476         Builder.AddPlaceholderChunk("expression");
9477         Builder.AddChunk(CodeCompletionString::CK_SemiColon);
9478       } else
9479         Builder.AddPlaceholderChunk("statements");
9480 
9481       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
9482       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
9483     }
9484 
9485     unsigned Priority = CCP_CodePattern;
9486     auto R = Result(Builder.TakeString(), Method, Priority);
9487     if (!M->second.getInt())
9488       setInBaseClass(R);
9489     Results.AddResult(std::move(R));
9490   }
9491 
9492   // Add Key-Value-Coding and Key-Value-Observing accessor methods for all of
9493   // the properties in this class and its categories.
9494   if (Context.getLangOpts().ObjC) {
9495     SmallVector<ObjCContainerDecl *, 4> Containers;
9496     Containers.push_back(SearchDecl);
9497 
9498     VisitedSelectorSet KnownSelectors;
9499     for (KnownMethodsMap::iterator M = KnownMethods.begin(),
9500                                    MEnd = KnownMethods.end();
9501          M != MEnd; ++M)
9502       KnownSelectors.insert(M->first);
9503 
9504     ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(SearchDecl);
9505     if (!IFace)
9506       if (ObjCCategoryDecl *Category = dyn_cast<ObjCCategoryDecl>(SearchDecl))
9507         IFace = Category->getClassInterface();
9508 
9509     if (IFace)
9510       llvm::append_range(Containers, IFace->visible_categories());
9511 
9512     if (IsInstanceMethod) {
9513       for (unsigned I = 0, N = Containers.size(); I != N; ++I)
9514         for (auto *P : Containers[I]->instance_properties())
9515           AddObjCKeyValueCompletions(P, *IsInstanceMethod, ReturnType, Context,
9516                                      KnownSelectors, Results);
9517     }
9518   }
9519 
9520   Results.ExitScope();
9521 
9522   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9523                             Results.data(), Results.size());
9524 }
9525 
9526 void Sema::CodeCompleteObjCMethodDeclSelector(
9527     Scope *S, bool IsInstanceMethod, bool AtParameterName, ParsedType ReturnTy,
9528     ArrayRef<IdentifierInfo *> SelIdents) {
9529   // If we have an external source, load the entire class method
9530   // pool from the AST file.
9531   if (ExternalSource) {
9532     for (uint32_t I = 0, N = ExternalSource->GetNumExternalSelectors(); I != N;
9533          ++I) {
9534       Selector Sel = ExternalSource->GetExternalSelector(I);
9535       if (Sel.isNull() || MethodPool.count(Sel))
9536         continue;
9537 
9538       ReadMethodPool(Sel);
9539     }
9540   }
9541 
9542   // Build the set of methods we can see.
9543   typedef CodeCompletionResult Result;
9544   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9545                         CodeCompleter->getCodeCompletionTUInfo(),
9546                         CodeCompletionContext::CCC_Other);
9547 
9548   if (ReturnTy)
9549     Results.setPreferredType(GetTypeFromParser(ReturnTy).getNonReferenceType());
9550 
9551   Results.EnterNewScope();
9552   for (GlobalMethodPool::iterator M = MethodPool.begin(),
9553                                   MEnd = MethodPool.end();
9554        M != MEnd; ++M) {
9555     for (ObjCMethodList *MethList = IsInstanceMethod ? &M->second.first
9556                                                      : &M->second.second;
9557          MethList && MethList->getMethod(); MethList = MethList->getNext()) {
9558       if (!isAcceptableObjCMethod(MethList->getMethod(), MK_Any, SelIdents))
9559         continue;
9560 
9561       if (AtParameterName) {
9562         // Suggest parameter names we've seen before.
9563         unsigned NumSelIdents = SelIdents.size();
9564         if (NumSelIdents &&
9565             NumSelIdents <= MethList->getMethod()->param_size()) {
9566           ParmVarDecl *Param =
9567               MethList->getMethod()->parameters()[NumSelIdents - 1];
9568           if (Param->getIdentifier()) {
9569             CodeCompletionBuilder Builder(Results.getAllocator(),
9570                                           Results.getCodeCompletionTUInfo());
9571             Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
9572                 Param->getIdentifier()->getName()));
9573             Results.AddResult(Builder.TakeString());
9574           }
9575         }
9576 
9577         continue;
9578       }
9579 
9580       Result R(MethList->getMethod(),
9581                Results.getBasePriority(MethList->getMethod()), nullptr);
9582       R.StartParameter = SelIdents.size();
9583       R.AllParametersAreInformative = false;
9584       R.DeclaringEntity = true;
9585       Results.MaybeAddResult(R, CurContext);
9586     }
9587   }
9588 
9589   Results.ExitScope();
9590 
9591   if (!AtParameterName && !SelIdents.empty() &&
9592       SelIdents.front()->getName().startswith("init")) {
9593     for (const auto &M : PP.macros()) {
9594       if (M.first->getName() != "NS_DESIGNATED_INITIALIZER")
9595         continue;
9596       Results.EnterNewScope();
9597       CodeCompletionBuilder Builder(Results.getAllocator(),
9598                                     Results.getCodeCompletionTUInfo());
9599       Builder.AddTypedTextChunk(
9600           Builder.getAllocator().CopyString(M.first->getName()));
9601       Results.AddResult(CodeCompletionResult(Builder.TakeString(), CCP_Macro,
9602                                              CXCursor_MacroDefinition));
9603       Results.ExitScope();
9604     }
9605   }
9606 
9607   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9608                             Results.data(), Results.size());
9609 }
9610 
9611 void Sema::CodeCompletePreprocessorDirective(bool InConditional) {
9612   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9613                         CodeCompleter->getCodeCompletionTUInfo(),
9614                         CodeCompletionContext::CCC_PreprocessorDirective);
9615   Results.EnterNewScope();
9616 
9617   // #if <condition>
9618   CodeCompletionBuilder Builder(Results.getAllocator(),
9619                                 Results.getCodeCompletionTUInfo());
9620   Builder.AddTypedTextChunk("if");
9621   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9622   Builder.AddPlaceholderChunk("condition");
9623   Results.AddResult(Builder.TakeString());
9624 
9625   // #ifdef <macro>
9626   Builder.AddTypedTextChunk("ifdef");
9627   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9628   Builder.AddPlaceholderChunk("macro");
9629   Results.AddResult(Builder.TakeString());
9630 
9631   // #ifndef <macro>
9632   Builder.AddTypedTextChunk("ifndef");
9633   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9634   Builder.AddPlaceholderChunk("macro");
9635   Results.AddResult(Builder.TakeString());
9636 
9637   if (InConditional) {
9638     // #elif <condition>
9639     Builder.AddTypedTextChunk("elif");
9640     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9641     Builder.AddPlaceholderChunk("condition");
9642     Results.AddResult(Builder.TakeString());
9643 
9644     // #elifdef <macro>
9645     Builder.AddTypedTextChunk("elifdef");
9646     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9647     Builder.AddPlaceholderChunk("macro");
9648     Results.AddResult(Builder.TakeString());
9649 
9650     // #elifndef <macro>
9651     Builder.AddTypedTextChunk("elifndef");
9652     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9653     Builder.AddPlaceholderChunk("macro");
9654     Results.AddResult(Builder.TakeString());
9655 
9656     // #else
9657     Builder.AddTypedTextChunk("else");
9658     Results.AddResult(Builder.TakeString());
9659 
9660     // #endif
9661     Builder.AddTypedTextChunk("endif");
9662     Results.AddResult(Builder.TakeString());
9663   }
9664 
9665   // #include "header"
9666   Builder.AddTypedTextChunk("include");
9667   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9668   Builder.AddTextChunk("\"");
9669   Builder.AddPlaceholderChunk("header");
9670   Builder.AddTextChunk("\"");
9671   Results.AddResult(Builder.TakeString());
9672 
9673   // #include <header>
9674   Builder.AddTypedTextChunk("include");
9675   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9676   Builder.AddTextChunk("<");
9677   Builder.AddPlaceholderChunk("header");
9678   Builder.AddTextChunk(">");
9679   Results.AddResult(Builder.TakeString());
9680 
9681   // #define <macro>
9682   Builder.AddTypedTextChunk("define");
9683   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9684   Builder.AddPlaceholderChunk("macro");
9685   Results.AddResult(Builder.TakeString());
9686 
9687   // #define <macro>(<args>)
9688   Builder.AddTypedTextChunk("define");
9689   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9690   Builder.AddPlaceholderChunk("macro");
9691   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9692   Builder.AddPlaceholderChunk("args");
9693   Builder.AddChunk(CodeCompletionString::CK_RightParen);
9694   Results.AddResult(Builder.TakeString());
9695 
9696   // #undef <macro>
9697   Builder.AddTypedTextChunk("undef");
9698   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9699   Builder.AddPlaceholderChunk("macro");
9700   Results.AddResult(Builder.TakeString());
9701 
9702   // #line <number>
9703   Builder.AddTypedTextChunk("line");
9704   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9705   Builder.AddPlaceholderChunk("number");
9706   Results.AddResult(Builder.TakeString());
9707 
9708   // #line <number> "filename"
9709   Builder.AddTypedTextChunk("line");
9710   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9711   Builder.AddPlaceholderChunk("number");
9712   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9713   Builder.AddTextChunk("\"");
9714   Builder.AddPlaceholderChunk("filename");
9715   Builder.AddTextChunk("\"");
9716   Results.AddResult(Builder.TakeString());
9717 
9718   // #error <message>
9719   Builder.AddTypedTextChunk("error");
9720   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9721   Builder.AddPlaceholderChunk("message");
9722   Results.AddResult(Builder.TakeString());
9723 
9724   // #pragma <arguments>
9725   Builder.AddTypedTextChunk("pragma");
9726   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9727   Builder.AddPlaceholderChunk("arguments");
9728   Results.AddResult(Builder.TakeString());
9729 
9730   if (getLangOpts().ObjC) {
9731     // #import "header"
9732     Builder.AddTypedTextChunk("import");
9733     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9734     Builder.AddTextChunk("\"");
9735     Builder.AddPlaceholderChunk("header");
9736     Builder.AddTextChunk("\"");
9737     Results.AddResult(Builder.TakeString());
9738 
9739     // #import <header>
9740     Builder.AddTypedTextChunk("import");
9741     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9742     Builder.AddTextChunk("<");
9743     Builder.AddPlaceholderChunk("header");
9744     Builder.AddTextChunk(">");
9745     Results.AddResult(Builder.TakeString());
9746   }
9747 
9748   // #include_next "header"
9749   Builder.AddTypedTextChunk("include_next");
9750   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9751   Builder.AddTextChunk("\"");
9752   Builder.AddPlaceholderChunk("header");
9753   Builder.AddTextChunk("\"");
9754   Results.AddResult(Builder.TakeString());
9755 
9756   // #include_next <header>
9757   Builder.AddTypedTextChunk("include_next");
9758   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9759   Builder.AddTextChunk("<");
9760   Builder.AddPlaceholderChunk("header");
9761   Builder.AddTextChunk(">");
9762   Results.AddResult(Builder.TakeString());
9763 
9764   // #warning <message>
9765   Builder.AddTypedTextChunk("warning");
9766   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9767   Builder.AddPlaceholderChunk("message");
9768   Results.AddResult(Builder.TakeString());
9769 
9770   // Note: #ident and #sccs are such crazy anachronisms that we don't provide
9771   // completions for them. And __include_macros is a Clang-internal extension
9772   // that we don't want to encourage anyone to use.
9773 
9774   // FIXME: we don't support #assert or #unassert, so don't suggest them.
9775   Results.ExitScope();
9776 
9777   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9778                             Results.data(), Results.size());
9779 }
9780 
9781 void Sema::CodeCompleteInPreprocessorConditionalExclusion(Scope *S) {
9782   CodeCompleteOrdinaryName(S, S->getFnParent() ? Sema::PCC_RecoveryInFunction
9783                                                : Sema::PCC_Namespace);
9784 }
9785 
9786 void Sema::CodeCompletePreprocessorMacroName(bool IsDefinition) {
9787   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9788                         CodeCompleter->getCodeCompletionTUInfo(),
9789                         IsDefinition ? CodeCompletionContext::CCC_MacroName
9790                                      : CodeCompletionContext::CCC_MacroNameUse);
9791   if (!IsDefinition && CodeCompleter->includeMacros()) {
9792     // Add just the names of macros, not their arguments.
9793     CodeCompletionBuilder Builder(Results.getAllocator(),
9794                                   Results.getCodeCompletionTUInfo());
9795     Results.EnterNewScope();
9796     for (Preprocessor::macro_iterator M = PP.macro_begin(),
9797                                       MEnd = PP.macro_end();
9798          M != MEnd; ++M) {
9799       Builder.AddTypedTextChunk(
9800           Builder.getAllocator().CopyString(M->first->getName()));
9801       Results.AddResult(CodeCompletionResult(
9802           Builder.TakeString(), CCP_CodePattern, CXCursor_MacroDefinition));
9803     }
9804     Results.ExitScope();
9805   } else if (IsDefinition) {
9806     // FIXME: Can we detect when the user just wrote an include guard above?
9807   }
9808 
9809   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9810                             Results.data(), Results.size());
9811 }
9812 
9813 void Sema::CodeCompletePreprocessorExpression() {
9814   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9815                         CodeCompleter->getCodeCompletionTUInfo(),
9816                         CodeCompletionContext::CCC_PreprocessorExpression);
9817 
9818   if (CodeCompleter->includeMacros())
9819     AddMacroResults(PP, Results, CodeCompleter->loadExternal(), true);
9820 
9821   // defined (<macro>)
9822   Results.EnterNewScope();
9823   CodeCompletionBuilder Builder(Results.getAllocator(),
9824                                 Results.getCodeCompletionTUInfo());
9825   Builder.AddTypedTextChunk("defined");
9826   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
9827   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
9828   Builder.AddPlaceholderChunk("macro");
9829   Builder.AddChunk(CodeCompletionString::CK_RightParen);
9830   Results.AddResult(Builder.TakeString());
9831   Results.ExitScope();
9832 
9833   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9834                             Results.data(), Results.size());
9835 }
9836 
9837 void Sema::CodeCompletePreprocessorMacroArgument(Scope *S,
9838                                                  IdentifierInfo *Macro,
9839                                                  MacroInfo *MacroInfo,
9840                                                  unsigned Argument) {
9841   // FIXME: In the future, we could provide "overload" results, much like we
9842   // do for function calls.
9843 
9844   // Now just ignore this. There will be another code-completion callback
9845   // for the expanded tokens.
9846 }
9847 
9848 // This handles completion inside an #include filename, e.g. #include <foo/ba
9849 // We look for the directory "foo" under each directory on the include path,
9850 // list its files, and reassemble the appropriate #include.
9851 void Sema::CodeCompleteIncludedFile(llvm::StringRef Dir, bool Angled) {
9852   // RelDir should use /, but unescaped \ is possible on windows!
9853   // Our completions will normalize to / for simplicity, this case is rare.
9854   std::string RelDir = llvm::sys::path::convert_to_slash(Dir);
9855   // We need the native slashes for the actual file system interactions.
9856   SmallString<128> NativeRelDir = StringRef(RelDir);
9857   llvm::sys::path::native(NativeRelDir);
9858   llvm::vfs::FileSystem &FS =
9859       getSourceManager().getFileManager().getVirtualFileSystem();
9860 
9861   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
9862                         CodeCompleter->getCodeCompletionTUInfo(),
9863                         CodeCompletionContext::CCC_IncludedFile);
9864   llvm::DenseSet<StringRef> SeenResults; // To deduplicate results.
9865 
9866   // Helper: adds one file or directory completion result.
9867   auto AddCompletion = [&](StringRef Filename, bool IsDirectory) {
9868     SmallString<64> TypedChunk = Filename;
9869     // Directory completion is up to the slash, e.g. <sys/
9870     TypedChunk.push_back(IsDirectory ? '/' : Angled ? '>' : '"');
9871     auto R = SeenResults.insert(TypedChunk);
9872     if (R.second) { // New completion
9873       const char *InternedTyped = Results.getAllocator().CopyString(TypedChunk);
9874       *R.first = InternedTyped; // Avoid dangling StringRef.
9875       CodeCompletionBuilder Builder(CodeCompleter->getAllocator(),
9876                                     CodeCompleter->getCodeCompletionTUInfo());
9877       Builder.AddTypedTextChunk(InternedTyped);
9878       // The result is a "Pattern", which is pretty opaque.
9879       // We may want to include the real filename to allow smart ranking.
9880       Results.AddResult(CodeCompletionResult(Builder.TakeString()));
9881     }
9882   };
9883 
9884   // Helper: scans IncludeDir for nice files, and adds results for each.
9885   auto AddFilesFromIncludeDir = [&](StringRef IncludeDir,
9886                                     bool IsSystem,
9887                                     DirectoryLookup::LookupType_t LookupType) {
9888     llvm::SmallString<128> Dir = IncludeDir;
9889     if (!NativeRelDir.empty()) {
9890       if (LookupType == DirectoryLookup::LT_Framework) {
9891         // For a framework dir, #include <Foo/Bar/> actually maps to
9892         // a path of Foo.framework/Headers/Bar/.
9893         auto Begin = llvm::sys::path::begin(NativeRelDir);
9894         auto End = llvm::sys::path::end(NativeRelDir);
9895 
9896         llvm::sys::path::append(Dir, *Begin + ".framework", "Headers");
9897         llvm::sys::path::append(Dir, ++Begin, End);
9898       } else {
9899         llvm::sys::path::append(Dir, NativeRelDir);
9900       }
9901     }
9902 
9903     const StringRef &Dirname = llvm::sys::path::filename(Dir);
9904     const bool isQt = Dirname.startswith("Qt") || Dirname == "ActiveQt";
9905     const bool ExtensionlessHeaders =
9906         IsSystem || isQt || Dir.endswith(".framework/Headers");
9907     std::error_code EC;
9908     unsigned Count = 0;
9909     for (auto It = FS.dir_begin(Dir, EC);
9910          !EC && It != llvm::vfs::directory_iterator(); It.increment(EC)) {
9911       if (++Count == 2500) // If we happen to hit a huge directory,
9912         break;             // bail out early so we're not too slow.
9913       StringRef Filename = llvm::sys::path::filename(It->path());
9914 
9915       // To know whether a symlink should be treated as file or a directory, we
9916       // have to stat it. This should be cheap enough as there shouldn't be many
9917       // symlinks.
9918       llvm::sys::fs::file_type Type = It->type();
9919       if (Type == llvm::sys::fs::file_type::symlink_file) {
9920         if (auto FileStatus = FS.status(It->path()))
9921           Type = FileStatus->getType();
9922       }
9923       switch (Type) {
9924       case llvm::sys::fs::file_type::directory_file:
9925         // All entries in a framework directory must have a ".framework" suffix,
9926         // but the suffix does not appear in the source code's include/import.
9927         if (LookupType == DirectoryLookup::LT_Framework &&
9928             NativeRelDir.empty() && !Filename.consume_back(".framework"))
9929           break;
9930 
9931         AddCompletion(Filename, /*IsDirectory=*/true);
9932         break;
9933       case llvm::sys::fs::file_type::regular_file: {
9934         // Only files that really look like headers. (Except in special dirs).
9935         // Header extensions from Types.def, which we can't depend on here.
9936         const bool IsHeader = Filename.endswith_insensitive(".h") ||
9937                               Filename.endswith_insensitive(".hh") ||
9938                               Filename.endswith_insensitive(".hpp") ||
9939                               Filename.endswith_insensitive(".inc") ||
9940                               (ExtensionlessHeaders && !Filename.contains('.'));
9941         if (!IsHeader)
9942           break;
9943         AddCompletion(Filename, /*IsDirectory=*/false);
9944         break;
9945       }
9946       default:
9947         break;
9948       }
9949     }
9950   };
9951 
9952   // Helper: adds results relative to IncludeDir, if possible.
9953   auto AddFilesFromDirLookup = [&](const DirectoryLookup &IncludeDir,
9954                                    bool IsSystem) {
9955     switch (IncludeDir.getLookupType()) {
9956     case DirectoryLookup::LT_HeaderMap:
9957       // header maps are not (currently) enumerable.
9958       break;
9959     case DirectoryLookup::LT_NormalDir:
9960       AddFilesFromIncludeDir(IncludeDir.getDir()->getName(), IsSystem,
9961                              DirectoryLookup::LT_NormalDir);
9962       break;
9963     case DirectoryLookup::LT_Framework:
9964       AddFilesFromIncludeDir(IncludeDir.getFrameworkDir()->getName(), IsSystem,
9965                              DirectoryLookup::LT_Framework);
9966       break;
9967     }
9968   };
9969 
9970   // Finally with all our helpers, we can scan the include path.
9971   // Do this in standard order so deduplication keeps the right file.
9972   // (In case we decide to add more details to the results later).
9973   const auto &S = PP.getHeaderSearchInfo();
9974   using llvm::make_range;
9975   if (!Angled) {
9976     // The current directory is on the include path for "quoted" includes.
9977     const FileEntry *CurFile = PP.getCurrentFileLexer()->getFileEntry();
9978     if (CurFile && CurFile->getDir())
9979       AddFilesFromIncludeDir(CurFile->getDir()->getName(), false,
9980                              DirectoryLookup::LT_NormalDir);
9981     for (const auto &D : make_range(S.quoted_dir_begin(), S.quoted_dir_end()))
9982       AddFilesFromDirLookup(D, false);
9983   }
9984   for (const auto &D : make_range(S.angled_dir_begin(), S.angled_dir_end()))
9985     AddFilesFromDirLookup(D, false);
9986   for (const auto &D : make_range(S.system_dir_begin(), S.system_dir_end()))
9987     AddFilesFromDirLookup(D, true);
9988 
9989   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
9990                             Results.data(), Results.size());
9991 }
9992 
9993 void Sema::CodeCompleteNaturalLanguage() {
9994   HandleCodeCompleteResults(this, CodeCompleter,
9995                             CodeCompletionContext::CCC_NaturalLanguage, nullptr,
9996                             0);
9997 }
9998 
9999 void Sema::CodeCompleteAvailabilityPlatformName() {
10000   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
10001                         CodeCompleter->getCodeCompletionTUInfo(),
10002                         CodeCompletionContext::CCC_Other);
10003   Results.EnterNewScope();
10004   static const char *Platforms[] = {"macOS", "iOS", "watchOS", "tvOS"};
10005   for (const char *Platform : llvm::makeArrayRef(Platforms)) {
10006     Results.AddResult(CodeCompletionResult(Platform));
10007     Results.AddResult(CodeCompletionResult(Results.getAllocator().CopyString(
10008         Twine(Platform) + "ApplicationExtension")));
10009   }
10010   Results.ExitScope();
10011   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
10012                             Results.data(), Results.size());
10013 }
10014 
10015 void Sema::GatherGlobalCodeCompletions(
10016     CodeCompletionAllocator &Allocator, CodeCompletionTUInfo &CCTUInfo,
10017     SmallVectorImpl<CodeCompletionResult> &Results) {
10018   ResultBuilder Builder(*this, Allocator, CCTUInfo,
10019                         CodeCompletionContext::CCC_Recovery);
10020   if (!CodeCompleter || CodeCompleter->includeGlobals()) {
10021     CodeCompletionDeclConsumer Consumer(Builder,
10022                                         Context.getTranslationUnitDecl());
10023     LookupVisibleDecls(Context.getTranslationUnitDecl(), LookupAnyName,
10024                        Consumer,
10025                        !CodeCompleter || CodeCompleter->loadExternal());
10026   }
10027 
10028   if (!CodeCompleter || CodeCompleter->includeMacros())
10029     AddMacroResults(PP, Builder,
10030                     !CodeCompleter || CodeCompleter->loadExternal(), true);
10031 
10032   Results.clear();
10033   Results.insert(Results.end(), Builder.data(),
10034                  Builder.data() + Builder.size());
10035 }
10036