1 //===---------------- SemaCodeComplete.cpp - Code Completion ----*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  This file defines the code-completion semantic actions.
11 //
12 //===----------------------------------------------------------------------===//
13 #include "clang/Sema/SemaInternal.h"
14 #include "clang/AST/DeclObjC.h"
15 #include "clang/AST/ExprCXX.h"
16 #include "clang/AST/ExprObjC.h"
17 #include "clang/Basic/CharInfo.h"
18 #include "clang/Lex/HeaderSearch.h"
19 #include "clang/Lex/MacroInfo.h"
20 #include "clang/Lex/Preprocessor.h"
21 #include "clang/Sema/CodeCompleteConsumer.h"
22 #include "clang/Sema/ExternalSemaSource.h"
23 #include "clang/Sema/Lookup.h"
24 #include "clang/Sema/Overload.h"
25 #include "clang/Sema/Scope.h"
26 #include "clang/Sema/ScopeInfo.h"
27 #include "llvm/ADT/DenseSet.h"
28 #include "llvm/ADT/SmallBitVector.h"
29 #include "llvm/ADT/SmallPtrSet.h"
30 #include "llvm/ADT/SmallString.h"
31 #include "llvm/ADT/StringExtras.h"
32 #include "llvm/ADT/StringSwitch.h"
33 #include "llvm/ADT/Twine.h"
34 #include <list>
35 #include <map>
36 #include <vector>
37 
38 using namespace clang;
39 using namespace sema;
40 
41 namespace {
42   /// \brief A container of code-completion results.
43   class ResultBuilder {
44   public:
45     /// \brief The type of a name-lookup filter, which can be provided to the
46     /// name-lookup routines to specify which declarations should be included in
47     /// the result set (when it returns true) and which declarations should be
48     /// filtered out (returns false).
49     typedef bool (ResultBuilder::*LookupFilter)(const NamedDecl *) const;
50 
51     typedef CodeCompletionResult Result;
52 
53   private:
54     /// \brief The actual results we have found.
55     std::vector<Result> Results;
56 
57     /// \brief A record of all of the declarations we have found and placed
58     /// into the result set, used to ensure that no declaration ever gets into
59     /// the result set twice.
60     llvm::SmallPtrSet<const Decl*, 16> AllDeclsFound;
61 
62     typedef std::pair<const NamedDecl *, unsigned> DeclIndexPair;
63 
64     /// \brief An entry in the shadow map, which is optimized to store
65     /// a single (declaration, index) mapping (the common case) but
66     /// can also store a list of (declaration, index) mappings.
67     class ShadowMapEntry {
68       typedef SmallVector<DeclIndexPair, 4> DeclIndexPairVector;
69 
70       /// \brief Contains either the solitary NamedDecl * or a vector
71       /// of (declaration, index) pairs.
72       llvm::PointerUnion<const NamedDecl *, DeclIndexPairVector*> DeclOrVector;
73 
74       /// \brief When the entry contains a single declaration, this is
75       /// the index associated with that entry.
76       unsigned SingleDeclIndex;
77 
78     public:
79       ShadowMapEntry() : DeclOrVector(), SingleDeclIndex(0) { }
80 
81       void Add(const NamedDecl *ND, unsigned Index) {
82         if (DeclOrVector.isNull()) {
83           // 0 - > 1 elements: just set the single element information.
84           DeclOrVector = ND;
85           SingleDeclIndex = Index;
86           return;
87         }
88 
89         if (const NamedDecl *PrevND =
90                 DeclOrVector.dyn_cast<const NamedDecl *>()) {
91           // 1 -> 2 elements: create the vector of results and push in the
92           // existing declaration.
93           DeclIndexPairVector *Vec = new DeclIndexPairVector;
94           Vec->push_back(DeclIndexPair(PrevND, SingleDeclIndex));
95           DeclOrVector = Vec;
96         }
97 
98         // Add the new element to the end of the vector.
99         DeclOrVector.get<DeclIndexPairVector*>()->push_back(
100                                                     DeclIndexPair(ND, Index));
101       }
102 
103       void Destroy() {
104         if (DeclIndexPairVector *Vec
105               = DeclOrVector.dyn_cast<DeclIndexPairVector *>()) {
106           delete Vec;
107           DeclOrVector = ((NamedDecl *)0);
108         }
109       }
110 
111       // Iteration.
112       class iterator;
113       iterator begin() const;
114       iterator end() const;
115     };
116 
117     /// \brief A mapping from declaration names to the declarations that have
118     /// this name within a particular scope and their index within the list of
119     /// results.
120     typedef llvm::DenseMap<DeclarationName, ShadowMapEntry> ShadowMap;
121 
122     /// \brief The semantic analysis object for which results are being
123     /// produced.
124     Sema &SemaRef;
125 
126     /// \brief The allocator used to allocate new code-completion strings.
127     CodeCompletionAllocator &Allocator;
128 
129     CodeCompletionTUInfo &CCTUInfo;
130 
131     /// \brief If non-NULL, a filter function used to remove any code-completion
132     /// results that are not desirable.
133     LookupFilter Filter;
134 
135     /// \brief Whether we should allow declarations as
136     /// nested-name-specifiers that would otherwise be filtered out.
137     bool AllowNestedNameSpecifiers;
138 
139     /// \brief If set, the type that we would prefer our resulting value
140     /// declarations to have.
141     ///
142     /// Closely matching the preferred type gives a boost to a result's
143     /// priority.
144     CanQualType PreferredType;
145 
146     /// \brief A list of shadow maps, which is used to model name hiding at
147     /// different levels of, e.g., the inheritance hierarchy.
148     std::list<ShadowMap> ShadowMaps;
149 
150     /// \brief If we're potentially referring to a C++ member function, the set
151     /// of qualifiers applied to the object type.
152     Qualifiers ObjectTypeQualifiers;
153 
154     /// \brief Whether the \p ObjectTypeQualifiers field is active.
155     bool HasObjectTypeQualifiers;
156 
157     /// \brief The selector that we prefer.
158     Selector PreferredSelector;
159 
160     /// \brief The completion context in which we are gathering results.
161     CodeCompletionContext CompletionContext;
162 
163     /// \brief If we are in an instance method definition, the \@implementation
164     /// object.
165     ObjCImplementationDecl *ObjCImplementation;
166 
167     void AdjustResultPriorityForDecl(Result &R);
168 
169     void MaybeAddConstructorResults(Result R);
170 
171   public:
172     explicit ResultBuilder(Sema &SemaRef, CodeCompletionAllocator &Allocator,
173                            CodeCompletionTUInfo &CCTUInfo,
174                            const CodeCompletionContext &CompletionContext,
175                            LookupFilter Filter = 0)
176       : SemaRef(SemaRef), Allocator(Allocator), CCTUInfo(CCTUInfo),
177         Filter(Filter),
178         AllowNestedNameSpecifiers(false), HasObjectTypeQualifiers(false),
179         CompletionContext(CompletionContext),
180         ObjCImplementation(0)
181     {
182       // If this is an Objective-C instance method definition, dig out the
183       // corresponding implementation.
184       switch (CompletionContext.getKind()) {
185       case CodeCompletionContext::CCC_Expression:
186       case CodeCompletionContext::CCC_ObjCMessageReceiver:
187       case CodeCompletionContext::CCC_ParenthesizedExpression:
188       case CodeCompletionContext::CCC_Statement:
189       case CodeCompletionContext::CCC_Recovery:
190         if (ObjCMethodDecl *Method = SemaRef.getCurMethodDecl())
191           if (Method->isInstanceMethod())
192             if (ObjCInterfaceDecl *Interface = Method->getClassInterface())
193               ObjCImplementation = Interface->getImplementation();
194         break;
195 
196       default:
197         break;
198       }
199     }
200 
201     /// \brief Determine the priority for a reference to the given declaration.
202     unsigned getBasePriority(const NamedDecl *D);
203 
204     /// \brief Whether we should include code patterns in the completion
205     /// results.
206     bool includeCodePatterns() const {
207       return SemaRef.CodeCompleter &&
208              SemaRef.CodeCompleter->includeCodePatterns();
209     }
210 
211     /// \brief Set the filter used for code-completion results.
212     void setFilter(LookupFilter Filter) {
213       this->Filter = Filter;
214     }
215 
216     Result *data() { return Results.empty()? 0 : &Results.front(); }
217     unsigned size() const { return Results.size(); }
218     bool empty() const { return Results.empty(); }
219 
220     /// \brief Specify the preferred type.
221     void setPreferredType(QualType T) {
222       PreferredType = SemaRef.Context.getCanonicalType(T);
223     }
224 
225     /// \brief Set the cv-qualifiers on the object type, for us in filtering
226     /// calls to member functions.
227     ///
228     /// When there are qualifiers in this set, they will be used to filter
229     /// out member functions that aren't available (because there will be a
230     /// cv-qualifier mismatch) or prefer functions with an exact qualifier
231     /// match.
232     void setObjectTypeQualifiers(Qualifiers Quals) {
233       ObjectTypeQualifiers = Quals;
234       HasObjectTypeQualifiers = true;
235     }
236 
237     /// \brief Set the preferred selector.
238     ///
239     /// When an Objective-C method declaration result is added, and that
240     /// method's selector matches this preferred selector, we give that method
241     /// a slight priority boost.
242     void setPreferredSelector(Selector Sel) {
243       PreferredSelector = Sel;
244     }
245 
246     /// \brief Retrieve the code-completion context for which results are
247     /// being collected.
248     const CodeCompletionContext &getCompletionContext() const {
249       return CompletionContext;
250     }
251 
252     /// \brief Specify whether nested-name-specifiers are allowed.
253     void allowNestedNameSpecifiers(bool Allow = true) {
254       AllowNestedNameSpecifiers = Allow;
255     }
256 
257     /// \brief Return the semantic analysis object for which we are collecting
258     /// code completion results.
259     Sema &getSema() const { return SemaRef; }
260 
261     /// \brief Retrieve the allocator used to allocate code completion strings.
262     CodeCompletionAllocator &getAllocator() const { return Allocator; }
263 
264     CodeCompletionTUInfo &getCodeCompletionTUInfo() const { return CCTUInfo; }
265 
266     /// \brief Determine whether the given declaration is at all interesting
267     /// as a code-completion result.
268     ///
269     /// \param ND the declaration that we are inspecting.
270     ///
271     /// \param AsNestedNameSpecifier will be set true if this declaration is
272     /// only interesting when it is a nested-name-specifier.
273     bool isInterestingDecl(const NamedDecl *ND,
274                            bool &AsNestedNameSpecifier) const;
275 
276     /// \brief Check whether the result is hidden by the Hiding declaration.
277     ///
278     /// \returns true if the result is hidden and cannot be found, false if
279     /// the hidden result could still be found. When false, \p R may be
280     /// modified to describe how the result can be found (e.g., via extra
281     /// qualification).
282     bool CheckHiddenResult(Result &R, DeclContext *CurContext,
283                            const NamedDecl *Hiding);
284 
285     /// \brief Add a new result to this result set (if it isn't already in one
286     /// of the shadow maps), or replace an existing result (for, e.g., a
287     /// redeclaration).
288     ///
289     /// \param R the result to add (if it is unique).
290     ///
291     /// \param CurContext the context in which this result will be named.
292     void MaybeAddResult(Result R, DeclContext *CurContext = 0);
293 
294     /// \brief Add a new result to this result set, where we already know
295     /// the hiding declation (if any).
296     ///
297     /// \param R the result to add (if it is unique).
298     ///
299     /// \param CurContext the context in which this result will be named.
300     ///
301     /// \param Hiding the declaration that hides the result.
302     ///
303     /// \param InBaseClass whether the result was found in a base
304     /// class of the searched context.
305     void AddResult(Result R, DeclContext *CurContext, NamedDecl *Hiding,
306                    bool InBaseClass);
307 
308     /// \brief Add a new non-declaration result to this result set.
309     void AddResult(Result R);
310 
311     /// \brief Enter into a new scope.
312     void EnterNewScope();
313 
314     /// \brief Exit from the current scope.
315     void ExitScope();
316 
317     /// \brief Ignore this declaration, if it is seen again.
318     void Ignore(const Decl *D) { AllDeclsFound.insert(D->getCanonicalDecl()); }
319 
320     /// \name Name lookup predicates
321     ///
322     /// These predicates can be passed to the name lookup functions to filter the
323     /// results of name lookup. All of the predicates have the same type, so that
324     ///
325     //@{
326     bool IsOrdinaryName(const NamedDecl *ND) const;
327     bool IsOrdinaryNonTypeName(const NamedDecl *ND) const;
328     bool IsIntegralConstantValue(const NamedDecl *ND) const;
329     bool IsOrdinaryNonValueName(const NamedDecl *ND) const;
330     bool IsNestedNameSpecifier(const NamedDecl *ND) const;
331     bool IsEnum(const NamedDecl *ND) const;
332     bool IsClassOrStruct(const NamedDecl *ND) const;
333     bool IsUnion(const NamedDecl *ND) const;
334     bool IsNamespace(const NamedDecl *ND) const;
335     bool IsNamespaceOrAlias(const NamedDecl *ND) const;
336     bool IsType(const NamedDecl *ND) const;
337     bool IsMember(const NamedDecl *ND) const;
338     bool IsObjCIvar(const NamedDecl *ND) const;
339     bool IsObjCMessageReceiver(const NamedDecl *ND) const;
340     bool IsObjCMessageReceiverOrLambdaCapture(const NamedDecl *ND) const;
341     bool IsObjCCollection(const NamedDecl *ND) const;
342     bool IsImpossibleToSatisfy(const NamedDecl *ND) const;
343     //@}
344   };
345 }
346 
347 class ResultBuilder::ShadowMapEntry::iterator {
348   llvm::PointerUnion<const NamedDecl *, const DeclIndexPair *> DeclOrIterator;
349   unsigned SingleDeclIndex;
350 
351 public:
352   typedef DeclIndexPair value_type;
353   typedef value_type reference;
354   typedef std::ptrdiff_t difference_type;
355   typedef std::input_iterator_tag iterator_category;
356 
357   class pointer {
358     DeclIndexPair Value;
359 
360   public:
361     pointer(const DeclIndexPair &Value) : Value(Value) { }
362 
363     const DeclIndexPair *operator->() const {
364       return &Value;
365     }
366   };
367 
368   iterator() : DeclOrIterator((NamedDecl *)0), SingleDeclIndex(0) { }
369 
370   iterator(const NamedDecl *SingleDecl, unsigned Index)
371     : DeclOrIterator(SingleDecl), SingleDeclIndex(Index) { }
372 
373   iterator(const DeclIndexPair *Iterator)
374     : DeclOrIterator(Iterator), SingleDeclIndex(0) { }
375 
376   iterator &operator++() {
377     if (DeclOrIterator.is<const NamedDecl *>()) {
378       DeclOrIterator = (NamedDecl *)0;
379       SingleDeclIndex = 0;
380       return *this;
381     }
382 
383     const DeclIndexPair *I = DeclOrIterator.get<const DeclIndexPair*>();
384     ++I;
385     DeclOrIterator = I;
386     return *this;
387   }
388 
389   /*iterator operator++(int) {
390     iterator tmp(*this);
391     ++(*this);
392     return tmp;
393   }*/
394 
395   reference operator*() const {
396     if (const NamedDecl *ND = DeclOrIterator.dyn_cast<const NamedDecl *>())
397       return reference(ND, SingleDeclIndex);
398 
399     return *DeclOrIterator.get<const DeclIndexPair*>();
400   }
401 
402   pointer operator->() const {
403     return pointer(**this);
404   }
405 
406   friend bool operator==(const iterator &X, const iterator &Y) {
407     return X.DeclOrIterator.getOpaqueValue()
408                                   == Y.DeclOrIterator.getOpaqueValue() &&
409       X.SingleDeclIndex == Y.SingleDeclIndex;
410   }
411 
412   friend bool operator!=(const iterator &X, const iterator &Y) {
413     return !(X == Y);
414   }
415 };
416 
417 ResultBuilder::ShadowMapEntry::iterator
418 ResultBuilder::ShadowMapEntry::begin() const {
419   if (DeclOrVector.isNull())
420     return iterator();
421 
422   if (const NamedDecl *ND = DeclOrVector.dyn_cast<const NamedDecl *>())
423     return iterator(ND, SingleDeclIndex);
424 
425   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->begin());
426 }
427 
428 ResultBuilder::ShadowMapEntry::iterator
429 ResultBuilder::ShadowMapEntry::end() const {
430   if (DeclOrVector.is<const NamedDecl *>() || DeclOrVector.isNull())
431     return iterator();
432 
433   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->end());
434 }
435 
436 /// \brief Compute the qualification required to get from the current context
437 /// (\p CurContext) to the target context (\p TargetContext).
438 ///
439 /// \param Context the AST context in which the qualification will be used.
440 ///
441 /// \param CurContext the context where an entity is being named, which is
442 /// typically based on the current scope.
443 ///
444 /// \param TargetContext the context in which the named entity actually
445 /// resides.
446 ///
447 /// \returns a nested name specifier that refers into the target context, or
448 /// NULL if no qualification is needed.
449 static NestedNameSpecifier *
450 getRequiredQualification(ASTContext &Context,
451                          const DeclContext *CurContext,
452                          const DeclContext *TargetContext) {
453   SmallVector<const DeclContext *, 4> TargetParents;
454 
455   for (const DeclContext *CommonAncestor = TargetContext;
456        CommonAncestor && !CommonAncestor->Encloses(CurContext);
457        CommonAncestor = CommonAncestor->getLookupParent()) {
458     if (CommonAncestor->isTransparentContext() ||
459         CommonAncestor->isFunctionOrMethod())
460       continue;
461 
462     TargetParents.push_back(CommonAncestor);
463   }
464 
465   NestedNameSpecifier *Result = 0;
466   while (!TargetParents.empty()) {
467     const DeclContext *Parent = TargetParents.pop_back_val();
468 
469     if (const NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(Parent)) {
470       if (!Namespace->getIdentifier())
471         continue;
472 
473       Result = NestedNameSpecifier::Create(Context, Result, Namespace);
474     }
475     else if (const TagDecl *TD = dyn_cast<TagDecl>(Parent))
476       Result = NestedNameSpecifier::Create(Context, Result,
477                                            false,
478                                      Context.getTypeDeclType(TD).getTypePtr());
479   }
480   return Result;
481 }
482 
483 bool ResultBuilder::isInterestingDecl(const NamedDecl *ND,
484                                       bool &AsNestedNameSpecifier) const {
485   AsNestedNameSpecifier = false;
486 
487   ND = ND->getUnderlyingDecl();
488   unsigned IDNS = ND->getIdentifierNamespace();
489 
490   // Skip unnamed entities.
491   if (!ND->getDeclName())
492     return false;
493 
494   // Friend declarations and declarations introduced due to friends are never
495   // added as results.
496   if (IDNS & (Decl::IDNS_OrdinaryFriend | Decl::IDNS_TagFriend))
497     return false;
498 
499   // Class template (partial) specializations are never added as results.
500   if (isa<ClassTemplateSpecializationDecl>(ND) ||
501       isa<ClassTemplatePartialSpecializationDecl>(ND))
502     return false;
503 
504   // Using declarations themselves are never added as results.
505   if (isa<UsingDecl>(ND))
506     return false;
507 
508   // Some declarations have reserved names that we don't want to ever show.
509   if (const IdentifierInfo *Id = ND->getIdentifier()) {
510     // __va_list_tag is a freak of nature. Find it and skip it.
511     if (Id->isStr("__va_list_tag") || Id->isStr("__builtin_va_list"))
512       return false;
513 
514     // Filter out names reserved for the implementation (C99 7.1.3,
515     // C++ [lib.global.names]) if they come from a system header.
516     //
517     // FIXME: Add predicate for this.
518     if (Id->getLength() >= 2) {
519       const char *Name = Id->getNameStart();
520       if (Name[0] == '_' &&
521           (Name[1] == '_' || (Name[1] >= 'A' && Name[1] <= 'Z')) &&
522           (ND->getLocation().isInvalid() ||
523            SemaRef.SourceMgr.isInSystemHeader(
524                           SemaRef.SourceMgr.getSpellingLoc(ND->getLocation()))))
525         return false;
526     }
527   }
528 
529   if (Filter == &ResultBuilder::IsNestedNameSpecifier ||
530       ((isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND)) &&
531        Filter != &ResultBuilder::IsNamespace &&
532        Filter != &ResultBuilder::IsNamespaceOrAlias &&
533        Filter != 0))
534     AsNestedNameSpecifier = true;
535 
536   // Filter out any unwanted results.
537   if (Filter && !(this->*Filter)(ND)) {
538     // Check whether it is interesting as a nested-name-specifier.
539     if (AllowNestedNameSpecifiers && SemaRef.getLangOpts().CPlusPlus &&
540         IsNestedNameSpecifier(ND) &&
541         (Filter != &ResultBuilder::IsMember ||
542          (isa<CXXRecordDecl>(ND) &&
543           cast<CXXRecordDecl>(ND)->isInjectedClassName()))) {
544       AsNestedNameSpecifier = true;
545       return true;
546     }
547 
548     return false;
549   }
550   // ... then it must be interesting!
551   return true;
552 }
553 
554 bool ResultBuilder::CheckHiddenResult(Result &R, DeclContext *CurContext,
555                                       const NamedDecl *Hiding) {
556   // In C, there is no way to refer to a hidden name.
557   // FIXME: This isn't true; we can find a tag name hidden by an ordinary
558   // name if we introduce the tag type.
559   if (!SemaRef.getLangOpts().CPlusPlus)
560     return true;
561 
562   const DeclContext *HiddenCtx =
563       R.Declaration->getDeclContext()->getRedeclContext();
564 
565   // There is no way to qualify a name declared in a function or method.
566   if (HiddenCtx->isFunctionOrMethod())
567     return true;
568 
569   if (HiddenCtx == Hiding->getDeclContext()->getRedeclContext())
570     return true;
571 
572   // We can refer to the result with the appropriate qualification. Do it.
573   R.Hidden = true;
574   R.QualifierIsInformative = false;
575 
576   if (!R.Qualifier)
577     R.Qualifier = getRequiredQualification(SemaRef.Context,
578                                            CurContext,
579                                            R.Declaration->getDeclContext());
580   return false;
581 }
582 
583 /// \brief A simplified classification of types used to determine whether two
584 /// types are "similar enough" when adjusting priorities.
585 SimplifiedTypeClass clang::getSimplifiedTypeClass(CanQualType T) {
586   switch (T->getTypeClass()) {
587   case Type::Builtin:
588     switch (cast<BuiltinType>(T)->getKind()) {
589       case BuiltinType::Void:
590         return STC_Void;
591 
592       case BuiltinType::NullPtr:
593         return STC_Pointer;
594 
595       case BuiltinType::Overload:
596       case BuiltinType::Dependent:
597         return STC_Other;
598 
599       case BuiltinType::ObjCId:
600       case BuiltinType::ObjCClass:
601       case BuiltinType::ObjCSel:
602         return STC_ObjectiveC;
603 
604       default:
605         return STC_Arithmetic;
606     }
607 
608   case Type::Complex:
609     return STC_Arithmetic;
610 
611   case Type::Pointer:
612     return STC_Pointer;
613 
614   case Type::BlockPointer:
615     return STC_Block;
616 
617   case Type::LValueReference:
618   case Type::RValueReference:
619     return getSimplifiedTypeClass(T->getAs<ReferenceType>()->getPointeeType());
620 
621   case Type::ConstantArray:
622   case Type::IncompleteArray:
623   case Type::VariableArray:
624   case Type::DependentSizedArray:
625     return STC_Array;
626 
627   case Type::DependentSizedExtVector:
628   case Type::Vector:
629   case Type::ExtVector:
630     return STC_Arithmetic;
631 
632   case Type::FunctionProto:
633   case Type::FunctionNoProto:
634     return STC_Function;
635 
636   case Type::Record:
637     return STC_Record;
638 
639   case Type::Enum:
640     return STC_Arithmetic;
641 
642   case Type::ObjCObject:
643   case Type::ObjCInterface:
644   case Type::ObjCObjectPointer:
645     return STC_ObjectiveC;
646 
647   default:
648     return STC_Other;
649   }
650 }
651 
652 /// \brief Get the type that a given expression will have if this declaration
653 /// is used as an expression in its "typical" code-completion form.
654 QualType clang::getDeclUsageType(ASTContext &C, const NamedDecl *ND) {
655   ND = cast<NamedDecl>(ND->getUnderlyingDecl());
656 
657   if (const TypeDecl *Type = dyn_cast<TypeDecl>(ND))
658     return C.getTypeDeclType(Type);
659   if (const ObjCInterfaceDecl *Iface = dyn_cast<ObjCInterfaceDecl>(ND))
660     return C.getObjCInterfaceType(Iface);
661 
662   QualType T;
663   if (const FunctionDecl *Function = ND->getAsFunction())
664     T = Function->getCallResultType();
665   else if (const ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(ND))
666     T = Method->getSendResultType();
667   else if (const EnumConstantDecl *Enumerator = dyn_cast<EnumConstantDecl>(ND))
668     T = C.getTypeDeclType(cast<EnumDecl>(Enumerator->getDeclContext()));
669   else if (const ObjCPropertyDecl *Property = dyn_cast<ObjCPropertyDecl>(ND))
670     T = Property->getType();
671   else if (const ValueDecl *Value = dyn_cast<ValueDecl>(ND))
672     T = Value->getType();
673   else
674     return QualType();
675 
676   // Dig through references, function pointers, and block pointers to
677   // get down to the likely type of an expression when the entity is
678   // used.
679   do {
680     if (const ReferenceType *Ref = T->getAs<ReferenceType>()) {
681       T = Ref->getPointeeType();
682       continue;
683     }
684 
685     if (const PointerType *Pointer = T->getAs<PointerType>()) {
686       if (Pointer->getPointeeType()->isFunctionType()) {
687         T = Pointer->getPointeeType();
688         continue;
689       }
690 
691       break;
692     }
693 
694     if (const BlockPointerType *Block = T->getAs<BlockPointerType>()) {
695       T = Block->getPointeeType();
696       continue;
697     }
698 
699     if (const FunctionType *Function = T->getAs<FunctionType>()) {
700       T = Function->getReturnType();
701       continue;
702     }
703 
704     break;
705   } while (true);
706 
707   return T;
708 }
709 
710 unsigned ResultBuilder::getBasePriority(const NamedDecl *ND) {
711   if (!ND)
712     return CCP_Unlikely;
713 
714   // Context-based decisions.
715   const DeclContext *LexicalDC = ND->getLexicalDeclContext();
716   if (LexicalDC->isFunctionOrMethod()) {
717     // _cmd is relatively rare
718     if (const ImplicitParamDecl *ImplicitParam =
719         dyn_cast<ImplicitParamDecl>(ND))
720       if (ImplicitParam->getIdentifier() &&
721           ImplicitParam->getIdentifier()->isStr("_cmd"))
722         return CCP_ObjC_cmd;
723 
724     return CCP_LocalDeclaration;
725   }
726 
727   const DeclContext *DC = ND->getDeclContext()->getRedeclContext();
728   if (DC->isRecord() || isa<ObjCContainerDecl>(DC))
729     return CCP_MemberDeclaration;
730 
731   // Content-based decisions.
732   if (isa<EnumConstantDecl>(ND))
733     return CCP_Constant;
734 
735   // Use CCP_Type for type declarations unless we're in a statement, Objective-C
736   // message receiver, or parenthesized expression context. There, it's as
737   // likely that the user will want to write a type as other declarations.
738   if ((isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND)) &&
739       !(CompletionContext.getKind() == CodeCompletionContext::CCC_Statement ||
740         CompletionContext.getKind()
741           == CodeCompletionContext::CCC_ObjCMessageReceiver ||
742         CompletionContext.getKind()
743           == CodeCompletionContext::CCC_ParenthesizedExpression))
744     return CCP_Type;
745 
746   return CCP_Declaration;
747 }
748 
749 void ResultBuilder::AdjustResultPriorityForDecl(Result &R) {
750   // If this is an Objective-C method declaration whose selector matches our
751   // preferred selector, give it a priority boost.
752   if (!PreferredSelector.isNull())
753     if (const ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(R.Declaration))
754       if (PreferredSelector == Method->getSelector())
755         R.Priority += CCD_SelectorMatch;
756 
757   // If we have a preferred type, adjust the priority for results with exactly-
758   // matching or nearly-matching types.
759   if (!PreferredType.isNull()) {
760     QualType T = getDeclUsageType(SemaRef.Context, R.Declaration);
761     if (!T.isNull()) {
762       CanQualType TC = SemaRef.Context.getCanonicalType(T);
763       // Check for exactly-matching types (modulo qualifiers).
764       if (SemaRef.Context.hasSameUnqualifiedType(PreferredType, TC))
765         R.Priority /= CCF_ExactTypeMatch;
766       // Check for nearly-matching types, based on classification of each.
767       else if ((getSimplifiedTypeClass(PreferredType)
768                                                == getSimplifiedTypeClass(TC)) &&
769                !(PreferredType->isEnumeralType() && TC->isEnumeralType()))
770         R.Priority /= CCF_SimilarTypeMatch;
771     }
772   }
773 }
774 
775 void ResultBuilder::MaybeAddConstructorResults(Result R) {
776   if (!SemaRef.getLangOpts().CPlusPlus || !R.Declaration ||
777       !CompletionContext.wantConstructorResults())
778     return;
779 
780   ASTContext &Context = SemaRef.Context;
781   const NamedDecl *D = R.Declaration;
782   const CXXRecordDecl *Record = 0;
783   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(D))
784     Record = ClassTemplate->getTemplatedDecl();
785   else if ((Record = dyn_cast<CXXRecordDecl>(D))) {
786     // Skip specializations and partial specializations.
787     if (isa<ClassTemplateSpecializationDecl>(Record))
788       return;
789   } else {
790     // There are no constructors here.
791     return;
792   }
793 
794   Record = Record->getDefinition();
795   if (!Record)
796     return;
797 
798 
799   QualType RecordTy = Context.getTypeDeclType(Record);
800   DeclarationName ConstructorName
801     = Context.DeclarationNames.getCXXConstructorName(
802                                            Context.getCanonicalType(RecordTy));
803   DeclContext::lookup_const_result Ctors = Record->lookup(ConstructorName);
804   for (DeclContext::lookup_const_iterator I = Ctors.begin(),
805                                           E = Ctors.end();
806        I != E; ++I) {
807     R.Declaration = *I;
808     R.CursorKind = getCursorKindForDecl(R.Declaration);
809     Results.push_back(R);
810   }
811 }
812 
813 void ResultBuilder::MaybeAddResult(Result R, DeclContext *CurContext) {
814   assert(!ShadowMaps.empty() && "Must enter into a results scope");
815 
816   if (R.Kind != Result::RK_Declaration) {
817     // For non-declaration results, just add the result.
818     Results.push_back(R);
819     return;
820   }
821 
822   // Look through using declarations.
823   if (const UsingShadowDecl *Using =
824           dyn_cast<UsingShadowDecl>(R.Declaration)) {
825     MaybeAddResult(Result(Using->getTargetDecl(),
826                           getBasePriority(Using->getTargetDecl()),
827                           R.Qualifier),
828                    CurContext);
829     return;
830   }
831 
832   const Decl *CanonDecl = R.Declaration->getCanonicalDecl();
833   unsigned IDNS = CanonDecl->getIdentifierNamespace();
834 
835   bool AsNestedNameSpecifier = false;
836   if (!isInterestingDecl(R.Declaration, AsNestedNameSpecifier))
837     return;
838 
839   // C++ constructors are never found by name lookup.
840   if (isa<CXXConstructorDecl>(R.Declaration))
841     return;
842 
843   ShadowMap &SMap = ShadowMaps.back();
844   ShadowMapEntry::iterator I, IEnd;
845   ShadowMap::iterator NamePos = SMap.find(R.Declaration->getDeclName());
846   if (NamePos != SMap.end()) {
847     I = NamePos->second.begin();
848     IEnd = NamePos->second.end();
849   }
850 
851   for (; I != IEnd; ++I) {
852     const NamedDecl *ND = I->first;
853     unsigned Index = I->second;
854     if (ND->getCanonicalDecl() == CanonDecl) {
855       // This is a redeclaration. Always pick the newer declaration.
856       Results[Index].Declaration = R.Declaration;
857 
858       // We're done.
859       return;
860     }
861   }
862 
863   // This is a new declaration in this scope. However, check whether this
864   // declaration name is hidden by a similarly-named declaration in an outer
865   // scope.
866   std::list<ShadowMap>::iterator SM, SMEnd = ShadowMaps.end();
867   --SMEnd;
868   for (SM = ShadowMaps.begin(); SM != SMEnd; ++SM) {
869     ShadowMapEntry::iterator I, IEnd;
870     ShadowMap::iterator NamePos = SM->find(R.Declaration->getDeclName());
871     if (NamePos != SM->end()) {
872       I = NamePos->second.begin();
873       IEnd = NamePos->second.end();
874     }
875     for (; I != IEnd; ++I) {
876       // A tag declaration does not hide a non-tag declaration.
877       if (I->first->hasTagIdentifierNamespace() &&
878           (IDNS & (Decl::IDNS_Member | Decl::IDNS_Ordinary |
879                    Decl::IDNS_LocalExtern | Decl::IDNS_ObjCProtocol)))
880         continue;
881 
882       // Protocols are in distinct namespaces from everything else.
883       if (((I->first->getIdentifierNamespace() & Decl::IDNS_ObjCProtocol)
884            || (IDNS & Decl::IDNS_ObjCProtocol)) &&
885           I->first->getIdentifierNamespace() != IDNS)
886         continue;
887 
888       // The newly-added result is hidden by an entry in the shadow map.
889       if (CheckHiddenResult(R, CurContext, I->first))
890         return;
891 
892       break;
893     }
894   }
895 
896   // Make sure that any given declaration only shows up in the result set once.
897   if (!AllDeclsFound.insert(CanonDecl))
898     return;
899 
900   // If the filter is for nested-name-specifiers, then this result starts a
901   // nested-name-specifier.
902   if (AsNestedNameSpecifier) {
903     R.StartsNestedNameSpecifier = true;
904     R.Priority = CCP_NestedNameSpecifier;
905   } else
906       AdjustResultPriorityForDecl(R);
907 
908   // If this result is supposed to have an informative qualifier, add one.
909   if (R.QualifierIsInformative && !R.Qualifier &&
910       !R.StartsNestedNameSpecifier) {
911     const DeclContext *Ctx = R.Declaration->getDeclContext();
912     if (const NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(Ctx))
913       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, Namespace);
914     else if (const TagDecl *Tag = dyn_cast<TagDecl>(Ctx))
915       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, false,
916                              SemaRef.Context.getTypeDeclType(Tag).getTypePtr());
917     else
918       R.QualifierIsInformative = false;
919   }
920 
921   // Insert this result into the set of results and into the current shadow
922   // map.
923   SMap[R.Declaration->getDeclName()].Add(R.Declaration, Results.size());
924   Results.push_back(R);
925 
926   if (!AsNestedNameSpecifier)
927     MaybeAddConstructorResults(R);
928 }
929 
930 void ResultBuilder::AddResult(Result R, DeclContext *CurContext,
931                               NamedDecl *Hiding, bool InBaseClass = false) {
932   if (R.Kind != Result::RK_Declaration) {
933     // For non-declaration results, just add the result.
934     Results.push_back(R);
935     return;
936   }
937 
938   // Look through using declarations.
939   if (const UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(R.Declaration)) {
940     AddResult(Result(Using->getTargetDecl(),
941                      getBasePriority(Using->getTargetDecl()),
942                      R.Qualifier),
943               CurContext, Hiding);
944     return;
945   }
946 
947   bool AsNestedNameSpecifier = false;
948   if (!isInterestingDecl(R.Declaration, AsNestedNameSpecifier))
949     return;
950 
951   // C++ constructors are never found by name lookup.
952   if (isa<CXXConstructorDecl>(R.Declaration))
953     return;
954 
955   if (Hiding && CheckHiddenResult(R, CurContext, Hiding))
956     return;
957 
958   // Make sure that any given declaration only shows up in the result set once.
959   if (!AllDeclsFound.insert(R.Declaration->getCanonicalDecl()))
960     return;
961 
962   // If the filter is for nested-name-specifiers, then this result starts a
963   // nested-name-specifier.
964   if (AsNestedNameSpecifier) {
965     R.StartsNestedNameSpecifier = true;
966     R.Priority = CCP_NestedNameSpecifier;
967   }
968   else if (Filter == &ResultBuilder::IsMember && !R.Qualifier && InBaseClass &&
969            isa<CXXRecordDecl>(R.Declaration->getDeclContext()
970                                                   ->getRedeclContext()))
971     R.QualifierIsInformative = true;
972 
973   // If this result is supposed to have an informative qualifier, add one.
974   if (R.QualifierIsInformative && !R.Qualifier &&
975       !R.StartsNestedNameSpecifier) {
976     const DeclContext *Ctx = R.Declaration->getDeclContext();
977     if (const NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(Ctx))
978       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, Namespace);
979     else if (const TagDecl *Tag = dyn_cast<TagDecl>(Ctx))
980       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, false,
981                             SemaRef.Context.getTypeDeclType(Tag).getTypePtr());
982     else
983       R.QualifierIsInformative = false;
984   }
985 
986   // Adjust the priority if this result comes from a base class.
987   if (InBaseClass)
988     R.Priority += CCD_InBaseClass;
989 
990   AdjustResultPriorityForDecl(R);
991 
992   if (HasObjectTypeQualifiers)
993     if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(R.Declaration))
994       if (Method->isInstance()) {
995         Qualifiers MethodQuals
996                         = Qualifiers::fromCVRMask(Method->getTypeQualifiers());
997         if (ObjectTypeQualifiers == MethodQuals)
998           R.Priority += CCD_ObjectQualifierMatch;
999         else if (ObjectTypeQualifiers - MethodQuals) {
1000           // The method cannot be invoked, because doing so would drop
1001           // qualifiers.
1002           return;
1003         }
1004       }
1005 
1006   // Insert this result into the set of results.
1007   Results.push_back(R);
1008 
1009   if (!AsNestedNameSpecifier)
1010     MaybeAddConstructorResults(R);
1011 }
1012 
1013 void ResultBuilder::AddResult(Result R) {
1014   assert(R.Kind != Result::RK_Declaration &&
1015           "Declaration results need more context");
1016   Results.push_back(R);
1017 }
1018 
1019 /// \brief Enter into a new scope.
1020 void ResultBuilder::EnterNewScope() {
1021   ShadowMaps.push_back(ShadowMap());
1022 }
1023 
1024 /// \brief Exit from the current scope.
1025 void ResultBuilder::ExitScope() {
1026   for (ShadowMap::iterator E = ShadowMaps.back().begin(),
1027                         EEnd = ShadowMaps.back().end();
1028        E != EEnd;
1029        ++E)
1030     E->second.Destroy();
1031 
1032   ShadowMaps.pop_back();
1033 }
1034 
1035 /// \brief Determines whether this given declaration will be found by
1036 /// ordinary name lookup.
1037 bool ResultBuilder::IsOrdinaryName(const NamedDecl *ND) const {
1038   ND = cast<NamedDecl>(ND->getUnderlyingDecl());
1039 
1040   // If name lookup finds a local extern declaration, then we are in a
1041   // context where it behaves like an ordinary name.
1042   unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_LocalExtern;
1043   if (SemaRef.getLangOpts().CPlusPlus)
1044     IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace | Decl::IDNS_Member;
1045   else if (SemaRef.getLangOpts().ObjC1) {
1046     if (isa<ObjCIvarDecl>(ND))
1047       return true;
1048   }
1049 
1050   return ND->getIdentifierNamespace() & IDNS;
1051 }
1052 
1053 /// \brief Determines whether this given declaration will be found by
1054 /// ordinary name lookup but is not a type name.
1055 bool ResultBuilder::IsOrdinaryNonTypeName(const NamedDecl *ND) const {
1056   ND = cast<NamedDecl>(ND->getUnderlyingDecl());
1057   if (isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND))
1058     return false;
1059 
1060   unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_LocalExtern;
1061   if (SemaRef.getLangOpts().CPlusPlus)
1062     IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace | Decl::IDNS_Member;
1063   else if (SemaRef.getLangOpts().ObjC1) {
1064     if (isa<ObjCIvarDecl>(ND))
1065       return true;
1066   }
1067 
1068   return ND->getIdentifierNamespace() & IDNS;
1069 }
1070 
1071 bool ResultBuilder::IsIntegralConstantValue(const NamedDecl *ND) const {
1072   if (!IsOrdinaryNonTypeName(ND))
1073     return 0;
1074 
1075   if (const ValueDecl *VD = dyn_cast<ValueDecl>(ND->getUnderlyingDecl()))
1076     if (VD->getType()->isIntegralOrEnumerationType())
1077       return true;
1078 
1079   return false;
1080 }
1081 
1082 /// \brief Determines whether this given declaration will be found by
1083 /// ordinary name lookup.
1084 bool ResultBuilder::IsOrdinaryNonValueName(const NamedDecl *ND) const {
1085   ND = cast<NamedDecl>(ND->getUnderlyingDecl());
1086 
1087   unsigned IDNS = Decl::IDNS_Ordinary | Decl::IDNS_LocalExtern;
1088   if (SemaRef.getLangOpts().CPlusPlus)
1089     IDNS |= Decl::IDNS_Tag | Decl::IDNS_Namespace;
1090 
1091   return (ND->getIdentifierNamespace() & IDNS) &&
1092     !isa<ValueDecl>(ND) && !isa<FunctionTemplateDecl>(ND) &&
1093     !isa<ObjCPropertyDecl>(ND);
1094 }
1095 
1096 /// \brief Determines whether the given declaration is suitable as the
1097 /// start of a C++ nested-name-specifier, e.g., a class or namespace.
1098 bool ResultBuilder::IsNestedNameSpecifier(const NamedDecl *ND) const {
1099   // Allow us to find class templates, too.
1100   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
1101     ND = ClassTemplate->getTemplatedDecl();
1102 
1103   return SemaRef.isAcceptableNestedNameSpecifier(ND);
1104 }
1105 
1106 /// \brief Determines whether the given declaration is an enumeration.
1107 bool ResultBuilder::IsEnum(const NamedDecl *ND) const {
1108   return isa<EnumDecl>(ND);
1109 }
1110 
1111 /// \brief Determines whether the given declaration is a class or struct.
1112 bool ResultBuilder::IsClassOrStruct(const NamedDecl *ND) const {
1113   // Allow us to find class templates, too.
1114   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
1115     ND = ClassTemplate->getTemplatedDecl();
1116 
1117   // For purposes of this check, interfaces match too.
1118   if (const RecordDecl *RD = dyn_cast<RecordDecl>(ND))
1119     return RD->getTagKind() == TTK_Class ||
1120     RD->getTagKind() == TTK_Struct ||
1121     RD->getTagKind() == TTK_Interface;
1122 
1123   return false;
1124 }
1125 
1126 /// \brief Determines whether the given declaration is a union.
1127 bool ResultBuilder::IsUnion(const NamedDecl *ND) const {
1128   // Allow us to find class templates, too.
1129   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
1130     ND = ClassTemplate->getTemplatedDecl();
1131 
1132   if (const RecordDecl *RD = dyn_cast<RecordDecl>(ND))
1133     return RD->getTagKind() == TTK_Union;
1134 
1135   return false;
1136 }
1137 
1138 /// \brief Determines whether the given declaration is a namespace.
1139 bool ResultBuilder::IsNamespace(const NamedDecl *ND) const {
1140   return isa<NamespaceDecl>(ND);
1141 }
1142 
1143 /// \brief Determines whether the given declaration is a namespace or
1144 /// namespace alias.
1145 bool ResultBuilder::IsNamespaceOrAlias(const NamedDecl *ND) const {
1146   return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
1147 }
1148 
1149 /// \brief Determines whether the given declaration is a type.
1150 bool ResultBuilder::IsType(const NamedDecl *ND) const {
1151   if (const UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(ND))
1152     ND = Using->getTargetDecl();
1153 
1154   return isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND);
1155 }
1156 
1157 /// \brief Determines which members of a class should be visible via
1158 /// "." or "->".  Only value declarations, nested name specifiers, and
1159 /// using declarations thereof should show up.
1160 bool ResultBuilder::IsMember(const NamedDecl *ND) const {
1161   if (const UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(ND))
1162     ND = Using->getTargetDecl();
1163 
1164   return isa<ValueDecl>(ND) || isa<FunctionTemplateDecl>(ND) ||
1165     isa<ObjCPropertyDecl>(ND);
1166 }
1167 
1168 static bool isObjCReceiverType(ASTContext &C, QualType T) {
1169   T = C.getCanonicalType(T);
1170   switch (T->getTypeClass()) {
1171   case Type::ObjCObject:
1172   case Type::ObjCInterface:
1173   case Type::ObjCObjectPointer:
1174     return true;
1175 
1176   case Type::Builtin:
1177     switch (cast<BuiltinType>(T)->getKind()) {
1178     case BuiltinType::ObjCId:
1179     case BuiltinType::ObjCClass:
1180     case BuiltinType::ObjCSel:
1181       return true;
1182 
1183     default:
1184       break;
1185     }
1186     return false;
1187 
1188   default:
1189     break;
1190   }
1191 
1192   if (!C.getLangOpts().CPlusPlus)
1193     return false;
1194 
1195   // FIXME: We could perform more analysis here to determine whether a
1196   // particular class type has any conversions to Objective-C types. For now,
1197   // just accept all class types.
1198   return T->isDependentType() || T->isRecordType();
1199 }
1200 
1201 bool ResultBuilder::IsObjCMessageReceiver(const NamedDecl *ND) const {
1202   QualType T = getDeclUsageType(SemaRef.Context, ND);
1203   if (T.isNull())
1204     return false;
1205 
1206   T = SemaRef.Context.getBaseElementType(T);
1207   return isObjCReceiverType(SemaRef.Context, T);
1208 }
1209 
1210 bool ResultBuilder::IsObjCMessageReceiverOrLambdaCapture(const NamedDecl *ND) const {
1211   if (IsObjCMessageReceiver(ND))
1212     return true;
1213 
1214   const VarDecl *Var = dyn_cast<VarDecl>(ND);
1215   if (!Var)
1216     return false;
1217 
1218   return Var->hasLocalStorage() && !Var->hasAttr<BlocksAttr>();
1219 }
1220 
1221 bool ResultBuilder::IsObjCCollection(const NamedDecl *ND) const {
1222   if ((SemaRef.getLangOpts().CPlusPlus && !IsOrdinaryName(ND)) ||
1223       (!SemaRef.getLangOpts().CPlusPlus && !IsOrdinaryNonTypeName(ND)))
1224     return false;
1225 
1226   QualType T = getDeclUsageType(SemaRef.Context, ND);
1227   if (T.isNull())
1228     return false;
1229 
1230   T = SemaRef.Context.getBaseElementType(T);
1231   return T->isObjCObjectType() || T->isObjCObjectPointerType() ||
1232          T->isObjCIdType() ||
1233          (SemaRef.getLangOpts().CPlusPlus && T->isRecordType());
1234 }
1235 
1236 bool ResultBuilder::IsImpossibleToSatisfy(const NamedDecl *ND) const {
1237   return false;
1238 }
1239 
1240 /// \brief Determines whether the given declaration is an Objective-C
1241 /// instance variable.
1242 bool ResultBuilder::IsObjCIvar(const NamedDecl *ND) const {
1243   return isa<ObjCIvarDecl>(ND);
1244 }
1245 
1246 namespace {
1247   /// \brief Visible declaration consumer that adds a code-completion result
1248   /// for each visible declaration.
1249   class CodeCompletionDeclConsumer : public VisibleDeclConsumer {
1250     ResultBuilder &Results;
1251     DeclContext *CurContext;
1252 
1253   public:
1254     CodeCompletionDeclConsumer(ResultBuilder &Results, DeclContext *CurContext)
1255       : Results(Results), CurContext(CurContext) { }
1256 
1257     void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx,
1258                    bool InBaseClass) override {
1259       bool Accessible = true;
1260       if (Ctx)
1261         Accessible = Results.getSema().IsSimplyAccessible(ND, Ctx);
1262 
1263       ResultBuilder::Result Result(ND, Results.getBasePriority(ND), 0, false,
1264                                    Accessible);
1265       Results.AddResult(Result, CurContext, Hiding, InBaseClass);
1266     }
1267   };
1268 }
1269 
1270 /// \brief Add type specifiers for the current language as keyword results.
1271 static void AddTypeSpecifierResults(const LangOptions &LangOpts,
1272                                     ResultBuilder &Results) {
1273   typedef CodeCompletionResult Result;
1274   Results.AddResult(Result("short", CCP_Type));
1275   Results.AddResult(Result("long", CCP_Type));
1276   Results.AddResult(Result("signed", CCP_Type));
1277   Results.AddResult(Result("unsigned", CCP_Type));
1278   Results.AddResult(Result("void", CCP_Type));
1279   Results.AddResult(Result("char", CCP_Type));
1280   Results.AddResult(Result("int", CCP_Type));
1281   Results.AddResult(Result("float", CCP_Type));
1282   Results.AddResult(Result("double", CCP_Type));
1283   Results.AddResult(Result("enum", CCP_Type));
1284   Results.AddResult(Result("struct", CCP_Type));
1285   Results.AddResult(Result("union", CCP_Type));
1286   Results.AddResult(Result("const", CCP_Type));
1287   Results.AddResult(Result("volatile", CCP_Type));
1288 
1289   if (LangOpts.C99) {
1290     // C99-specific
1291     Results.AddResult(Result("_Complex", CCP_Type));
1292     Results.AddResult(Result("_Imaginary", CCP_Type));
1293     Results.AddResult(Result("_Bool", CCP_Type));
1294     Results.AddResult(Result("restrict", CCP_Type));
1295   }
1296 
1297   CodeCompletionBuilder Builder(Results.getAllocator(),
1298                                 Results.getCodeCompletionTUInfo());
1299   if (LangOpts.CPlusPlus) {
1300     // C++-specific
1301     Results.AddResult(Result("bool", CCP_Type +
1302                              (LangOpts.ObjC1? CCD_bool_in_ObjC : 0)));
1303     Results.AddResult(Result("class", CCP_Type));
1304     Results.AddResult(Result("wchar_t", CCP_Type));
1305 
1306     // typename qualified-id
1307     Builder.AddTypedTextChunk("typename");
1308     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1309     Builder.AddPlaceholderChunk("qualifier");
1310     Builder.AddTextChunk("::");
1311     Builder.AddPlaceholderChunk("name");
1312     Results.AddResult(Result(Builder.TakeString()));
1313 
1314     if (LangOpts.CPlusPlus11) {
1315       Results.AddResult(Result("auto", CCP_Type));
1316       Results.AddResult(Result("char16_t", CCP_Type));
1317       Results.AddResult(Result("char32_t", CCP_Type));
1318 
1319       Builder.AddTypedTextChunk("decltype");
1320       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1321       Builder.AddPlaceholderChunk("expression");
1322       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1323       Results.AddResult(Result(Builder.TakeString()));
1324     }
1325   }
1326 
1327   // GNU extensions
1328   if (LangOpts.GNUMode) {
1329     // FIXME: Enable when we actually support decimal floating point.
1330     //    Results.AddResult(Result("_Decimal32"));
1331     //    Results.AddResult(Result("_Decimal64"));
1332     //    Results.AddResult(Result("_Decimal128"));
1333 
1334     Builder.AddTypedTextChunk("typeof");
1335     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1336     Builder.AddPlaceholderChunk("expression");
1337     Results.AddResult(Result(Builder.TakeString()));
1338 
1339     Builder.AddTypedTextChunk("typeof");
1340     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1341     Builder.AddPlaceholderChunk("type");
1342     Builder.AddChunk(CodeCompletionString::CK_RightParen);
1343     Results.AddResult(Result(Builder.TakeString()));
1344   }
1345 }
1346 
1347 static void AddStorageSpecifiers(Sema::ParserCompletionContext CCC,
1348                                  const LangOptions &LangOpts,
1349                                  ResultBuilder &Results) {
1350   typedef CodeCompletionResult Result;
1351   // Note: we don't suggest either "auto" or "register", because both
1352   // are pointless as storage specifiers. Elsewhere, we suggest "auto"
1353   // in C++0x as a type specifier.
1354   Results.AddResult(Result("extern"));
1355   Results.AddResult(Result("static"));
1356 }
1357 
1358 static void AddFunctionSpecifiers(Sema::ParserCompletionContext CCC,
1359                                   const LangOptions &LangOpts,
1360                                   ResultBuilder &Results) {
1361   typedef CodeCompletionResult Result;
1362   switch (CCC) {
1363   case Sema::PCC_Class:
1364   case Sema::PCC_MemberTemplate:
1365     if (LangOpts.CPlusPlus) {
1366       Results.AddResult(Result("explicit"));
1367       Results.AddResult(Result("friend"));
1368       Results.AddResult(Result("mutable"));
1369       Results.AddResult(Result("virtual"));
1370     }
1371     // Fall through
1372 
1373   case Sema::PCC_ObjCInterface:
1374   case Sema::PCC_ObjCImplementation:
1375   case Sema::PCC_Namespace:
1376   case Sema::PCC_Template:
1377     if (LangOpts.CPlusPlus || LangOpts.C99)
1378       Results.AddResult(Result("inline"));
1379     break;
1380 
1381   case Sema::PCC_ObjCInstanceVariableList:
1382   case Sema::PCC_Expression:
1383   case Sema::PCC_Statement:
1384   case Sema::PCC_ForInit:
1385   case Sema::PCC_Condition:
1386   case Sema::PCC_RecoveryInFunction:
1387   case Sema::PCC_Type:
1388   case Sema::PCC_ParenthesizedExpression:
1389   case Sema::PCC_LocalDeclarationSpecifiers:
1390     break;
1391   }
1392 }
1393 
1394 static void AddObjCExpressionResults(ResultBuilder &Results, bool NeedAt);
1395 static void AddObjCStatementResults(ResultBuilder &Results, bool NeedAt);
1396 static void AddObjCVisibilityResults(const LangOptions &LangOpts,
1397                                      ResultBuilder &Results,
1398                                      bool NeedAt);
1399 static void AddObjCImplementationResults(const LangOptions &LangOpts,
1400                                          ResultBuilder &Results,
1401                                          bool NeedAt);
1402 static void AddObjCInterfaceResults(const LangOptions &LangOpts,
1403                                     ResultBuilder &Results,
1404                                     bool NeedAt);
1405 static void AddObjCTopLevelResults(ResultBuilder &Results, bool NeedAt);
1406 
1407 static void AddTypedefResult(ResultBuilder &Results) {
1408   CodeCompletionBuilder Builder(Results.getAllocator(),
1409                                 Results.getCodeCompletionTUInfo());
1410   Builder.AddTypedTextChunk("typedef");
1411   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1412   Builder.AddPlaceholderChunk("type");
1413   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1414   Builder.AddPlaceholderChunk("name");
1415   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
1416 }
1417 
1418 static bool WantTypesInContext(Sema::ParserCompletionContext CCC,
1419                                const LangOptions &LangOpts) {
1420   switch (CCC) {
1421   case Sema::PCC_Namespace:
1422   case Sema::PCC_Class:
1423   case Sema::PCC_ObjCInstanceVariableList:
1424   case Sema::PCC_Template:
1425   case Sema::PCC_MemberTemplate:
1426   case Sema::PCC_Statement:
1427   case Sema::PCC_RecoveryInFunction:
1428   case Sema::PCC_Type:
1429   case Sema::PCC_ParenthesizedExpression:
1430   case Sema::PCC_LocalDeclarationSpecifiers:
1431     return true;
1432 
1433   case Sema::PCC_Expression:
1434   case Sema::PCC_Condition:
1435     return LangOpts.CPlusPlus;
1436 
1437   case Sema::PCC_ObjCInterface:
1438   case Sema::PCC_ObjCImplementation:
1439     return false;
1440 
1441   case Sema::PCC_ForInit:
1442     return LangOpts.CPlusPlus || LangOpts.ObjC1 || LangOpts.C99;
1443   }
1444 
1445   llvm_unreachable("Invalid ParserCompletionContext!");
1446 }
1447 
1448 static PrintingPolicy getCompletionPrintingPolicy(const ASTContext &Context,
1449                                                   const Preprocessor &PP) {
1450   PrintingPolicy Policy = Sema::getPrintingPolicy(Context, PP);
1451   Policy.AnonymousTagLocations = false;
1452   Policy.SuppressStrongLifetime = true;
1453   Policy.SuppressUnwrittenScope = true;
1454   return Policy;
1455 }
1456 
1457 /// \brief Retrieve a printing policy suitable for code completion.
1458 static PrintingPolicy getCompletionPrintingPolicy(Sema &S) {
1459   return getCompletionPrintingPolicy(S.Context, S.PP);
1460 }
1461 
1462 /// \brief Retrieve the string representation of the given type as a string
1463 /// that has the appropriate lifetime for code completion.
1464 ///
1465 /// This routine provides a fast path where we provide constant strings for
1466 /// common type names.
1467 static const char *GetCompletionTypeString(QualType T,
1468                                            ASTContext &Context,
1469                                            const PrintingPolicy &Policy,
1470                                            CodeCompletionAllocator &Allocator) {
1471   if (!T.getLocalQualifiers()) {
1472     // Built-in type names are constant strings.
1473     if (const BuiltinType *BT = dyn_cast<BuiltinType>(T))
1474       return BT->getNameAsCString(Policy);
1475 
1476     // Anonymous tag types are constant strings.
1477     if (const TagType *TagT = dyn_cast<TagType>(T))
1478       if (TagDecl *Tag = TagT->getDecl())
1479         if (!Tag->hasNameForLinkage()) {
1480           switch (Tag->getTagKind()) {
1481           case TTK_Struct: return "struct <anonymous>";
1482           case TTK_Interface: return "__interface <anonymous>";
1483           case TTK_Class:  return "class <anonymous>";
1484           case TTK_Union:  return "union <anonymous>";
1485           case TTK_Enum:   return "enum <anonymous>";
1486           }
1487         }
1488   }
1489 
1490   // Slow path: format the type as a string.
1491   std::string Result;
1492   T.getAsStringInternal(Result, Policy);
1493   return Allocator.CopyString(Result);
1494 }
1495 
1496 /// \brief Add a completion for "this", if we're in a member function.
1497 static void addThisCompletion(Sema &S, ResultBuilder &Results) {
1498   QualType ThisTy = S.getCurrentThisType();
1499   if (ThisTy.isNull())
1500     return;
1501 
1502   CodeCompletionAllocator &Allocator = Results.getAllocator();
1503   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
1504   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
1505   Builder.AddResultTypeChunk(GetCompletionTypeString(ThisTy,
1506                                                      S.Context,
1507                                                      Policy,
1508                                                      Allocator));
1509   Builder.AddTypedTextChunk("this");
1510   Results.AddResult(CodeCompletionResult(Builder.TakeString()));
1511 }
1512 
1513 /// \brief Add language constructs that show up for "ordinary" names.
1514 static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC,
1515                                    Scope *S,
1516                                    Sema &SemaRef,
1517                                    ResultBuilder &Results) {
1518   CodeCompletionAllocator &Allocator = Results.getAllocator();
1519   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
1520   PrintingPolicy Policy = getCompletionPrintingPolicy(SemaRef);
1521 
1522   typedef CodeCompletionResult Result;
1523   switch (CCC) {
1524   case Sema::PCC_Namespace:
1525     if (SemaRef.getLangOpts().CPlusPlus) {
1526       if (Results.includeCodePatterns()) {
1527         // namespace <identifier> { declarations }
1528         Builder.AddTypedTextChunk("namespace");
1529         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1530         Builder.AddPlaceholderChunk("identifier");
1531         Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
1532         Builder.AddPlaceholderChunk("declarations");
1533         Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
1534         Builder.AddChunk(CodeCompletionString::CK_RightBrace);
1535         Results.AddResult(Result(Builder.TakeString()));
1536       }
1537 
1538       // namespace identifier = identifier ;
1539       Builder.AddTypedTextChunk("namespace");
1540       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1541       Builder.AddPlaceholderChunk("name");
1542       Builder.AddChunk(CodeCompletionString::CK_Equal);
1543       Builder.AddPlaceholderChunk("namespace");
1544       Results.AddResult(Result(Builder.TakeString()));
1545 
1546       // Using directives
1547       Builder.AddTypedTextChunk("using");
1548       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1549       Builder.AddTextChunk("namespace");
1550       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1551       Builder.AddPlaceholderChunk("identifier");
1552       Results.AddResult(Result(Builder.TakeString()));
1553 
1554       // asm(string-literal)
1555       Builder.AddTypedTextChunk("asm");
1556       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1557       Builder.AddPlaceholderChunk("string-literal");
1558       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1559       Results.AddResult(Result(Builder.TakeString()));
1560 
1561       if (Results.includeCodePatterns()) {
1562         // Explicit template instantiation
1563         Builder.AddTypedTextChunk("template");
1564         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1565         Builder.AddPlaceholderChunk("declaration");
1566         Results.AddResult(Result(Builder.TakeString()));
1567       }
1568     }
1569 
1570     if (SemaRef.getLangOpts().ObjC1)
1571       AddObjCTopLevelResults(Results, true);
1572 
1573     AddTypedefResult(Results);
1574     // Fall through
1575 
1576   case Sema::PCC_Class:
1577     if (SemaRef.getLangOpts().CPlusPlus) {
1578       // Using declaration
1579       Builder.AddTypedTextChunk("using");
1580       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1581       Builder.AddPlaceholderChunk("qualifier");
1582       Builder.AddTextChunk("::");
1583       Builder.AddPlaceholderChunk("name");
1584       Results.AddResult(Result(Builder.TakeString()));
1585 
1586       // using typename qualifier::name (only in a dependent context)
1587       if (SemaRef.CurContext->isDependentContext()) {
1588         Builder.AddTypedTextChunk("using");
1589         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1590         Builder.AddTextChunk("typename");
1591         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1592         Builder.AddPlaceholderChunk("qualifier");
1593         Builder.AddTextChunk("::");
1594         Builder.AddPlaceholderChunk("name");
1595         Results.AddResult(Result(Builder.TakeString()));
1596       }
1597 
1598       if (CCC == Sema::PCC_Class) {
1599         AddTypedefResult(Results);
1600 
1601         // public:
1602         Builder.AddTypedTextChunk("public");
1603         if (Results.includeCodePatterns())
1604           Builder.AddChunk(CodeCompletionString::CK_Colon);
1605         Results.AddResult(Result(Builder.TakeString()));
1606 
1607         // protected:
1608         Builder.AddTypedTextChunk("protected");
1609         if (Results.includeCodePatterns())
1610           Builder.AddChunk(CodeCompletionString::CK_Colon);
1611         Results.AddResult(Result(Builder.TakeString()));
1612 
1613         // private:
1614         Builder.AddTypedTextChunk("private");
1615         if (Results.includeCodePatterns())
1616           Builder.AddChunk(CodeCompletionString::CK_Colon);
1617         Results.AddResult(Result(Builder.TakeString()));
1618       }
1619     }
1620     // Fall through
1621 
1622   case Sema::PCC_Template:
1623   case Sema::PCC_MemberTemplate:
1624     if (SemaRef.getLangOpts().CPlusPlus && Results.includeCodePatterns()) {
1625       // template < parameters >
1626       Builder.AddTypedTextChunk("template");
1627       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
1628       Builder.AddPlaceholderChunk("parameters");
1629       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
1630       Results.AddResult(Result(Builder.TakeString()));
1631     }
1632 
1633     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
1634     AddFunctionSpecifiers(CCC, SemaRef.getLangOpts(), Results);
1635     break;
1636 
1637   case Sema::PCC_ObjCInterface:
1638     AddObjCInterfaceResults(SemaRef.getLangOpts(), Results, true);
1639     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
1640     AddFunctionSpecifiers(CCC, SemaRef.getLangOpts(), Results);
1641     break;
1642 
1643   case Sema::PCC_ObjCImplementation:
1644     AddObjCImplementationResults(SemaRef.getLangOpts(), Results, true);
1645     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
1646     AddFunctionSpecifiers(CCC, SemaRef.getLangOpts(), Results);
1647     break;
1648 
1649   case Sema::PCC_ObjCInstanceVariableList:
1650     AddObjCVisibilityResults(SemaRef.getLangOpts(), Results, true);
1651     break;
1652 
1653   case Sema::PCC_RecoveryInFunction:
1654   case Sema::PCC_Statement: {
1655     AddTypedefResult(Results);
1656 
1657     if (SemaRef.getLangOpts().CPlusPlus && Results.includeCodePatterns() &&
1658         SemaRef.getLangOpts().CXXExceptions) {
1659       Builder.AddTypedTextChunk("try");
1660       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
1661       Builder.AddPlaceholderChunk("statements");
1662       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
1663       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
1664       Builder.AddTextChunk("catch");
1665       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1666       Builder.AddPlaceholderChunk("declaration");
1667       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1668       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
1669       Builder.AddPlaceholderChunk("statements");
1670       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
1671       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
1672       Results.AddResult(Result(Builder.TakeString()));
1673     }
1674     if (SemaRef.getLangOpts().ObjC1)
1675       AddObjCStatementResults(Results, true);
1676 
1677     if (Results.includeCodePatterns()) {
1678       // if (condition) { statements }
1679       Builder.AddTypedTextChunk("if");
1680       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1681       if (SemaRef.getLangOpts().CPlusPlus)
1682         Builder.AddPlaceholderChunk("condition");
1683       else
1684         Builder.AddPlaceholderChunk("expression");
1685       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1686       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
1687       Builder.AddPlaceholderChunk("statements");
1688       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
1689       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
1690       Results.AddResult(Result(Builder.TakeString()));
1691 
1692       // switch (condition) { }
1693       Builder.AddTypedTextChunk("switch");
1694       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1695       if (SemaRef.getLangOpts().CPlusPlus)
1696         Builder.AddPlaceholderChunk("condition");
1697       else
1698         Builder.AddPlaceholderChunk("expression");
1699       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1700       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
1701       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
1702       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
1703       Results.AddResult(Result(Builder.TakeString()));
1704     }
1705 
1706     // Switch-specific statements.
1707     if (!SemaRef.getCurFunction()->SwitchStack.empty()) {
1708       // case expression:
1709       Builder.AddTypedTextChunk("case");
1710       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1711       Builder.AddPlaceholderChunk("expression");
1712       Builder.AddChunk(CodeCompletionString::CK_Colon);
1713       Results.AddResult(Result(Builder.TakeString()));
1714 
1715       // default:
1716       Builder.AddTypedTextChunk("default");
1717       Builder.AddChunk(CodeCompletionString::CK_Colon);
1718       Results.AddResult(Result(Builder.TakeString()));
1719     }
1720 
1721     if (Results.includeCodePatterns()) {
1722       /// while (condition) { statements }
1723       Builder.AddTypedTextChunk("while");
1724       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1725       if (SemaRef.getLangOpts().CPlusPlus)
1726         Builder.AddPlaceholderChunk("condition");
1727       else
1728         Builder.AddPlaceholderChunk("expression");
1729       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1730       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
1731       Builder.AddPlaceholderChunk("statements");
1732       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
1733       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
1734       Results.AddResult(Result(Builder.TakeString()));
1735 
1736       // do { statements } while ( expression );
1737       Builder.AddTypedTextChunk("do");
1738       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
1739       Builder.AddPlaceholderChunk("statements");
1740       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
1741       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
1742       Builder.AddTextChunk("while");
1743       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1744       Builder.AddPlaceholderChunk("expression");
1745       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1746       Results.AddResult(Result(Builder.TakeString()));
1747 
1748       // for ( for-init-statement ; condition ; expression ) { statements }
1749       Builder.AddTypedTextChunk("for");
1750       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1751       if (SemaRef.getLangOpts().CPlusPlus || SemaRef.getLangOpts().C99)
1752         Builder.AddPlaceholderChunk("init-statement");
1753       else
1754         Builder.AddPlaceholderChunk("init-expression");
1755       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
1756       Builder.AddPlaceholderChunk("condition");
1757       Builder.AddChunk(CodeCompletionString::CK_SemiColon);
1758       Builder.AddPlaceholderChunk("inc-expression");
1759       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1760       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
1761       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
1762       Builder.AddPlaceholderChunk("statements");
1763       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
1764       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
1765       Results.AddResult(Result(Builder.TakeString()));
1766     }
1767 
1768     if (S->getContinueParent()) {
1769       // continue ;
1770       Builder.AddTypedTextChunk("continue");
1771       Results.AddResult(Result(Builder.TakeString()));
1772     }
1773 
1774     if (S->getBreakParent()) {
1775       // break ;
1776       Builder.AddTypedTextChunk("break");
1777       Results.AddResult(Result(Builder.TakeString()));
1778     }
1779 
1780     // "return expression ;" or "return ;", depending on whether we
1781     // know the function is void or not.
1782     bool isVoid = false;
1783     if (FunctionDecl *Function = dyn_cast<FunctionDecl>(SemaRef.CurContext))
1784       isVoid = Function->getReturnType()->isVoidType();
1785     else if (ObjCMethodDecl *Method
1786                                  = dyn_cast<ObjCMethodDecl>(SemaRef.CurContext))
1787       isVoid = Method->getReturnType()->isVoidType();
1788     else if (SemaRef.getCurBlock() &&
1789              !SemaRef.getCurBlock()->ReturnType.isNull())
1790       isVoid = SemaRef.getCurBlock()->ReturnType->isVoidType();
1791     Builder.AddTypedTextChunk("return");
1792     if (!isVoid) {
1793       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1794       Builder.AddPlaceholderChunk("expression");
1795     }
1796     Results.AddResult(Result(Builder.TakeString()));
1797 
1798     // goto identifier ;
1799     Builder.AddTypedTextChunk("goto");
1800     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1801     Builder.AddPlaceholderChunk("label");
1802     Results.AddResult(Result(Builder.TakeString()));
1803 
1804     // Using directives
1805     Builder.AddTypedTextChunk("using");
1806     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1807     Builder.AddTextChunk("namespace");
1808     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1809     Builder.AddPlaceholderChunk("identifier");
1810     Results.AddResult(Result(Builder.TakeString()));
1811   }
1812 
1813   // Fall through (for statement expressions).
1814   case Sema::PCC_ForInit:
1815   case Sema::PCC_Condition:
1816     AddStorageSpecifiers(CCC, SemaRef.getLangOpts(), Results);
1817     // Fall through: conditions and statements can have expressions.
1818 
1819   case Sema::PCC_ParenthesizedExpression:
1820     if (SemaRef.getLangOpts().ObjCAutoRefCount &&
1821         CCC == Sema::PCC_ParenthesizedExpression) {
1822       // (__bridge <type>)<expression>
1823       Builder.AddTypedTextChunk("__bridge");
1824       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1825       Builder.AddPlaceholderChunk("type");
1826       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1827       Builder.AddPlaceholderChunk("expression");
1828       Results.AddResult(Result(Builder.TakeString()));
1829 
1830       // (__bridge_transfer <Objective-C type>)<expression>
1831       Builder.AddTypedTextChunk("__bridge_transfer");
1832       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1833       Builder.AddPlaceholderChunk("Objective-C type");
1834       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1835       Builder.AddPlaceholderChunk("expression");
1836       Results.AddResult(Result(Builder.TakeString()));
1837 
1838       // (__bridge_retained <CF type>)<expression>
1839       Builder.AddTypedTextChunk("__bridge_retained");
1840       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1841       Builder.AddPlaceholderChunk("CF type");
1842       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1843       Builder.AddPlaceholderChunk("expression");
1844       Results.AddResult(Result(Builder.TakeString()));
1845     }
1846     // Fall through
1847 
1848   case Sema::PCC_Expression: {
1849     if (SemaRef.getLangOpts().CPlusPlus) {
1850       // 'this', if we're in a non-static member function.
1851       addThisCompletion(SemaRef, Results);
1852 
1853       // true
1854       Builder.AddResultTypeChunk("bool");
1855       Builder.AddTypedTextChunk("true");
1856       Results.AddResult(Result(Builder.TakeString()));
1857 
1858       // false
1859       Builder.AddResultTypeChunk("bool");
1860       Builder.AddTypedTextChunk("false");
1861       Results.AddResult(Result(Builder.TakeString()));
1862 
1863       if (SemaRef.getLangOpts().RTTI) {
1864         // dynamic_cast < type-id > ( expression )
1865         Builder.AddTypedTextChunk("dynamic_cast");
1866         Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
1867         Builder.AddPlaceholderChunk("type");
1868         Builder.AddChunk(CodeCompletionString::CK_RightAngle);
1869         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1870         Builder.AddPlaceholderChunk("expression");
1871         Builder.AddChunk(CodeCompletionString::CK_RightParen);
1872         Results.AddResult(Result(Builder.TakeString()));
1873       }
1874 
1875       // static_cast < type-id > ( expression )
1876       Builder.AddTypedTextChunk("static_cast");
1877       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
1878       Builder.AddPlaceholderChunk("type");
1879       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
1880       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1881       Builder.AddPlaceholderChunk("expression");
1882       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1883       Results.AddResult(Result(Builder.TakeString()));
1884 
1885       // reinterpret_cast < type-id > ( expression )
1886       Builder.AddTypedTextChunk("reinterpret_cast");
1887       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
1888       Builder.AddPlaceholderChunk("type");
1889       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
1890       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1891       Builder.AddPlaceholderChunk("expression");
1892       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1893       Results.AddResult(Result(Builder.TakeString()));
1894 
1895       // const_cast < type-id > ( expression )
1896       Builder.AddTypedTextChunk("const_cast");
1897       Builder.AddChunk(CodeCompletionString::CK_LeftAngle);
1898       Builder.AddPlaceholderChunk("type");
1899       Builder.AddChunk(CodeCompletionString::CK_RightAngle);
1900       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1901       Builder.AddPlaceholderChunk("expression");
1902       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1903       Results.AddResult(Result(Builder.TakeString()));
1904 
1905       if (SemaRef.getLangOpts().RTTI) {
1906         // typeid ( expression-or-type )
1907         Builder.AddResultTypeChunk("std::type_info");
1908         Builder.AddTypedTextChunk("typeid");
1909         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1910         Builder.AddPlaceholderChunk("expression-or-type");
1911         Builder.AddChunk(CodeCompletionString::CK_RightParen);
1912         Results.AddResult(Result(Builder.TakeString()));
1913       }
1914 
1915       // new T ( ... )
1916       Builder.AddTypedTextChunk("new");
1917       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1918       Builder.AddPlaceholderChunk("type");
1919       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1920       Builder.AddPlaceholderChunk("expressions");
1921       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1922       Results.AddResult(Result(Builder.TakeString()));
1923 
1924       // new T [ ] ( ... )
1925       Builder.AddTypedTextChunk("new");
1926       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1927       Builder.AddPlaceholderChunk("type");
1928       Builder.AddChunk(CodeCompletionString::CK_LeftBracket);
1929       Builder.AddPlaceholderChunk("size");
1930       Builder.AddChunk(CodeCompletionString::CK_RightBracket);
1931       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1932       Builder.AddPlaceholderChunk("expressions");
1933       Builder.AddChunk(CodeCompletionString::CK_RightParen);
1934       Results.AddResult(Result(Builder.TakeString()));
1935 
1936       // delete expression
1937       Builder.AddResultTypeChunk("void");
1938       Builder.AddTypedTextChunk("delete");
1939       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1940       Builder.AddPlaceholderChunk("expression");
1941       Results.AddResult(Result(Builder.TakeString()));
1942 
1943       // delete [] expression
1944       Builder.AddResultTypeChunk("void");
1945       Builder.AddTypedTextChunk("delete");
1946       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1947       Builder.AddChunk(CodeCompletionString::CK_LeftBracket);
1948       Builder.AddChunk(CodeCompletionString::CK_RightBracket);
1949       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1950       Builder.AddPlaceholderChunk("expression");
1951       Results.AddResult(Result(Builder.TakeString()));
1952 
1953       if (SemaRef.getLangOpts().CXXExceptions) {
1954         // throw expression
1955         Builder.AddResultTypeChunk("void");
1956         Builder.AddTypedTextChunk("throw");
1957         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
1958         Builder.AddPlaceholderChunk("expression");
1959         Results.AddResult(Result(Builder.TakeString()));
1960       }
1961 
1962       // FIXME: Rethrow?
1963 
1964       if (SemaRef.getLangOpts().CPlusPlus11) {
1965         // nullptr
1966         Builder.AddResultTypeChunk("std::nullptr_t");
1967         Builder.AddTypedTextChunk("nullptr");
1968         Results.AddResult(Result(Builder.TakeString()));
1969 
1970         // alignof
1971         Builder.AddResultTypeChunk("size_t");
1972         Builder.AddTypedTextChunk("alignof");
1973         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1974         Builder.AddPlaceholderChunk("type");
1975         Builder.AddChunk(CodeCompletionString::CK_RightParen);
1976         Results.AddResult(Result(Builder.TakeString()));
1977 
1978         // noexcept
1979         Builder.AddResultTypeChunk("bool");
1980         Builder.AddTypedTextChunk("noexcept");
1981         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1982         Builder.AddPlaceholderChunk("expression");
1983         Builder.AddChunk(CodeCompletionString::CK_RightParen);
1984         Results.AddResult(Result(Builder.TakeString()));
1985 
1986         // sizeof... expression
1987         Builder.AddResultTypeChunk("size_t");
1988         Builder.AddTypedTextChunk("sizeof...");
1989         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
1990         Builder.AddPlaceholderChunk("parameter-pack");
1991         Builder.AddChunk(CodeCompletionString::CK_RightParen);
1992         Results.AddResult(Result(Builder.TakeString()));
1993       }
1994     }
1995 
1996     if (SemaRef.getLangOpts().ObjC1) {
1997       // Add "super", if we're in an Objective-C class with a superclass.
1998       if (ObjCMethodDecl *Method = SemaRef.getCurMethodDecl()) {
1999         // The interface can be NULL.
2000         if (ObjCInterfaceDecl *ID = Method->getClassInterface())
2001           if (ID->getSuperClass()) {
2002             std::string SuperType;
2003             SuperType = ID->getSuperClass()->getNameAsString();
2004             if (Method->isInstanceMethod())
2005               SuperType += " *";
2006 
2007             Builder.AddResultTypeChunk(Allocator.CopyString(SuperType));
2008             Builder.AddTypedTextChunk("super");
2009             Results.AddResult(Result(Builder.TakeString()));
2010           }
2011       }
2012 
2013       AddObjCExpressionResults(Results, true);
2014     }
2015 
2016     if (SemaRef.getLangOpts().C11) {
2017       // _Alignof
2018       Builder.AddResultTypeChunk("size_t");
2019       if (SemaRef.getASTContext().Idents.get("alignof").hasMacroDefinition())
2020         Builder.AddTypedTextChunk("alignof");
2021       else
2022         Builder.AddTypedTextChunk("_Alignof");
2023       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2024       Builder.AddPlaceholderChunk("type");
2025       Builder.AddChunk(CodeCompletionString::CK_RightParen);
2026       Results.AddResult(Result(Builder.TakeString()));
2027     }
2028 
2029     // sizeof expression
2030     Builder.AddResultTypeChunk("size_t");
2031     Builder.AddTypedTextChunk("sizeof");
2032     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
2033     Builder.AddPlaceholderChunk("expression-or-type");
2034     Builder.AddChunk(CodeCompletionString::CK_RightParen);
2035     Results.AddResult(Result(Builder.TakeString()));
2036     break;
2037   }
2038 
2039   case Sema::PCC_Type:
2040   case Sema::PCC_LocalDeclarationSpecifiers:
2041     break;
2042   }
2043 
2044   if (WantTypesInContext(CCC, SemaRef.getLangOpts()))
2045     AddTypeSpecifierResults(SemaRef.getLangOpts(), Results);
2046 
2047   if (SemaRef.getLangOpts().CPlusPlus && CCC != Sema::PCC_Type)
2048     Results.AddResult(Result("operator"));
2049 }
2050 
2051 /// \brief If the given declaration has an associated type, add it as a result
2052 /// type chunk.
2053 static void AddResultTypeChunk(ASTContext &Context,
2054                                const PrintingPolicy &Policy,
2055                                const NamedDecl *ND,
2056                                CodeCompletionBuilder &Result) {
2057   if (!ND)
2058     return;
2059 
2060   // Skip constructors and conversion functions, which have their return types
2061   // built into their names.
2062   if (isa<CXXConstructorDecl>(ND) || isa<CXXConversionDecl>(ND))
2063     return;
2064 
2065   // Determine the type of the declaration (if it has a type).
2066   QualType T;
2067   if (const FunctionDecl *Function = ND->getAsFunction())
2068     T = Function->getReturnType();
2069   else if (const ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(ND))
2070     T = Method->getReturnType();
2071   else if (const EnumConstantDecl *Enumerator = dyn_cast<EnumConstantDecl>(ND))
2072     T = Context.getTypeDeclType(cast<TypeDecl>(Enumerator->getDeclContext()));
2073   else if (isa<UnresolvedUsingValueDecl>(ND)) {
2074     /* Do nothing: ignore unresolved using declarations*/
2075   } else if (const ValueDecl *Value = dyn_cast<ValueDecl>(ND)) {
2076     T = Value->getType();
2077   } else if (const ObjCPropertyDecl *Property = dyn_cast<ObjCPropertyDecl>(ND))
2078     T = Property->getType();
2079 
2080   if (T.isNull() || Context.hasSameType(T, Context.DependentTy))
2081     return;
2082 
2083   Result.AddResultTypeChunk(GetCompletionTypeString(T, Context, Policy,
2084                                                     Result.getAllocator()));
2085 }
2086 
2087 static void MaybeAddSentinel(ASTContext &Context,
2088                              const NamedDecl *FunctionOrMethod,
2089                              CodeCompletionBuilder &Result) {
2090   if (SentinelAttr *Sentinel = FunctionOrMethod->getAttr<SentinelAttr>())
2091     if (Sentinel->getSentinel() == 0) {
2092       if (Context.getLangOpts().ObjC1 &&
2093           Context.Idents.get("nil").hasMacroDefinition())
2094         Result.AddTextChunk(", nil");
2095       else if (Context.Idents.get("NULL").hasMacroDefinition())
2096         Result.AddTextChunk(", NULL");
2097       else
2098         Result.AddTextChunk(", (void*)0");
2099     }
2100 }
2101 
2102 static std::string formatObjCParamQualifiers(unsigned ObjCQuals) {
2103   std::string Result;
2104   if (ObjCQuals & Decl::OBJC_TQ_In)
2105     Result += "in ";
2106   else if (ObjCQuals & Decl::OBJC_TQ_Inout)
2107     Result += "inout ";
2108   else if (ObjCQuals & Decl::OBJC_TQ_Out)
2109     Result += "out ";
2110   if (ObjCQuals & Decl::OBJC_TQ_Bycopy)
2111     Result += "bycopy ";
2112   else if (ObjCQuals & Decl::OBJC_TQ_Byref)
2113     Result += "byref ";
2114   if (ObjCQuals & Decl::OBJC_TQ_Oneway)
2115     Result += "oneway ";
2116   return Result;
2117 }
2118 
2119 static std::string FormatFunctionParameter(ASTContext &Context,
2120                                            const PrintingPolicy &Policy,
2121                                            const ParmVarDecl *Param,
2122                                            bool SuppressName = false,
2123                                            bool SuppressBlock = false) {
2124   bool ObjCMethodParam = isa<ObjCMethodDecl>(Param->getDeclContext());
2125   if (Param->getType()->isDependentType() ||
2126       !Param->getType()->isBlockPointerType()) {
2127     // The argument for a dependent or non-block parameter is a placeholder
2128     // containing that parameter's type.
2129     std::string Result;
2130 
2131     if (Param->getIdentifier() && !ObjCMethodParam && !SuppressName)
2132       Result = Param->getIdentifier()->getName();
2133 
2134     Param->getType().getAsStringInternal(Result, Policy);
2135 
2136     if (ObjCMethodParam) {
2137       Result = "(" + formatObjCParamQualifiers(Param->getObjCDeclQualifier())
2138              + Result + ")";
2139       if (Param->getIdentifier() && !SuppressName)
2140         Result += Param->getIdentifier()->getName();
2141     }
2142     return Result;
2143   }
2144 
2145   // The argument for a block pointer parameter is a block literal with
2146   // the appropriate type.
2147   FunctionTypeLoc Block;
2148   FunctionProtoTypeLoc BlockProto;
2149   TypeLoc TL;
2150   if (TypeSourceInfo *TSInfo = Param->getTypeSourceInfo()) {
2151     TL = TSInfo->getTypeLoc().getUnqualifiedLoc();
2152     while (true) {
2153       // Look through typedefs.
2154       if (!SuppressBlock) {
2155         if (TypedefTypeLoc TypedefTL = TL.getAs<TypedefTypeLoc>()) {
2156           if (TypeSourceInfo *InnerTSInfo =
2157                   TypedefTL.getTypedefNameDecl()->getTypeSourceInfo()) {
2158             TL = InnerTSInfo->getTypeLoc().getUnqualifiedLoc();
2159             continue;
2160           }
2161         }
2162 
2163         // Look through qualified types
2164         if (QualifiedTypeLoc QualifiedTL = TL.getAs<QualifiedTypeLoc>()) {
2165           TL = QualifiedTL.getUnqualifiedLoc();
2166           continue;
2167         }
2168       }
2169 
2170       // Try to get the function prototype behind the block pointer type,
2171       // then we're done.
2172       if (BlockPointerTypeLoc BlockPtr = TL.getAs<BlockPointerTypeLoc>()) {
2173         TL = BlockPtr.getPointeeLoc().IgnoreParens();
2174         Block = TL.getAs<FunctionTypeLoc>();
2175         BlockProto = TL.getAs<FunctionProtoTypeLoc>();
2176       }
2177       break;
2178     }
2179   }
2180 
2181   if (!Block) {
2182     // We were unable to find a FunctionProtoTypeLoc with parameter names
2183     // for the block; just use the parameter type as a placeholder.
2184     std::string Result;
2185     if (!ObjCMethodParam && Param->getIdentifier())
2186       Result = Param->getIdentifier()->getName();
2187 
2188     Param->getType().getUnqualifiedType().getAsStringInternal(Result, Policy);
2189 
2190     if (ObjCMethodParam) {
2191       Result = "(" + formatObjCParamQualifiers(Param->getObjCDeclQualifier())
2192              + Result + ")";
2193       if (Param->getIdentifier())
2194         Result += Param->getIdentifier()->getName();
2195     }
2196 
2197     return Result;
2198   }
2199 
2200   // We have the function prototype behind the block pointer type, as it was
2201   // written in the source.
2202   std::string Result;
2203   QualType ResultType = Block.getTypePtr()->getReturnType();
2204   if (!ResultType->isVoidType() || SuppressBlock)
2205     ResultType.getAsStringInternal(Result, Policy);
2206 
2207   // Format the parameter list.
2208   std::string Params;
2209   if (!BlockProto || Block.getNumParams() == 0) {
2210     if (BlockProto && BlockProto.getTypePtr()->isVariadic())
2211       Params = "(...)";
2212     else
2213       Params = "(void)";
2214   } else {
2215     Params += "(";
2216     for (unsigned I = 0, N = Block.getNumParams(); I != N; ++I) {
2217       if (I)
2218         Params += ", ";
2219       Params += FormatFunctionParameter(Context, Policy, Block.getParam(I),
2220                                         /*SuppressName=*/false,
2221                                         /*SuppressBlock=*/true);
2222 
2223       if (I == N - 1 && BlockProto.getTypePtr()->isVariadic())
2224         Params += ", ...";
2225     }
2226     Params += ")";
2227   }
2228 
2229   if (SuppressBlock) {
2230     // Format as a parameter.
2231     Result = Result + " (^";
2232     if (Param->getIdentifier())
2233       Result += Param->getIdentifier()->getName();
2234     Result += ")";
2235     Result += Params;
2236   } else {
2237     // Format as a block literal argument.
2238     Result = '^' + Result;
2239     Result += Params;
2240 
2241     if (Param->getIdentifier())
2242       Result += Param->getIdentifier()->getName();
2243   }
2244 
2245   return Result;
2246 }
2247 
2248 /// \brief Add function parameter chunks to the given code completion string.
2249 static void AddFunctionParameterChunks(ASTContext &Context,
2250                                        const PrintingPolicy &Policy,
2251                                        const FunctionDecl *Function,
2252                                        CodeCompletionBuilder &Result,
2253                                        unsigned Start = 0,
2254                                        bool InOptional = false) {
2255   bool FirstParameter = true;
2256 
2257   for (unsigned P = Start, N = Function->getNumParams(); P != N; ++P) {
2258     const ParmVarDecl *Param = Function->getParamDecl(P);
2259 
2260     if (Param->hasDefaultArg() && !InOptional) {
2261       // When we see an optional default argument, put that argument and
2262       // the remaining default arguments into a new, optional string.
2263       CodeCompletionBuilder Opt(Result.getAllocator(),
2264                                 Result.getCodeCompletionTUInfo());
2265       if (!FirstParameter)
2266         Opt.AddChunk(CodeCompletionString::CK_Comma);
2267       AddFunctionParameterChunks(Context, Policy, Function, Opt, P, true);
2268       Result.AddOptionalChunk(Opt.TakeString());
2269       break;
2270     }
2271 
2272     if (FirstParameter)
2273       FirstParameter = false;
2274     else
2275       Result.AddChunk(CodeCompletionString::CK_Comma);
2276 
2277     InOptional = false;
2278 
2279     // Format the placeholder string.
2280     std::string PlaceholderStr = FormatFunctionParameter(Context, Policy,
2281                                                          Param);
2282 
2283     if (Function->isVariadic() && P == N - 1)
2284       PlaceholderStr += ", ...";
2285 
2286     // Add the placeholder string.
2287     Result.AddPlaceholderChunk(
2288                              Result.getAllocator().CopyString(PlaceholderStr));
2289   }
2290 
2291   if (const FunctionProtoType *Proto
2292         = Function->getType()->getAs<FunctionProtoType>())
2293     if (Proto->isVariadic()) {
2294       if (Proto->getNumParams() == 0)
2295         Result.AddPlaceholderChunk("...");
2296 
2297       MaybeAddSentinel(Context, Function, Result);
2298     }
2299 }
2300 
2301 /// \brief Add template parameter chunks to the given code completion string.
2302 static void AddTemplateParameterChunks(ASTContext &Context,
2303                                        const PrintingPolicy &Policy,
2304                                        const TemplateDecl *Template,
2305                                        CodeCompletionBuilder &Result,
2306                                        unsigned MaxParameters = 0,
2307                                        unsigned Start = 0,
2308                                        bool InDefaultArg = false) {
2309   bool FirstParameter = true;
2310 
2311   TemplateParameterList *Params = Template->getTemplateParameters();
2312   TemplateParameterList::iterator PEnd = Params->end();
2313   if (MaxParameters)
2314     PEnd = Params->begin() + MaxParameters;
2315   for (TemplateParameterList::iterator P = Params->begin() + Start;
2316        P != PEnd; ++P) {
2317     bool HasDefaultArg = false;
2318     std::string PlaceholderStr;
2319     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*P)) {
2320       if (TTP->wasDeclaredWithTypename())
2321         PlaceholderStr = "typename";
2322       else
2323         PlaceholderStr = "class";
2324 
2325       if (TTP->getIdentifier()) {
2326         PlaceholderStr += ' ';
2327         PlaceholderStr += TTP->getIdentifier()->getName();
2328       }
2329 
2330       HasDefaultArg = TTP->hasDefaultArgument();
2331     } else if (NonTypeTemplateParmDecl *NTTP
2332                                     = dyn_cast<NonTypeTemplateParmDecl>(*P)) {
2333       if (NTTP->getIdentifier())
2334         PlaceholderStr = NTTP->getIdentifier()->getName();
2335       NTTP->getType().getAsStringInternal(PlaceholderStr, Policy);
2336       HasDefaultArg = NTTP->hasDefaultArgument();
2337     } else {
2338       assert(isa<TemplateTemplateParmDecl>(*P));
2339       TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(*P);
2340 
2341       // Since putting the template argument list into the placeholder would
2342       // be very, very long, we just use an abbreviation.
2343       PlaceholderStr = "template<...> class";
2344       if (TTP->getIdentifier()) {
2345         PlaceholderStr += ' ';
2346         PlaceholderStr += TTP->getIdentifier()->getName();
2347       }
2348 
2349       HasDefaultArg = TTP->hasDefaultArgument();
2350     }
2351 
2352     if (HasDefaultArg && !InDefaultArg) {
2353       // When we see an optional default argument, put that argument and
2354       // the remaining default arguments into a new, optional string.
2355       CodeCompletionBuilder Opt(Result.getAllocator(),
2356                                 Result.getCodeCompletionTUInfo());
2357       if (!FirstParameter)
2358         Opt.AddChunk(CodeCompletionString::CK_Comma);
2359       AddTemplateParameterChunks(Context, Policy, Template, Opt, MaxParameters,
2360                                  P - Params->begin(), true);
2361       Result.AddOptionalChunk(Opt.TakeString());
2362       break;
2363     }
2364 
2365     InDefaultArg = false;
2366 
2367     if (FirstParameter)
2368       FirstParameter = false;
2369     else
2370       Result.AddChunk(CodeCompletionString::CK_Comma);
2371 
2372     // Add the placeholder string.
2373     Result.AddPlaceholderChunk(
2374                               Result.getAllocator().CopyString(PlaceholderStr));
2375   }
2376 }
2377 
2378 /// \brief Add a qualifier to the given code-completion string, if the
2379 /// provided nested-name-specifier is non-NULL.
2380 static void
2381 AddQualifierToCompletionString(CodeCompletionBuilder &Result,
2382                                NestedNameSpecifier *Qualifier,
2383                                bool QualifierIsInformative,
2384                                ASTContext &Context,
2385                                const PrintingPolicy &Policy) {
2386   if (!Qualifier)
2387     return;
2388 
2389   std::string PrintedNNS;
2390   {
2391     llvm::raw_string_ostream OS(PrintedNNS);
2392     Qualifier->print(OS, Policy);
2393   }
2394   if (QualifierIsInformative)
2395     Result.AddInformativeChunk(Result.getAllocator().CopyString(PrintedNNS));
2396   else
2397     Result.AddTextChunk(Result.getAllocator().CopyString(PrintedNNS));
2398 }
2399 
2400 static void
2401 AddFunctionTypeQualsToCompletionString(CodeCompletionBuilder &Result,
2402                                        const FunctionDecl *Function) {
2403   const FunctionProtoType *Proto
2404     = Function->getType()->getAs<FunctionProtoType>();
2405   if (!Proto || !Proto->getTypeQuals())
2406     return;
2407 
2408   // FIXME: Add ref-qualifier!
2409 
2410   // Handle single qualifiers without copying
2411   if (Proto->getTypeQuals() == Qualifiers::Const) {
2412     Result.AddInformativeChunk(" const");
2413     return;
2414   }
2415 
2416   if (Proto->getTypeQuals() == Qualifiers::Volatile) {
2417     Result.AddInformativeChunk(" volatile");
2418     return;
2419   }
2420 
2421   if (Proto->getTypeQuals() == Qualifiers::Restrict) {
2422     Result.AddInformativeChunk(" restrict");
2423     return;
2424   }
2425 
2426   // Handle multiple qualifiers.
2427   std::string QualsStr;
2428   if (Proto->isConst())
2429     QualsStr += " const";
2430   if (Proto->isVolatile())
2431     QualsStr += " volatile";
2432   if (Proto->isRestrict())
2433     QualsStr += " restrict";
2434   Result.AddInformativeChunk(Result.getAllocator().CopyString(QualsStr));
2435 }
2436 
2437 /// \brief Add the name of the given declaration
2438 static void AddTypedNameChunk(ASTContext &Context, const PrintingPolicy &Policy,
2439                               const NamedDecl *ND,
2440                               CodeCompletionBuilder &Result) {
2441   DeclarationName Name = ND->getDeclName();
2442   if (!Name)
2443     return;
2444 
2445   switch (Name.getNameKind()) {
2446     case DeclarationName::CXXOperatorName: {
2447       const char *OperatorName = 0;
2448       switch (Name.getCXXOverloadedOperator()) {
2449       case OO_None:
2450       case OO_Conditional:
2451       case NUM_OVERLOADED_OPERATORS:
2452         OperatorName = "operator";
2453         break;
2454 
2455 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
2456       case OO_##Name: OperatorName = "operator" Spelling; break;
2457 #define OVERLOADED_OPERATOR_MULTI(Name,Spelling,Unary,Binary,MemberOnly)
2458 #include "clang/Basic/OperatorKinds.def"
2459 
2460       case OO_New:          OperatorName = "operator new"; break;
2461       case OO_Delete:       OperatorName = "operator delete"; break;
2462       case OO_Array_New:    OperatorName = "operator new[]"; break;
2463       case OO_Array_Delete: OperatorName = "operator delete[]"; break;
2464       case OO_Call:         OperatorName = "operator()"; break;
2465       case OO_Subscript:    OperatorName = "operator[]"; break;
2466       }
2467       Result.AddTypedTextChunk(OperatorName);
2468       break;
2469     }
2470 
2471   case DeclarationName::Identifier:
2472   case DeclarationName::CXXConversionFunctionName:
2473   case DeclarationName::CXXDestructorName:
2474   case DeclarationName::CXXLiteralOperatorName:
2475     Result.AddTypedTextChunk(
2476                       Result.getAllocator().CopyString(ND->getNameAsString()));
2477     break;
2478 
2479   case DeclarationName::CXXUsingDirective:
2480   case DeclarationName::ObjCZeroArgSelector:
2481   case DeclarationName::ObjCOneArgSelector:
2482   case DeclarationName::ObjCMultiArgSelector:
2483     break;
2484 
2485   case DeclarationName::CXXConstructorName: {
2486     CXXRecordDecl *Record = 0;
2487     QualType Ty = Name.getCXXNameType();
2488     if (const RecordType *RecordTy = Ty->getAs<RecordType>())
2489       Record = cast<CXXRecordDecl>(RecordTy->getDecl());
2490     else if (const InjectedClassNameType *InjectedTy
2491                                         = Ty->getAs<InjectedClassNameType>())
2492       Record = InjectedTy->getDecl();
2493     else {
2494       Result.AddTypedTextChunk(
2495                       Result.getAllocator().CopyString(ND->getNameAsString()));
2496       break;
2497     }
2498 
2499     Result.AddTypedTextChunk(
2500                   Result.getAllocator().CopyString(Record->getNameAsString()));
2501     if (ClassTemplateDecl *Template = Record->getDescribedClassTemplate()) {
2502       Result.AddChunk(CodeCompletionString::CK_LeftAngle);
2503       AddTemplateParameterChunks(Context, Policy, Template, Result);
2504       Result.AddChunk(CodeCompletionString::CK_RightAngle);
2505     }
2506     break;
2507   }
2508   }
2509 }
2510 
2511 CodeCompletionString *CodeCompletionResult::CreateCodeCompletionString(Sema &S,
2512                                          CodeCompletionAllocator &Allocator,
2513                                          CodeCompletionTUInfo &CCTUInfo,
2514                                          bool IncludeBriefComments) {
2515   return CreateCodeCompletionString(S.Context, S.PP, Allocator, CCTUInfo,
2516                                     IncludeBriefComments);
2517 }
2518 
2519 /// \brief If possible, create a new code completion string for the given
2520 /// result.
2521 ///
2522 /// \returns Either a new, heap-allocated code completion string describing
2523 /// how to use this result, or NULL to indicate that the string or name of the
2524 /// result is all that is needed.
2525 CodeCompletionString *
2526 CodeCompletionResult::CreateCodeCompletionString(ASTContext &Ctx,
2527                                                  Preprocessor &PP,
2528                                            CodeCompletionAllocator &Allocator,
2529                                            CodeCompletionTUInfo &CCTUInfo,
2530                                            bool IncludeBriefComments) {
2531   CodeCompletionBuilder Result(Allocator, CCTUInfo, Priority, Availability);
2532 
2533   PrintingPolicy Policy = getCompletionPrintingPolicy(Ctx, PP);
2534   if (Kind == RK_Pattern) {
2535     Pattern->Priority = Priority;
2536     Pattern->Availability = Availability;
2537 
2538     if (Declaration) {
2539       Result.addParentContext(Declaration->getDeclContext());
2540       Pattern->ParentName = Result.getParentName();
2541       // Provide code completion comment for self.GetterName where
2542       // GetterName is the getter method for a property with name
2543       // different from the property name (declared via a property
2544       // getter attribute.
2545       const NamedDecl *ND = Declaration;
2546       if (const ObjCMethodDecl *M = dyn_cast<ObjCMethodDecl>(ND))
2547         if (M->isPropertyAccessor())
2548           if (const ObjCPropertyDecl *PDecl = M->findPropertyDecl())
2549             if (PDecl->getGetterName() == M->getSelector() &&
2550                 PDecl->getIdentifier() != M->getIdentifier()) {
2551               if (const RawComment *RC =
2552                     Ctx.getRawCommentForAnyRedecl(M)) {
2553                 Result.addBriefComment(RC->getBriefText(Ctx));
2554                 Pattern->BriefComment = Result.getBriefComment();
2555               }
2556               else if (const RawComment *RC =
2557                          Ctx.getRawCommentForAnyRedecl(PDecl)) {
2558                 Result.addBriefComment(RC->getBriefText(Ctx));
2559                 Pattern->BriefComment = Result.getBriefComment();
2560               }
2561             }
2562     }
2563 
2564     return Pattern;
2565   }
2566 
2567   if (Kind == RK_Keyword) {
2568     Result.AddTypedTextChunk(Keyword);
2569     return Result.TakeString();
2570   }
2571 
2572   if (Kind == RK_Macro) {
2573     const MacroDirective *MD = PP.getMacroDirectiveHistory(Macro);
2574     assert(MD && "Not a macro?");
2575     const MacroInfo *MI = MD->getMacroInfo();
2576 
2577     Result.AddTypedTextChunk(
2578                             Result.getAllocator().CopyString(Macro->getName()));
2579 
2580     if (!MI->isFunctionLike())
2581       return Result.TakeString();
2582 
2583     // Format a function-like macro with placeholders for the arguments.
2584     Result.AddChunk(CodeCompletionString::CK_LeftParen);
2585     MacroInfo::arg_iterator A = MI->arg_begin(), AEnd = MI->arg_end();
2586 
2587     // C99 variadic macros add __VA_ARGS__ at the end. Skip it.
2588     if (MI->isC99Varargs()) {
2589       --AEnd;
2590 
2591       if (A == AEnd) {
2592         Result.AddPlaceholderChunk("...");
2593       }
2594     }
2595 
2596     for (MacroInfo::arg_iterator A = MI->arg_begin(); A != AEnd; ++A) {
2597       if (A != MI->arg_begin())
2598         Result.AddChunk(CodeCompletionString::CK_Comma);
2599 
2600       if (MI->isVariadic() && (A+1) == AEnd) {
2601         SmallString<32> Arg = (*A)->getName();
2602         if (MI->isC99Varargs())
2603           Arg += ", ...";
2604         else
2605           Arg += "...";
2606         Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Arg));
2607         break;
2608       }
2609 
2610       // Non-variadic macros are simple.
2611       Result.AddPlaceholderChunk(
2612                           Result.getAllocator().CopyString((*A)->getName()));
2613     }
2614     Result.AddChunk(CodeCompletionString::CK_RightParen);
2615     return Result.TakeString();
2616   }
2617 
2618   assert(Kind == RK_Declaration && "Missed a result kind?");
2619   const NamedDecl *ND = Declaration;
2620   Result.addParentContext(ND->getDeclContext());
2621 
2622   if (IncludeBriefComments) {
2623     // Add documentation comment, if it exists.
2624     if (const RawComment *RC = Ctx.getRawCommentForAnyRedecl(ND)) {
2625       Result.addBriefComment(RC->getBriefText(Ctx));
2626     }
2627     else if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(ND))
2628       if (OMD->isPropertyAccessor())
2629         if (const ObjCPropertyDecl *PDecl = OMD->findPropertyDecl())
2630           if (const RawComment *RC = Ctx.getRawCommentForAnyRedecl(PDecl))
2631             Result.addBriefComment(RC->getBriefText(Ctx));
2632   }
2633 
2634   if (StartsNestedNameSpecifier) {
2635     Result.AddTypedTextChunk(
2636                       Result.getAllocator().CopyString(ND->getNameAsString()));
2637     Result.AddTextChunk("::");
2638     return Result.TakeString();
2639   }
2640 
2641   for (const auto *I : ND->specific_attrs<AnnotateAttr>())
2642     Result.AddAnnotation(Result.getAllocator().CopyString(I->getAnnotation()));
2643 
2644   AddResultTypeChunk(Ctx, Policy, ND, Result);
2645 
2646   if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(ND)) {
2647     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
2648                                    Ctx, Policy);
2649     AddTypedNameChunk(Ctx, Policy, ND, Result);
2650     Result.AddChunk(CodeCompletionString::CK_LeftParen);
2651     AddFunctionParameterChunks(Ctx, Policy, Function, Result);
2652     Result.AddChunk(CodeCompletionString::CK_RightParen);
2653     AddFunctionTypeQualsToCompletionString(Result, Function);
2654     return Result.TakeString();
2655   }
2656 
2657   if (const FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(ND)) {
2658     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
2659                                    Ctx, Policy);
2660     FunctionDecl *Function = FunTmpl->getTemplatedDecl();
2661     AddTypedNameChunk(Ctx, Policy, Function, Result);
2662 
2663     // Figure out which template parameters are deduced (or have default
2664     // arguments).
2665     llvm::SmallBitVector Deduced;
2666     Sema::MarkDeducedTemplateParameters(Ctx, FunTmpl, Deduced);
2667     unsigned LastDeducibleArgument;
2668     for (LastDeducibleArgument = Deduced.size(); LastDeducibleArgument > 0;
2669          --LastDeducibleArgument) {
2670       if (!Deduced[LastDeducibleArgument - 1]) {
2671         // C++0x: Figure out if the template argument has a default. If so,
2672         // the user doesn't need to type this argument.
2673         // FIXME: We need to abstract template parameters better!
2674         bool HasDefaultArg = false;
2675         NamedDecl *Param = FunTmpl->getTemplateParameters()->getParam(
2676                                                     LastDeducibleArgument - 1);
2677         if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param))
2678           HasDefaultArg = TTP->hasDefaultArgument();
2679         else if (NonTypeTemplateParmDecl *NTTP
2680                  = dyn_cast<NonTypeTemplateParmDecl>(Param))
2681           HasDefaultArg = NTTP->hasDefaultArgument();
2682         else {
2683           assert(isa<TemplateTemplateParmDecl>(Param));
2684           HasDefaultArg
2685             = cast<TemplateTemplateParmDecl>(Param)->hasDefaultArgument();
2686         }
2687 
2688         if (!HasDefaultArg)
2689           break;
2690       }
2691     }
2692 
2693     if (LastDeducibleArgument) {
2694       // Some of the function template arguments cannot be deduced from a
2695       // function call, so we introduce an explicit template argument list
2696       // containing all of the arguments up to the first deducible argument.
2697       Result.AddChunk(CodeCompletionString::CK_LeftAngle);
2698       AddTemplateParameterChunks(Ctx, Policy, FunTmpl, Result,
2699                                  LastDeducibleArgument);
2700       Result.AddChunk(CodeCompletionString::CK_RightAngle);
2701     }
2702 
2703     // Add the function parameters
2704     Result.AddChunk(CodeCompletionString::CK_LeftParen);
2705     AddFunctionParameterChunks(Ctx, Policy, Function, Result);
2706     Result.AddChunk(CodeCompletionString::CK_RightParen);
2707     AddFunctionTypeQualsToCompletionString(Result, Function);
2708     return Result.TakeString();
2709   }
2710 
2711   if (const TemplateDecl *Template = dyn_cast<TemplateDecl>(ND)) {
2712     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
2713                                    Ctx, Policy);
2714     Result.AddTypedTextChunk(
2715                 Result.getAllocator().CopyString(Template->getNameAsString()));
2716     Result.AddChunk(CodeCompletionString::CK_LeftAngle);
2717     AddTemplateParameterChunks(Ctx, Policy, Template, Result);
2718     Result.AddChunk(CodeCompletionString::CK_RightAngle);
2719     return Result.TakeString();
2720   }
2721 
2722   if (const ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(ND)) {
2723     Selector Sel = Method->getSelector();
2724     if (Sel.isUnarySelector()) {
2725       Result.AddTypedTextChunk(Result.getAllocator().CopyString(
2726                                   Sel.getNameForSlot(0)));
2727       return Result.TakeString();
2728     }
2729 
2730     std::string SelName = Sel.getNameForSlot(0).str();
2731     SelName += ':';
2732     if (StartParameter == 0)
2733       Result.AddTypedTextChunk(Result.getAllocator().CopyString(SelName));
2734     else {
2735       Result.AddInformativeChunk(Result.getAllocator().CopyString(SelName));
2736 
2737       // If there is only one parameter, and we're past it, add an empty
2738       // typed-text chunk since there is nothing to type.
2739       if (Method->param_size() == 1)
2740         Result.AddTypedTextChunk("");
2741     }
2742     unsigned Idx = 0;
2743     for (ObjCMethodDecl::param_const_iterator P = Method->param_begin(),
2744                                            PEnd = Method->param_end();
2745          P != PEnd; (void)++P, ++Idx) {
2746       if (Idx > 0) {
2747         std::string Keyword;
2748         if (Idx > StartParameter)
2749           Result.AddChunk(CodeCompletionString::CK_HorizontalSpace);
2750         if (IdentifierInfo *II = Sel.getIdentifierInfoForSlot(Idx))
2751           Keyword += II->getName();
2752         Keyword += ":";
2753         if (Idx < StartParameter || AllParametersAreInformative)
2754           Result.AddInformativeChunk(Result.getAllocator().CopyString(Keyword));
2755         else
2756           Result.AddTypedTextChunk(Result.getAllocator().CopyString(Keyword));
2757       }
2758 
2759       // If we're before the starting parameter, skip the placeholder.
2760       if (Idx < StartParameter)
2761         continue;
2762 
2763       std::string Arg;
2764 
2765       if ((*P)->getType()->isBlockPointerType() && !DeclaringEntity)
2766         Arg = FormatFunctionParameter(Ctx, Policy, *P, true);
2767       else {
2768         (*P)->getType().getAsStringInternal(Arg, Policy);
2769         Arg = "(" + formatObjCParamQualifiers((*P)->getObjCDeclQualifier())
2770             + Arg + ")";
2771         if (IdentifierInfo *II = (*P)->getIdentifier())
2772           if (DeclaringEntity || AllParametersAreInformative)
2773             Arg += II->getName();
2774       }
2775 
2776       if (Method->isVariadic() && (P + 1) == PEnd)
2777         Arg += ", ...";
2778 
2779       if (DeclaringEntity)
2780         Result.AddTextChunk(Result.getAllocator().CopyString(Arg));
2781       else if (AllParametersAreInformative)
2782         Result.AddInformativeChunk(Result.getAllocator().CopyString(Arg));
2783       else
2784         Result.AddPlaceholderChunk(Result.getAllocator().CopyString(Arg));
2785     }
2786 
2787     if (Method->isVariadic()) {
2788       if (Method->param_size() == 0) {
2789         if (DeclaringEntity)
2790           Result.AddTextChunk(", ...");
2791         else if (AllParametersAreInformative)
2792           Result.AddInformativeChunk(", ...");
2793         else
2794           Result.AddPlaceholderChunk(", ...");
2795       }
2796 
2797       MaybeAddSentinel(Ctx, Method, Result);
2798     }
2799 
2800     return Result.TakeString();
2801   }
2802 
2803   if (Qualifier)
2804     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
2805                                    Ctx, Policy);
2806 
2807   Result.AddTypedTextChunk(
2808                        Result.getAllocator().CopyString(ND->getNameAsString()));
2809   return Result.TakeString();
2810 }
2811 
2812 CodeCompletionString *
2813 CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(
2814                                                           unsigned CurrentArg,
2815                                                                Sema &S,
2816                                      CodeCompletionAllocator &Allocator,
2817                                      CodeCompletionTUInfo &CCTUInfo) const {
2818   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
2819 
2820   // FIXME: Set priority, availability appropriately.
2821   CodeCompletionBuilder Result(Allocator,CCTUInfo, 1, CXAvailability_Available);
2822   FunctionDecl *FDecl = getFunction();
2823   AddResultTypeChunk(S.Context, Policy, FDecl, Result);
2824   const FunctionProtoType *Proto
2825     = dyn_cast<FunctionProtoType>(getFunctionType());
2826   if (!FDecl && !Proto) {
2827     // Function without a prototype. Just give the return type and a
2828     // highlighted ellipsis.
2829     const FunctionType *FT = getFunctionType();
2830     Result.AddTextChunk(GetCompletionTypeString(FT->getReturnType(), S.Context,
2831                                                 Policy, Result.getAllocator()));
2832     Result.AddChunk(CodeCompletionString::CK_LeftParen);
2833     Result.AddChunk(CodeCompletionString::CK_CurrentParameter, "...");
2834     Result.AddChunk(CodeCompletionString::CK_RightParen);
2835     return Result.TakeString();
2836   }
2837 
2838   if (FDecl)
2839     Result.AddTextChunk(
2840                     Result.getAllocator().CopyString(FDecl->getNameAsString()));
2841   else
2842     Result.AddTextChunk(Result.getAllocator().CopyString(
2843         Proto->getReturnType().getAsString(Policy)));
2844 
2845   Result.AddChunk(CodeCompletionString::CK_LeftParen);
2846   unsigned NumParams = FDecl ? FDecl->getNumParams() : Proto->getNumParams();
2847   for (unsigned I = 0; I != NumParams; ++I) {
2848     if (I)
2849       Result.AddChunk(CodeCompletionString::CK_Comma);
2850 
2851     std::string ArgString;
2852     QualType ArgType;
2853 
2854     if (FDecl) {
2855       ArgString = FDecl->getParamDecl(I)->getNameAsString();
2856       ArgType = FDecl->getParamDecl(I)->getOriginalType();
2857     } else {
2858       ArgType = Proto->getParamType(I);
2859     }
2860 
2861     ArgType.getAsStringInternal(ArgString, Policy);
2862 
2863     if (I == CurrentArg)
2864       Result.AddChunk(CodeCompletionString::CK_CurrentParameter,
2865                       Result.getAllocator().CopyString(ArgString));
2866     else
2867       Result.AddTextChunk(Result.getAllocator().CopyString(ArgString));
2868   }
2869 
2870   if (Proto && Proto->isVariadic()) {
2871     Result.AddChunk(CodeCompletionString::CK_Comma);
2872     if (CurrentArg < NumParams)
2873       Result.AddTextChunk("...");
2874     else
2875       Result.AddChunk(CodeCompletionString::CK_CurrentParameter, "...");
2876   }
2877   Result.AddChunk(CodeCompletionString::CK_RightParen);
2878 
2879   return Result.TakeString();
2880 }
2881 
2882 unsigned clang::getMacroUsagePriority(StringRef MacroName,
2883                                       const LangOptions &LangOpts,
2884                                       bool PreferredTypeIsPointer) {
2885   unsigned Priority = CCP_Macro;
2886 
2887   // Treat the "nil", "Nil" and "NULL" macros as null pointer constants.
2888   if (MacroName.equals("nil") || MacroName.equals("NULL") ||
2889       MacroName.equals("Nil")) {
2890     Priority = CCP_Constant;
2891     if (PreferredTypeIsPointer)
2892       Priority = Priority / CCF_SimilarTypeMatch;
2893   }
2894   // Treat "YES", "NO", "true", and "false" as constants.
2895   else if (MacroName.equals("YES") || MacroName.equals("NO") ||
2896            MacroName.equals("true") || MacroName.equals("false"))
2897     Priority = CCP_Constant;
2898   // Treat "bool" as a type.
2899   else if (MacroName.equals("bool"))
2900     Priority = CCP_Type + (LangOpts.ObjC1? CCD_bool_in_ObjC : 0);
2901 
2902 
2903   return Priority;
2904 }
2905 
2906 CXCursorKind clang::getCursorKindForDecl(const Decl *D) {
2907   if (!D)
2908     return CXCursor_UnexposedDecl;
2909 
2910   switch (D->getKind()) {
2911     case Decl::Enum:               return CXCursor_EnumDecl;
2912     case Decl::EnumConstant:       return CXCursor_EnumConstantDecl;
2913     case Decl::Field:              return CXCursor_FieldDecl;
2914     case Decl::Function:
2915       return CXCursor_FunctionDecl;
2916     case Decl::ObjCCategory:       return CXCursor_ObjCCategoryDecl;
2917     case Decl::ObjCCategoryImpl:   return CXCursor_ObjCCategoryImplDecl;
2918     case Decl::ObjCImplementation: return CXCursor_ObjCImplementationDecl;
2919 
2920     case Decl::ObjCInterface:      return CXCursor_ObjCInterfaceDecl;
2921     case Decl::ObjCIvar:           return CXCursor_ObjCIvarDecl;
2922     case Decl::ObjCMethod:
2923       return cast<ObjCMethodDecl>(D)->isInstanceMethod()
2924       ? CXCursor_ObjCInstanceMethodDecl : CXCursor_ObjCClassMethodDecl;
2925     case Decl::CXXMethod:          return CXCursor_CXXMethod;
2926     case Decl::CXXConstructor:     return CXCursor_Constructor;
2927     case Decl::CXXDestructor:      return CXCursor_Destructor;
2928     case Decl::CXXConversion:      return CXCursor_ConversionFunction;
2929     case Decl::ObjCProperty:       return CXCursor_ObjCPropertyDecl;
2930     case Decl::ObjCProtocol:       return CXCursor_ObjCProtocolDecl;
2931     case Decl::ParmVar:            return CXCursor_ParmDecl;
2932     case Decl::Typedef:            return CXCursor_TypedefDecl;
2933     case Decl::TypeAlias:          return CXCursor_TypeAliasDecl;
2934     case Decl::Var:                return CXCursor_VarDecl;
2935     case Decl::Namespace:          return CXCursor_Namespace;
2936     case Decl::NamespaceAlias:     return CXCursor_NamespaceAlias;
2937     case Decl::TemplateTypeParm:   return CXCursor_TemplateTypeParameter;
2938     case Decl::NonTypeTemplateParm:return CXCursor_NonTypeTemplateParameter;
2939     case Decl::TemplateTemplateParm:return CXCursor_TemplateTemplateParameter;
2940     case Decl::FunctionTemplate:   return CXCursor_FunctionTemplate;
2941     case Decl::ClassTemplate:      return CXCursor_ClassTemplate;
2942     case Decl::AccessSpec:         return CXCursor_CXXAccessSpecifier;
2943     case Decl::ClassTemplatePartialSpecialization:
2944       return CXCursor_ClassTemplatePartialSpecialization;
2945     case Decl::UsingDirective:     return CXCursor_UsingDirective;
2946     case Decl::TranslationUnit:    return CXCursor_TranslationUnit;
2947 
2948     case Decl::Using:
2949     case Decl::UnresolvedUsingValue:
2950     case Decl::UnresolvedUsingTypename:
2951       return CXCursor_UsingDeclaration;
2952 
2953     case Decl::ObjCPropertyImpl:
2954       switch (cast<ObjCPropertyImplDecl>(D)->getPropertyImplementation()) {
2955       case ObjCPropertyImplDecl::Dynamic:
2956         return CXCursor_ObjCDynamicDecl;
2957 
2958       case ObjCPropertyImplDecl::Synthesize:
2959         return CXCursor_ObjCSynthesizeDecl;
2960       }
2961 
2962       case Decl::Import:
2963         return CXCursor_ModuleImportDecl;
2964 
2965     default:
2966       if (const TagDecl *TD = dyn_cast<TagDecl>(D)) {
2967         switch (TD->getTagKind()) {
2968           case TTK_Interface:  // fall through
2969           case TTK_Struct: return CXCursor_StructDecl;
2970           case TTK_Class:  return CXCursor_ClassDecl;
2971           case TTK_Union:  return CXCursor_UnionDecl;
2972           case TTK_Enum:   return CXCursor_EnumDecl;
2973         }
2974       }
2975   }
2976 
2977   return CXCursor_UnexposedDecl;
2978 }
2979 
2980 static void AddMacroResults(Preprocessor &PP, ResultBuilder &Results,
2981                             bool IncludeUndefined,
2982                             bool TargetTypeIsPointer = false) {
2983   typedef CodeCompletionResult Result;
2984 
2985   Results.EnterNewScope();
2986 
2987   for (Preprocessor::macro_iterator M = PP.macro_begin(),
2988                                  MEnd = PP.macro_end();
2989        M != MEnd; ++M) {
2990     if (IncludeUndefined || M->first->hasMacroDefinition())
2991       Results.AddResult(Result(M->first,
2992                              getMacroUsagePriority(M->first->getName(),
2993                                                    PP.getLangOpts(),
2994                                                    TargetTypeIsPointer)));
2995   }
2996 
2997   Results.ExitScope();
2998 
2999 }
3000 
3001 static void AddPrettyFunctionResults(const LangOptions &LangOpts,
3002                                      ResultBuilder &Results) {
3003   typedef CodeCompletionResult Result;
3004 
3005   Results.EnterNewScope();
3006 
3007   Results.AddResult(Result("__PRETTY_FUNCTION__", CCP_Constant));
3008   Results.AddResult(Result("__FUNCTION__", CCP_Constant));
3009   if (LangOpts.C99 || LangOpts.CPlusPlus11)
3010     Results.AddResult(Result("__func__", CCP_Constant));
3011   Results.ExitScope();
3012 }
3013 
3014 static void HandleCodeCompleteResults(Sema *S,
3015                                       CodeCompleteConsumer *CodeCompleter,
3016                                       CodeCompletionContext Context,
3017                                       CodeCompletionResult *Results,
3018                                       unsigned NumResults) {
3019   if (CodeCompleter)
3020     CodeCompleter->ProcessCodeCompleteResults(*S, Context, Results, NumResults);
3021 }
3022 
3023 static enum CodeCompletionContext::Kind mapCodeCompletionContext(Sema &S,
3024                                             Sema::ParserCompletionContext PCC) {
3025   switch (PCC) {
3026   case Sema::PCC_Namespace:
3027     return CodeCompletionContext::CCC_TopLevel;
3028 
3029   case Sema::PCC_Class:
3030     return CodeCompletionContext::CCC_ClassStructUnion;
3031 
3032   case Sema::PCC_ObjCInterface:
3033     return CodeCompletionContext::CCC_ObjCInterface;
3034 
3035   case Sema::PCC_ObjCImplementation:
3036     return CodeCompletionContext::CCC_ObjCImplementation;
3037 
3038   case Sema::PCC_ObjCInstanceVariableList:
3039     return CodeCompletionContext::CCC_ObjCIvarList;
3040 
3041   case Sema::PCC_Template:
3042   case Sema::PCC_MemberTemplate:
3043     if (S.CurContext->isFileContext())
3044       return CodeCompletionContext::CCC_TopLevel;
3045     if (S.CurContext->isRecord())
3046       return CodeCompletionContext::CCC_ClassStructUnion;
3047     return CodeCompletionContext::CCC_Other;
3048 
3049   case Sema::PCC_RecoveryInFunction:
3050     return CodeCompletionContext::CCC_Recovery;
3051 
3052   case Sema::PCC_ForInit:
3053     if (S.getLangOpts().CPlusPlus || S.getLangOpts().C99 ||
3054         S.getLangOpts().ObjC1)
3055       return CodeCompletionContext::CCC_ParenthesizedExpression;
3056     else
3057       return CodeCompletionContext::CCC_Expression;
3058 
3059   case Sema::PCC_Expression:
3060   case Sema::PCC_Condition:
3061     return CodeCompletionContext::CCC_Expression;
3062 
3063   case Sema::PCC_Statement:
3064     return CodeCompletionContext::CCC_Statement;
3065 
3066   case Sema::PCC_Type:
3067     return CodeCompletionContext::CCC_Type;
3068 
3069   case Sema::PCC_ParenthesizedExpression:
3070     return CodeCompletionContext::CCC_ParenthesizedExpression;
3071 
3072   case Sema::PCC_LocalDeclarationSpecifiers:
3073     return CodeCompletionContext::CCC_Type;
3074   }
3075 
3076   llvm_unreachable("Invalid ParserCompletionContext!");
3077 }
3078 
3079 /// \brief If we're in a C++ virtual member function, add completion results
3080 /// that invoke the functions we override, since it's common to invoke the
3081 /// overridden function as well as adding new functionality.
3082 ///
3083 /// \param S The semantic analysis object for which we are generating results.
3084 ///
3085 /// \param InContext This context in which the nested-name-specifier preceding
3086 /// the code-completion point
3087 static void MaybeAddOverrideCalls(Sema &S, DeclContext *InContext,
3088                                   ResultBuilder &Results) {
3089   // Look through blocks.
3090   DeclContext *CurContext = S.CurContext;
3091   while (isa<BlockDecl>(CurContext))
3092     CurContext = CurContext->getParent();
3093 
3094 
3095   CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(CurContext);
3096   if (!Method || !Method->isVirtual())
3097     return;
3098 
3099   // We need to have names for all of the parameters, if we're going to
3100   // generate a forwarding call.
3101   for (auto P : Method->params())
3102     if (!P->getDeclName())
3103       return;
3104 
3105   PrintingPolicy Policy = getCompletionPrintingPolicy(S);
3106   for (CXXMethodDecl::method_iterator M = Method->begin_overridden_methods(),
3107                                    MEnd = Method->end_overridden_methods();
3108        M != MEnd; ++M) {
3109     CodeCompletionBuilder Builder(Results.getAllocator(),
3110                                   Results.getCodeCompletionTUInfo());
3111     const CXXMethodDecl *Overridden = *M;
3112     if (Overridden->getCanonicalDecl() == Method->getCanonicalDecl())
3113       continue;
3114 
3115     // If we need a nested-name-specifier, add one now.
3116     if (!InContext) {
3117       NestedNameSpecifier *NNS
3118         = getRequiredQualification(S.Context, CurContext,
3119                                    Overridden->getDeclContext());
3120       if (NNS) {
3121         std::string Str;
3122         llvm::raw_string_ostream OS(Str);
3123         NNS->print(OS, Policy);
3124         Builder.AddTextChunk(Results.getAllocator().CopyString(OS.str()));
3125       }
3126     } else if (!InContext->Equals(Overridden->getDeclContext()))
3127       continue;
3128 
3129     Builder.AddTypedTextChunk(Results.getAllocator().CopyString(
3130                                          Overridden->getNameAsString()));
3131     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
3132     bool FirstParam = true;
3133     for (auto P : Method->params()) {
3134       if (FirstParam)
3135         FirstParam = false;
3136       else
3137         Builder.AddChunk(CodeCompletionString::CK_Comma);
3138 
3139       Builder.AddPlaceholderChunk(
3140           Results.getAllocator().CopyString(P->getIdentifier()->getName()));
3141     }
3142     Builder.AddChunk(CodeCompletionString::CK_RightParen);
3143     Results.AddResult(CodeCompletionResult(Builder.TakeString(),
3144                                            CCP_SuperCompletion,
3145                                            CXCursor_CXXMethod,
3146                                            CXAvailability_Available,
3147                                            Overridden));
3148     Results.Ignore(Overridden);
3149   }
3150 }
3151 
3152 void Sema::CodeCompleteModuleImport(SourceLocation ImportLoc,
3153                                     ModuleIdPath Path) {
3154   typedef CodeCompletionResult Result;
3155   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
3156                         CodeCompleter->getCodeCompletionTUInfo(),
3157                         CodeCompletionContext::CCC_Other);
3158   Results.EnterNewScope();
3159 
3160   CodeCompletionAllocator &Allocator = Results.getAllocator();
3161   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
3162   typedef CodeCompletionResult Result;
3163   if (Path.empty()) {
3164     // Enumerate all top-level modules.
3165     SmallVector<Module *, 8> Modules;
3166     PP.getHeaderSearchInfo().collectAllModules(Modules);
3167     for (unsigned I = 0, N = Modules.size(); I != N; ++I) {
3168       Builder.AddTypedTextChunk(
3169         Builder.getAllocator().CopyString(Modules[I]->Name));
3170       Results.AddResult(Result(Builder.TakeString(),
3171                                CCP_Declaration,
3172                                CXCursor_ModuleImportDecl,
3173                                Modules[I]->isAvailable()
3174                                  ? CXAvailability_Available
3175                                   : CXAvailability_NotAvailable));
3176     }
3177   } else if (getLangOpts().Modules) {
3178     // Load the named module.
3179     Module *Mod = PP.getModuleLoader().loadModule(ImportLoc, Path,
3180                                                   Module::AllVisible,
3181                                                 /*IsInclusionDirective=*/false);
3182     // Enumerate submodules.
3183     if (Mod) {
3184       for (Module::submodule_iterator Sub = Mod->submodule_begin(),
3185                                    SubEnd = Mod->submodule_end();
3186            Sub != SubEnd; ++Sub) {
3187 
3188         Builder.AddTypedTextChunk(
3189           Builder.getAllocator().CopyString((*Sub)->Name));
3190         Results.AddResult(Result(Builder.TakeString(),
3191                                  CCP_Declaration,
3192                                  CXCursor_ModuleImportDecl,
3193                                  (*Sub)->isAvailable()
3194                                    ? CXAvailability_Available
3195                                    : CXAvailability_NotAvailable));
3196       }
3197     }
3198   }
3199   Results.ExitScope();
3200   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
3201                             Results.data(),Results.size());
3202 }
3203 
3204 void Sema::CodeCompleteOrdinaryName(Scope *S,
3205                                     ParserCompletionContext CompletionContext) {
3206   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
3207                         CodeCompleter->getCodeCompletionTUInfo(),
3208                         mapCodeCompletionContext(*this, CompletionContext));
3209   Results.EnterNewScope();
3210 
3211   // Determine how to filter results, e.g., so that the names of
3212   // values (functions, enumerators, function templates, etc.) are
3213   // only allowed where we can have an expression.
3214   switch (CompletionContext) {
3215   case PCC_Namespace:
3216   case PCC_Class:
3217   case PCC_ObjCInterface:
3218   case PCC_ObjCImplementation:
3219   case PCC_ObjCInstanceVariableList:
3220   case PCC_Template:
3221   case PCC_MemberTemplate:
3222   case PCC_Type:
3223   case PCC_LocalDeclarationSpecifiers:
3224     Results.setFilter(&ResultBuilder::IsOrdinaryNonValueName);
3225     break;
3226 
3227   case PCC_Statement:
3228   case PCC_ParenthesizedExpression:
3229   case PCC_Expression:
3230   case PCC_ForInit:
3231   case PCC_Condition:
3232     if (WantTypesInContext(CompletionContext, getLangOpts()))
3233       Results.setFilter(&ResultBuilder::IsOrdinaryName);
3234     else
3235       Results.setFilter(&ResultBuilder::IsOrdinaryNonTypeName);
3236 
3237     if (getLangOpts().CPlusPlus)
3238       MaybeAddOverrideCalls(*this, /*InContext=*/0, Results);
3239     break;
3240 
3241   case PCC_RecoveryInFunction:
3242     // Unfiltered
3243     break;
3244   }
3245 
3246   // If we are in a C++ non-static member function, check the qualifiers on
3247   // the member function to filter/prioritize the results list.
3248   if (CXXMethodDecl *CurMethod = dyn_cast<CXXMethodDecl>(CurContext))
3249     if (CurMethod->isInstance())
3250       Results.setObjectTypeQualifiers(
3251                       Qualifiers::fromCVRMask(CurMethod->getTypeQualifiers()));
3252 
3253   CodeCompletionDeclConsumer Consumer(Results, CurContext);
3254   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
3255                      CodeCompleter->includeGlobals());
3256 
3257   AddOrdinaryNameResults(CompletionContext, S, *this, Results);
3258   Results.ExitScope();
3259 
3260   switch (CompletionContext) {
3261   case PCC_ParenthesizedExpression:
3262   case PCC_Expression:
3263   case PCC_Statement:
3264   case PCC_RecoveryInFunction:
3265     if (S->getFnParent())
3266       AddPrettyFunctionResults(PP.getLangOpts(), Results);
3267     break;
3268 
3269   case PCC_Namespace:
3270   case PCC_Class:
3271   case PCC_ObjCInterface:
3272   case PCC_ObjCImplementation:
3273   case PCC_ObjCInstanceVariableList:
3274   case PCC_Template:
3275   case PCC_MemberTemplate:
3276   case PCC_ForInit:
3277   case PCC_Condition:
3278   case PCC_Type:
3279   case PCC_LocalDeclarationSpecifiers:
3280     break;
3281   }
3282 
3283   if (CodeCompleter->includeMacros())
3284     AddMacroResults(PP, Results, false);
3285 
3286   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
3287                             Results.data(),Results.size());
3288 }
3289 
3290 static void AddClassMessageCompletions(Sema &SemaRef, Scope *S,
3291                                        ParsedType Receiver,
3292                                        ArrayRef<IdentifierInfo *> SelIdents,
3293                                        bool AtArgumentExpression,
3294                                        bool IsSuper,
3295                                        ResultBuilder &Results);
3296 
3297 void Sema::CodeCompleteDeclSpec(Scope *S, DeclSpec &DS,
3298                                 bool AllowNonIdentifiers,
3299                                 bool AllowNestedNameSpecifiers) {
3300   typedef CodeCompletionResult Result;
3301   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
3302                         CodeCompleter->getCodeCompletionTUInfo(),
3303                         AllowNestedNameSpecifiers
3304                           ? CodeCompletionContext::CCC_PotentiallyQualifiedName
3305                           : CodeCompletionContext::CCC_Name);
3306   Results.EnterNewScope();
3307 
3308   // Type qualifiers can come after names.
3309   Results.AddResult(Result("const"));
3310   Results.AddResult(Result("volatile"));
3311   if (getLangOpts().C99)
3312     Results.AddResult(Result("restrict"));
3313 
3314   if (getLangOpts().CPlusPlus) {
3315     if (AllowNonIdentifiers) {
3316       Results.AddResult(Result("operator"));
3317     }
3318 
3319     // Add nested-name-specifiers.
3320     if (AllowNestedNameSpecifiers) {
3321       Results.allowNestedNameSpecifiers();
3322       Results.setFilter(&ResultBuilder::IsImpossibleToSatisfy);
3323       CodeCompletionDeclConsumer Consumer(Results, CurContext);
3324       LookupVisibleDecls(S, LookupNestedNameSpecifierName, Consumer,
3325                          CodeCompleter->includeGlobals());
3326       Results.setFilter(0);
3327     }
3328   }
3329   Results.ExitScope();
3330 
3331   // If we're in a context where we might have an expression (rather than a
3332   // declaration), and what we've seen so far is an Objective-C type that could
3333   // be a receiver of a class message, this may be a class message send with
3334   // the initial opening bracket '[' missing. Add appropriate completions.
3335   if (AllowNonIdentifiers && !AllowNestedNameSpecifiers &&
3336       DS.getParsedSpecifiers() == DeclSpec::PQ_TypeSpecifier &&
3337       DS.getTypeSpecType() == DeclSpec::TST_typename &&
3338       DS.getTypeSpecComplex() == DeclSpec::TSC_unspecified &&
3339       DS.getTypeSpecSign() == DeclSpec::TSS_unspecified &&
3340       !DS.isTypeAltiVecVector() &&
3341       S &&
3342       (S->getFlags() & Scope::DeclScope) != 0 &&
3343       (S->getFlags() & (Scope::ClassScope | Scope::TemplateParamScope |
3344                         Scope::FunctionPrototypeScope |
3345                         Scope::AtCatchScope)) == 0) {
3346     ParsedType T = DS.getRepAsType();
3347     if (!T.get().isNull() && T.get()->isObjCObjectOrInterfaceType())
3348       AddClassMessageCompletions(*this, S, T, None, false, false, Results);
3349   }
3350 
3351   // Note that we intentionally suppress macro results here, since we do not
3352   // encourage using macros to produce the names of entities.
3353 
3354   HandleCodeCompleteResults(this, CodeCompleter,
3355                             Results.getCompletionContext(),
3356                             Results.data(), Results.size());
3357 }
3358 
3359 struct Sema::CodeCompleteExpressionData {
3360   CodeCompleteExpressionData(QualType PreferredType = QualType())
3361     : PreferredType(PreferredType), IntegralConstantExpression(false),
3362       ObjCCollection(false) { }
3363 
3364   QualType PreferredType;
3365   bool IntegralConstantExpression;
3366   bool ObjCCollection;
3367   SmallVector<Decl *, 4> IgnoreDecls;
3368 };
3369 
3370 /// \brief Perform code-completion in an expression context when we know what
3371 /// type we're looking for.
3372 void Sema::CodeCompleteExpression(Scope *S,
3373                                   const CodeCompleteExpressionData &Data) {
3374   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
3375                         CodeCompleter->getCodeCompletionTUInfo(),
3376                         CodeCompletionContext::CCC_Expression);
3377   if (Data.ObjCCollection)
3378     Results.setFilter(&ResultBuilder::IsObjCCollection);
3379   else if (Data.IntegralConstantExpression)
3380     Results.setFilter(&ResultBuilder::IsIntegralConstantValue);
3381   else if (WantTypesInContext(PCC_Expression, getLangOpts()))
3382     Results.setFilter(&ResultBuilder::IsOrdinaryName);
3383   else
3384     Results.setFilter(&ResultBuilder::IsOrdinaryNonTypeName);
3385 
3386   if (!Data.PreferredType.isNull())
3387     Results.setPreferredType(Data.PreferredType.getNonReferenceType());
3388 
3389   // Ignore any declarations that we were told that we don't care about.
3390   for (unsigned I = 0, N = Data.IgnoreDecls.size(); I != N; ++I)
3391     Results.Ignore(Data.IgnoreDecls[I]);
3392 
3393   CodeCompletionDeclConsumer Consumer(Results, CurContext);
3394   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
3395                      CodeCompleter->includeGlobals());
3396 
3397   Results.EnterNewScope();
3398   AddOrdinaryNameResults(PCC_Expression, S, *this, Results);
3399   Results.ExitScope();
3400 
3401   bool PreferredTypeIsPointer = false;
3402   if (!Data.PreferredType.isNull())
3403     PreferredTypeIsPointer = Data.PreferredType->isAnyPointerType()
3404       || Data.PreferredType->isMemberPointerType()
3405       || Data.PreferredType->isBlockPointerType();
3406 
3407   if (S->getFnParent() &&
3408       !Data.ObjCCollection &&
3409       !Data.IntegralConstantExpression)
3410     AddPrettyFunctionResults(PP.getLangOpts(), Results);
3411 
3412   if (CodeCompleter->includeMacros())
3413     AddMacroResults(PP, Results, false, PreferredTypeIsPointer);
3414   HandleCodeCompleteResults(this, CodeCompleter,
3415                 CodeCompletionContext(CodeCompletionContext::CCC_Expression,
3416                                       Data.PreferredType),
3417                             Results.data(),Results.size());
3418 }
3419 
3420 void Sema::CodeCompletePostfixExpression(Scope *S, ExprResult E) {
3421   if (E.isInvalid())
3422     CodeCompleteOrdinaryName(S, PCC_RecoveryInFunction);
3423   else if (getLangOpts().ObjC1)
3424     CodeCompleteObjCInstanceMessage(S, E.take(), None, false);
3425 }
3426 
3427 /// \brief The set of properties that have already been added, referenced by
3428 /// property name.
3429 typedef llvm::SmallPtrSet<IdentifierInfo*, 16> AddedPropertiesSet;
3430 
3431 /// \brief Retrieve the container definition, if any?
3432 static ObjCContainerDecl *getContainerDef(ObjCContainerDecl *Container) {
3433   if (ObjCInterfaceDecl *Interface = dyn_cast<ObjCInterfaceDecl>(Container)) {
3434     if (Interface->hasDefinition())
3435       return Interface->getDefinition();
3436 
3437     return Interface;
3438   }
3439 
3440   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
3441     if (Protocol->hasDefinition())
3442       return Protocol->getDefinition();
3443 
3444     return Protocol;
3445   }
3446   return Container;
3447 }
3448 
3449 static void AddObjCProperties(ObjCContainerDecl *Container,
3450                               bool AllowCategories,
3451                               bool AllowNullaryMethods,
3452                               DeclContext *CurContext,
3453                               AddedPropertiesSet &AddedProperties,
3454                               ResultBuilder &Results) {
3455   typedef CodeCompletionResult Result;
3456 
3457   // Retrieve the definition.
3458   Container = getContainerDef(Container);
3459 
3460   // Add properties in this container.
3461   for (const auto *P : Container->properties())
3462     if (AddedProperties.insert(P->getIdentifier()))
3463       Results.MaybeAddResult(Result(P, Results.getBasePriority(P), 0),
3464                              CurContext);
3465 
3466   // Add nullary methods
3467   if (AllowNullaryMethods) {
3468     ASTContext &Context = Container->getASTContext();
3469     PrintingPolicy Policy = getCompletionPrintingPolicy(Results.getSema());
3470     for (auto *M : Container->methods()) {
3471       if (M->getSelector().isUnarySelector())
3472         if (IdentifierInfo *Name = M->getSelector().getIdentifierInfoForSlot(0))
3473           if (AddedProperties.insert(Name)) {
3474             CodeCompletionBuilder Builder(Results.getAllocator(),
3475                                           Results.getCodeCompletionTUInfo());
3476             AddResultTypeChunk(Context, Policy, M, Builder);
3477             Builder.AddTypedTextChunk(
3478                             Results.getAllocator().CopyString(Name->getName()));
3479 
3480             Results.MaybeAddResult(Result(Builder.TakeString(), M,
3481                                   CCP_MemberDeclaration + CCD_MethodAsProperty),
3482                                           CurContext);
3483           }
3484     }
3485   }
3486 
3487 
3488   // Add properties in referenced protocols.
3489   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
3490     for (auto *P : Protocol->protocols())
3491       AddObjCProperties(P, AllowCategories, AllowNullaryMethods, CurContext,
3492                         AddedProperties, Results);
3493   } else if (ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container)){
3494     if (AllowCategories) {
3495       // Look through categories.
3496       for (auto *Cat : IFace->known_categories())
3497         AddObjCProperties(Cat, AllowCategories, AllowNullaryMethods, CurContext,
3498                           AddedProperties, Results);
3499     }
3500 
3501     // Look through protocols.
3502     for (auto *I : IFace->all_referenced_protocols())
3503       AddObjCProperties(I, AllowCategories, AllowNullaryMethods, CurContext,
3504                         AddedProperties, Results);
3505 
3506     // Look in the superclass.
3507     if (IFace->getSuperClass())
3508       AddObjCProperties(IFace->getSuperClass(), AllowCategories,
3509                         AllowNullaryMethods, CurContext,
3510                         AddedProperties, Results);
3511   } else if (const ObjCCategoryDecl *Category
3512                                     = dyn_cast<ObjCCategoryDecl>(Container)) {
3513     // Look through protocols.
3514     for (auto *P : Category->protocols())
3515       AddObjCProperties(P, AllowCategories, AllowNullaryMethods, CurContext,
3516                         AddedProperties, Results);
3517   }
3518 }
3519 
3520 void Sema::CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
3521                                            SourceLocation OpLoc,
3522                                            bool IsArrow) {
3523   if (!Base || !CodeCompleter)
3524     return;
3525 
3526   ExprResult ConvertedBase = PerformMemberExprBaseConversion(Base, IsArrow);
3527   if (ConvertedBase.isInvalid())
3528     return;
3529   Base = ConvertedBase.get();
3530 
3531   typedef CodeCompletionResult Result;
3532 
3533   QualType BaseType = Base->getType();
3534 
3535   if (IsArrow) {
3536     if (const PointerType *Ptr = BaseType->getAs<PointerType>())
3537       BaseType = Ptr->getPointeeType();
3538     else if (BaseType->isObjCObjectPointerType())
3539       /*Do nothing*/ ;
3540     else
3541       return;
3542   }
3543 
3544   enum CodeCompletionContext::Kind contextKind;
3545 
3546   if (IsArrow) {
3547     contextKind = CodeCompletionContext::CCC_ArrowMemberAccess;
3548   }
3549   else {
3550     if (BaseType->isObjCObjectPointerType() ||
3551         BaseType->isObjCObjectOrInterfaceType()) {
3552       contextKind = CodeCompletionContext::CCC_ObjCPropertyAccess;
3553     }
3554     else {
3555       contextKind = CodeCompletionContext::CCC_DotMemberAccess;
3556     }
3557   }
3558 
3559   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
3560                         CodeCompleter->getCodeCompletionTUInfo(),
3561                   CodeCompletionContext(contextKind,
3562                                         BaseType),
3563                         &ResultBuilder::IsMember);
3564   Results.EnterNewScope();
3565   if (const RecordType *Record = BaseType->getAs<RecordType>()) {
3566     // Indicate that we are performing a member access, and the cv-qualifiers
3567     // for the base object type.
3568     Results.setObjectTypeQualifiers(BaseType.getQualifiers());
3569 
3570     // Access to a C/C++ class, struct, or union.
3571     Results.allowNestedNameSpecifiers();
3572     CodeCompletionDeclConsumer Consumer(Results, CurContext);
3573     LookupVisibleDecls(Record->getDecl(), LookupMemberName, Consumer,
3574                        CodeCompleter->includeGlobals());
3575 
3576     if (getLangOpts().CPlusPlus) {
3577       if (!Results.empty()) {
3578         // The "template" keyword can follow "->" or "." in the grammar.
3579         // However, we only want to suggest the template keyword if something
3580         // is dependent.
3581         bool IsDependent = BaseType->isDependentType();
3582         if (!IsDependent) {
3583           for (Scope *DepScope = S; DepScope; DepScope = DepScope->getParent())
3584             if (DeclContext *Ctx = DepScope->getEntity()) {
3585               IsDependent = Ctx->isDependentContext();
3586               break;
3587             }
3588         }
3589 
3590         if (IsDependent)
3591           Results.AddResult(Result("template"));
3592       }
3593     }
3594   } else if (!IsArrow && BaseType->getAsObjCInterfacePointerType()) {
3595     // Objective-C property reference.
3596     AddedPropertiesSet AddedProperties;
3597 
3598     // Add property results based on our interface.
3599     const ObjCObjectPointerType *ObjCPtr
3600       = BaseType->getAsObjCInterfacePointerType();
3601     assert(ObjCPtr && "Non-NULL pointer guaranteed above!");
3602     AddObjCProperties(ObjCPtr->getInterfaceDecl(), true,
3603                       /*AllowNullaryMethods=*/true, CurContext,
3604                       AddedProperties, Results);
3605 
3606     // Add properties from the protocols in a qualified interface.
3607     for (auto *I : ObjCPtr->quals())
3608       AddObjCProperties(I, true, /*AllowNullaryMethods=*/true, CurContext,
3609                         AddedProperties, Results);
3610   } else if ((IsArrow && BaseType->isObjCObjectPointerType()) ||
3611              (!IsArrow && BaseType->isObjCObjectType())) {
3612     // Objective-C instance variable access.
3613     ObjCInterfaceDecl *Class = 0;
3614     if (const ObjCObjectPointerType *ObjCPtr
3615                                     = BaseType->getAs<ObjCObjectPointerType>())
3616       Class = ObjCPtr->getInterfaceDecl();
3617     else
3618       Class = BaseType->getAs<ObjCObjectType>()->getInterface();
3619 
3620     // Add all ivars from this class and its superclasses.
3621     if (Class) {
3622       CodeCompletionDeclConsumer Consumer(Results, CurContext);
3623       Results.setFilter(&ResultBuilder::IsObjCIvar);
3624       LookupVisibleDecls(Class, LookupMemberName, Consumer,
3625                          CodeCompleter->includeGlobals());
3626     }
3627   }
3628 
3629   // FIXME: How do we cope with isa?
3630 
3631   Results.ExitScope();
3632 
3633   // Hand off the results found for code completion.
3634   HandleCodeCompleteResults(this, CodeCompleter,
3635                             Results.getCompletionContext(),
3636                             Results.data(),Results.size());
3637 }
3638 
3639 void Sema::CodeCompleteTag(Scope *S, unsigned TagSpec) {
3640   if (!CodeCompleter)
3641     return;
3642 
3643   ResultBuilder::LookupFilter Filter = 0;
3644   enum CodeCompletionContext::Kind ContextKind
3645     = CodeCompletionContext::CCC_Other;
3646   switch ((DeclSpec::TST)TagSpec) {
3647   case DeclSpec::TST_enum:
3648     Filter = &ResultBuilder::IsEnum;
3649     ContextKind = CodeCompletionContext::CCC_EnumTag;
3650     break;
3651 
3652   case DeclSpec::TST_union:
3653     Filter = &ResultBuilder::IsUnion;
3654     ContextKind = CodeCompletionContext::CCC_UnionTag;
3655     break;
3656 
3657   case DeclSpec::TST_struct:
3658   case DeclSpec::TST_class:
3659   case DeclSpec::TST_interface:
3660     Filter = &ResultBuilder::IsClassOrStruct;
3661     ContextKind = CodeCompletionContext::CCC_ClassOrStructTag;
3662     break;
3663 
3664   default:
3665     llvm_unreachable("Unknown type specifier kind in CodeCompleteTag");
3666   }
3667 
3668   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
3669                         CodeCompleter->getCodeCompletionTUInfo(), ContextKind);
3670   CodeCompletionDeclConsumer Consumer(Results, CurContext);
3671 
3672   // First pass: look for tags.
3673   Results.setFilter(Filter);
3674   LookupVisibleDecls(S, LookupTagName, Consumer,
3675                      CodeCompleter->includeGlobals());
3676 
3677   if (CodeCompleter->includeGlobals()) {
3678     // Second pass: look for nested name specifiers.
3679     Results.setFilter(&ResultBuilder::IsNestedNameSpecifier);
3680     LookupVisibleDecls(S, LookupNestedNameSpecifierName, Consumer);
3681   }
3682 
3683   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
3684                             Results.data(),Results.size());
3685 }
3686 
3687 void Sema::CodeCompleteTypeQualifiers(DeclSpec &DS) {
3688   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
3689                         CodeCompleter->getCodeCompletionTUInfo(),
3690                         CodeCompletionContext::CCC_TypeQualifiers);
3691   Results.EnterNewScope();
3692   if (!(DS.getTypeQualifiers() & DeclSpec::TQ_const))
3693     Results.AddResult("const");
3694   if (!(DS.getTypeQualifiers() & DeclSpec::TQ_volatile))
3695     Results.AddResult("volatile");
3696   if (getLangOpts().C99 &&
3697       !(DS.getTypeQualifiers() & DeclSpec::TQ_restrict))
3698     Results.AddResult("restrict");
3699   if (getLangOpts().C11 &&
3700       !(DS.getTypeQualifiers() & DeclSpec::TQ_atomic))
3701     Results.AddResult("_Atomic");
3702   Results.ExitScope();
3703   HandleCodeCompleteResults(this, CodeCompleter,
3704                             Results.getCompletionContext(),
3705                             Results.data(), Results.size());
3706 }
3707 
3708 void Sema::CodeCompleteCase(Scope *S) {
3709   if (getCurFunction()->SwitchStack.empty() || !CodeCompleter)
3710     return;
3711 
3712   SwitchStmt *Switch = getCurFunction()->SwitchStack.back();
3713   QualType type = Switch->getCond()->IgnoreImplicit()->getType();
3714   if (!type->isEnumeralType()) {
3715     CodeCompleteExpressionData Data(type);
3716     Data.IntegralConstantExpression = true;
3717     CodeCompleteExpression(S, Data);
3718     return;
3719   }
3720 
3721   // Code-complete the cases of a switch statement over an enumeration type
3722   // by providing the list of
3723   EnumDecl *Enum = type->castAs<EnumType>()->getDecl();
3724   if (EnumDecl *Def = Enum->getDefinition())
3725     Enum = Def;
3726 
3727   // Determine which enumerators we have already seen in the switch statement.
3728   // FIXME: Ideally, we would also be able to look *past* the code-completion
3729   // token, in case we are code-completing in the middle of the switch and not
3730   // at the end. However, we aren't able to do so at the moment.
3731   llvm::SmallPtrSet<EnumConstantDecl *, 8> EnumeratorsSeen;
3732   NestedNameSpecifier *Qualifier = 0;
3733   for (SwitchCase *SC = Switch->getSwitchCaseList(); SC;
3734        SC = SC->getNextSwitchCase()) {
3735     CaseStmt *Case = dyn_cast<CaseStmt>(SC);
3736     if (!Case)
3737       continue;
3738 
3739     Expr *CaseVal = Case->getLHS()->IgnoreParenCasts();
3740     if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CaseVal))
3741       if (EnumConstantDecl *Enumerator
3742             = dyn_cast<EnumConstantDecl>(DRE->getDecl())) {
3743         // We look into the AST of the case statement to determine which
3744         // enumerator was named. Alternatively, we could compute the value of
3745         // the integral constant expression, then compare it against the
3746         // values of each enumerator. However, value-based approach would not
3747         // work as well with C++ templates where enumerators declared within a
3748         // template are type- and value-dependent.
3749         EnumeratorsSeen.insert(Enumerator);
3750 
3751         // If this is a qualified-id, keep track of the nested-name-specifier
3752         // so that we can reproduce it as part of code completion, e.g.,
3753         //
3754         //   switch (TagD.getKind()) {
3755         //     case TagDecl::TK_enum:
3756         //       break;
3757         //     case XXX
3758         //
3759         // At the XXX, our completions are TagDecl::TK_union,
3760         // TagDecl::TK_struct, and TagDecl::TK_class, rather than TK_union,
3761         // TK_struct, and TK_class.
3762         Qualifier = DRE->getQualifier();
3763       }
3764   }
3765 
3766   if (getLangOpts().CPlusPlus && !Qualifier && EnumeratorsSeen.empty()) {
3767     // If there are no prior enumerators in C++, check whether we have to
3768     // qualify the names of the enumerators that we suggest, because they
3769     // may not be visible in this scope.
3770     Qualifier = getRequiredQualification(Context, CurContext, Enum);
3771   }
3772 
3773   // Add any enumerators that have not yet been mentioned.
3774   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
3775                         CodeCompleter->getCodeCompletionTUInfo(),
3776                         CodeCompletionContext::CCC_Expression);
3777   Results.EnterNewScope();
3778   for (auto *E : Enum->enumerators()) {
3779     if (EnumeratorsSeen.count(E))
3780       continue;
3781 
3782     CodeCompletionResult R(E, CCP_EnumInCase, Qualifier);
3783     Results.AddResult(R, CurContext, 0, false);
3784   }
3785   Results.ExitScope();
3786 
3787   //We need to make sure we're setting the right context,
3788   //so only say we include macros if the code completer says we do
3789   enum CodeCompletionContext::Kind kind = CodeCompletionContext::CCC_Other;
3790   if (CodeCompleter->includeMacros()) {
3791     AddMacroResults(PP, Results, false);
3792     kind = CodeCompletionContext::CCC_OtherWithMacros;
3793   }
3794 
3795   HandleCodeCompleteResults(this, CodeCompleter,
3796                             kind,
3797                             Results.data(),Results.size());
3798 }
3799 
3800 static bool anyNullArguments(ArrayRef<Expr *> Args) {
3801   if (Args.size() && !Args.data())
3802     return true;
3803 
3804   for (unsigned I = 0; I != Args.size(); ++I)
3805     if (!Args[I])
3806       return true;
3807 
3808   return false;
3809 }
3810 
3811 void Sema::CodeCompleteCall(Scope *S, Expr *FnIn, ArrayRef<Expr *> Args) {
3812   if (!CodeCompleter)
3813     return;
3814 
3815   // When we're code-completing for a call, we fall back to ordinary
3816   // name code-completion whenever we can't produce specific
3817   // results. We may want to revisit this strategy in the future,
3818   // e.g., by merging the two kinds of results.
3819 
3820   Expr *Fn = (Expr *)FnIn;
3821 
3822   // Ignore type-dependent call expressions entirely.
3823   if (!Fn || Fn->isTypeDependent() || anyNullArguments(Args) ||
3824       Expr::hasAnyTypeDependentArguments(Args)) {
3825     CodeCompleteOrdinaryName(S, PCC_Expression);
3826     return;
3827   }
3828 
3829   // Build an overload candidate set based on the functions we find.
3830   SourceLocation Loc = Fn->getExprLoc();
3831   OverloadCandidateSet CandidateSet(Loc);
3832 
3833   // FIXME: What if we're calling something that isn't a function declaration?
3834   // FIXME: What if we're calling a pseudo-destructor?
3835   // FIXME: What if we're calling a member function?
3836 
3837   typedef CodeCompleteConsumer::OverloadCandidate ResultCandidate;
3838   SmallVector<ResultCandidate, 8> Results;
3839 
3840   Expr *NakedFn = Fn->IgnoreParenCasts();
3841   if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(NakedFn))
3842     AddOverloadedCallCandidates(ULE, Args, CandidateSet,
3843                                 /*PartialOverloading=*/ true);
3844   else if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(NakedFn)) {
3845     FunctionDecl *FDecl = dyn_cast<FunctionDecl>(DRE->getDecl());
3846     if (FDecl) {
3847       if (!getLangOpts().CPlusPlus ||
3848           !FDecl->getType()->getAs<FunctionProtoType>())
3849         Results.push_back(ResultCandidate(FDecl));
3850       else
3851         // FIXME: access?
3852         AddOverloadCandidate(FDecl, DeclAccessPair::make(FDecl, AS_none), Args,
3853                              CandidateSet, false, /*PartialOverloading*/true);
3854     }
3855   }
3856 
3857   QualType ParamType;
3858 
3859   if (!CandidateSet.empty()) {
3860     // Sort the overload candidate set by placing the best overloads first.
3861     std::stable_sort(
3862         CandidateSet.begin(), CandidateSet.end(),
3863         [&](const OverloadCandidate &X, const OverloadCandidate &Y) {
3864           return isBetterOverloadCandidate(*this, X, Y, Loc);
3865         });
3866 
3867     // Add the remaining viable overload candidates as code-completion reslults.
3868     for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
3869                                      CandEnd = CandidateSet.end();
3870          Cand != CandEnd; ++Cand) {
3871       if (Cand->Viable)
3872         Results.push_back(ResultCandidate(Cand->Function));
3873     }
3874 
3875     // From the viable candidates, try to determine the type of this parameter.
3876     for (unsigned I = 0, N = Results.size(); I != N; ++I) {
3877       if (const FunctionType *FType = Results[I].getFunctionType())
3878         if (const FunctionProtoType *Proto = dyn_cast<FunctionProtoType>(FType))
3879           if (Args.size() < Proto->getNumParams()) {
3880             if (ParamType.isNull())
3881               ParamType = Proto->getParamType(Args.size());
3882             else if (!Context.hasSameUnqualifiedType(
3883                           ParamType.getNonReferenceType(),
3884                           Proto->getParamType(Args.size())
3885                               .getNonReferenceType())) {
3886               ParamType = QualType();
3887               break;
3888             }
3889           }
3890     }
3891   } else {
3892     // Try to determine the parameter type from the type of the expression
3893     // being called.
3894     QualType FunctionType = Fn->getType();
3895     if (const PointerType *Ptr = FunctionType->getAs<PointerType>())
3896       FunctionType = Ptr->getPointeeType();
3897     else if (const BlockPointerType *BlockPtr
3898                                     = FunctionType->getAs<BlockPointerType>())
3899       FunctionType = BlockPtr->getPointeeType();
3900     else if (const MemberPointerType *MemPtr
3901                                     = FunctionType->getAs<MemberPointerType>())
3902       FunctionType = MemPtr->getPointeeType();
3903 
3904     if (const FunctionProtoType *Proto
3905                                   = FunctionType->getAs<FunctionProtoType>()) {
3906       if (Args.size() < Proto->getNumParams())
3907         ParamType = Proto->getParamType(Args.size());
3908     }
3909   }
3910 
3911   if (ParamType.isNull())
3912     CodeCompleteOrdinaryName(S, PCC_Expression);
3913   else
3914     CodeCompleteExpression(S, ParamType);
3915 
3916   if (!Results.empty())
3917     CodeCompleter->ProcessOverloadCandidates(*this, Args.size(), Results.data(),
3918                                              Results.size());
3919 }
3920 
3921 void Sema::CodeCompleteInitializer(Scope *S, Decl *D) {
3922   ValueDecl *VD = dyn_cast_or_null<ValueDecl>(D);
3923   if (!VD) {
3924     CodeCompleteOrdinaryName(S, PCC_Expression);
3925     return;
3926   }
3927 
3928   CodeCompleteExpression(S, VD->getType());
3929 }
3930 
3931 void Sema::CodeCompleteReturn(Scope *S) {
3932   QualType ResultType;
3933   if (isa<BlockDecl>(CurContext)) {
3934     if (BlockScopeInfo *BSI = getCurBlock())
3935       ResultType = BSI->ReturnType;
3936   } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(CurContext))
3937     ResultType = Function->getReturnType();
3938   else if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(CurContext))
3939     ResultType = Method->getReturnType();
3940 
3941   if (ResultType.isNull())
3942     CodeCompleteOrdinaryName(S, PCC_Expression);
3943   else
3944     CodeCompleteExpression(S, ResultType);
3945 }
3946 
3947 void Sema::CodeCompleteAfterIf(Scope *S) {
3948   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
3949                         CodeCompleter->getCodeCompletionTUInfo(),
3950                         mapCodeCompletionContext(*this, PCC_Statement));
3951   Results.setFilter(&ResultBuilder::IsOrdinaryName);
3952   Results.EnterNewScope();
3953 
3954   CodeCompletionDeclConsumer Consumer(Results, CurContext);
3955   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
3956                      CodeCompleter->includeGlobals());
3957 
3958   AddOrdinaryNameResults(PCC_Statement, S, *this, Results);
3959 
3960   // "else" block
3961   CodeCompletionBuilder Builder(Results.getAllocator(),
3962                                 Results.getCodeCompletionTUInfo());
3963   Builder.AddTypedTextChunk("else");
3964   if (Results.includeCodePatterns()) {
3965     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
3966     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
3967     Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
3968     Builder.AddPlaceholderChunk("statements");
3969     Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
3970     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
3971   }
3972   Results.AddResult(Builder.TakeString());
3973 
3974   // "else if" block
3975   Builder.AddTypedTextChunk("else");
3976   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
3977   Builder.AddTextChunk("if");
3978   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
3979   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
3980   if (getLangOpts().CPlusPlus)
3981     Builder.AddPlaceholderChunk("condition");
3982   else
3983     Builder.AddPlaceholderChunk("expression");
3984   Builder.AddChunk(CodeCompletionString::CK_RightParen);
3985   if (Results.includeCodePatterns()) {
3986     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
3987     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
3988     Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
3989     Builder.AddPlaceholderChunk("statements");
3990     Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
3991     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
3992   }
3993   Results.AddResult(Builder.TakeString());
3994 
3995   Results.ExitScope();
3996 
3997   if (S->getFnParent())
3998     AddPrettyFunctionResults(PP.getLangOpts(), Results);
3999 
4000   if (CodeCompleter->includeMacros())
4001     AddMacroResults(PP, Results, false);
4002 
4003   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4004                             Results.data(),Results.size());
4005 }
4006 
4007 void Sema::CodeCompleteAssignmentRHS(Scope *S, Expr *LHS) {
4008   if (LHS)
4009     CodeCompleteExpression(S, static_cast<Expr *>(LHS)->getType());
4010   else
4011     CodeCompleteOrdinaryName(S, PCC_Expression);
4012 }
4013 
4014 void Sema::CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS,
4015                                    bool EnteringContext) {
4016   if (!SS.getScopeRep() || !CodeCompleter)
4017     return;
4018 
4019   DeclContext *Ctx = computeDeclContext(SS, EnteringContext);
4020   if (!Ctx)
4021     return;
4022 
4023   // Try to instantiate any non-dependent declaration contexts before
4024   // we look in them.
4025   if (!isDependentScopeSpecifier(SS) && RequireCompleteDeclContext(SS, Ctx))
4026     return;
4027 
4028   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4029                         CodeCompleter->getCodeCompletionTUInfo(),
4030                         CodeCompletionContext::CCC_Name);
4031   Results.EnterNewScope();
4032 
4033   // The "template" keyword can follow "::" in the grammar, but only
4034   // put it into the grammar if the nested-name-specifier is dependent.
4035   NestedNameSpecifier *NNS = SS.getScopeRep();
4036   if (!Results.empty() && NNS->isDependent())
4037     Results.AddResult("template");
4038 
4039   // Add calls to overridden virtual functions, if there are any.
4040   //
4041   // FIXME: This isn't wonderful, because we don't know whether we're actually
4042   // in a context that permits expressions. This is a general issue with
4043   // qualified-id completions.
4044   if (!EnteringContext)
4045     MaybeAddOverrideCalls(*this, Ctx, Results);
4046   Results.ExitScope();
4047 
4048   CodeCompletionDeclConsumer Consumer(Results, CurContext);
4049   LookupVisibleDecls(Ctx, LookupOrdinaryName, Consumer);
4050 
4051   HandleCodeCompleteResults(this, CodeCompleter,
4052                             Results.getCompletionContext(),
4053                             Results.data(),Results.size());
4054 }
4055 
4056 void Sema::CodeCompleteUsing(Scope *S) {
4057   if (!CodeCompleter)
4058     return;
4059 
4060   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4061                         CodeCompleter->getCodeCompletionTUInfo(),
4062                         CodeCompletionContext::CCC_PotentiallyQualifiedName,
4063                         &ResultBuilder::IsNestedNameSpecifier);
4064   Results.EnterNewScope();
4065 
4066   // If we aren't in class scope, we could see the "namespace" keyword.
4067   if (!S->isClassScope())
4068     Results.AddResult(CodeCompletionResult("namespace"));
4069 
4070   // After "using", we can see anything that would start a
4071   // nested-name-specifier.
4072   CodeCompletionDeclConsumer Consumer(Results, CurContext);
4073   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
4074                      CodeCompleter->includeGlobals());
4075   Results.ExitScope();
4076 
4077   HandleCodeCompleteResults(this, CodeCompleter,
4078                             CodeCompletionContext::CCC_PotentiallyQualifiedName,
4079                             Results.data(),Results.size());
4080 }
4081 
4082 void Sema::CodeCompleteUsingDirective(Scope *S) {
4083   if (!CodeCompleter)
4084     return;
4085 
4086   // After "using namespace", we expect to see a namespace name or namespace
4087   // alias.
4088   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4089                         CodeCompleter->getCodeCompletionTUInfo(),
4090                         CodeCompletionContext::CCC_Namespace,
4091                         &ResultBuilder::IsNamespaceOrAlias);
4092   Results.EnterNewScope();
4093   CodeCompletionDeclConsumer Consumer(Results, CurContext);
4094   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
4095                      CodeCompleter->includeGlobals());
4096   Results.ExitScope();
4097   HandleCodeCompleteResults(this, CodeCompleter,
4098                             CodeCompletionContext::CCC_Namespace,
4099                             Results.data(),Results.size());
4100 }
4101 
4102 void Sema::CodeCompleteNamespaceDecl(Scope *S)  {
4103   if (!CodeCompleter)
4104     return;
4105 
4106   DeclContext *Ctx = S->getEntity();
4107   if (!S->getParent())
4108     Ctx = Context.getTranslationUnitDecl();
4109 
4110   bool SuppressedGlobalResults
4111     = Ctx && !CodeCompleter->includeGlobals() && isa<TranslationUnitDecl>(Ctx);
4112 
4113   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4114                         CodeCompleter->getCodeCompletionTUInfo(),
4115                         SuppressedGlobalResults
4116                           ? CodeCompletionContext::CCC_Namespace
4117                           : CodeCompletionContext::CCC_Other,
4118                         &ResultBuilder::IsNamespace);
4119 
4120   if (Ctx && Ctx->isFileContext() && !SuppressedGlobalResults) {
4121     // We only want to see those namespaces that have already been defined
4122     // within this scope, because its likely that the user is creating an
4123     // extended namespace declaration. Keep track of the most recent
4124     // definition of each namespace.
4125     std::map<NamespaceDecl *, NamespaceDecl *> OrigToLatest;
4126     for (DeclContext::specific_decl_iterator<NamespaceDecl>
4127          NS(Ctx->decls_begin()), NSEnd(Ctx->decls_end());
4128          NS != NSEnd; ++NS)
4129       OrigToLatest[NS->getOriginalNamespace()] = *NS;
4130 
4131     // Add the most recent definition (or extended definition) of each
4132     // namespace to the list of results.
4133     Results.EnterNewScope();
4134     for (std::map<NamespaceDecl *, NamespaceDecl *>::iterator
4135               NS = OrigToLatest.begin(),
4136            NSEnd = OrigToLatest.end();
4137          NS != NSEnd; ++NS)
4138       Results.AddResult(CodeCompletionResult(
4139                           NS->second, Results.getBasePriority(NS->second), 0),
4140                         CurContext, 0, false);
4141     Results.ExitScope();
4142   }
4143 
4144   HandleCodeCompleteResults(this, CodeCompleter,
4145                             Results.getCompletionContext(),
4146                             Results.data(),Results.size());
4147 }
4148 
4149 void Sema::CodeCompleteNamespaceAliasDecl(Scope *S)  {
4150   if (!CodeCompleter)
4151     return;
4152 
4153   // After "namespace", we expect to see a namespace or alias.
4154   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4155                         CodeCompleter->getCodeCompletionTUInfo(),
4156                         CodeCompletionContext::CCC_Namespace,
4157                         &ResultBuilder::IsNamespaceOrAlias);
4158   CodeCompletionDeclConsumer Consumer(Results, CurContext);
4159   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
4160                      CodeCompleter->includeGlobals());
4161   HandleCodeCompleteResults(this, CodeCompleter,
4162                             Results.getCompletionContext(),
4163                             Results.data(),Results.size());
4164 }
4165 
4166 void Sema::CodeCompleteOperatorName(Scope *S) {
4167   if (!CodeCompleter)
4168     return;
4169 
4170   typedef CodeCompletionResult Result;
4171   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4172                         CodeCompleter->getCodeCompletionTUInfo(),
4173                         CodeCompletionContext::CCC_Type,
4174                         &ResultBuilder::IsType);
4175   Results.EnterNewScope();
4176 
4177   // Add the names of overloadable operators.
4178 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly)      \
4179   if (std::strcmp(Spelling, "?"))                                                  \
4180     Results.AddResult(Result(Spelling));
4181 #include "clang/Basic/OperatorKinds.def"
4182 
4183   // Add any type names visible from the current scope
4184   Results.allowNestedNameSpecifiers();
4185   CodeCompletionDeclConsumer Consumer(Results, CurContext);
4186   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
4187                      CodeCompleter->includeGlobals());
4188 
4189   // Add any type specifiers
4190   AddTypeSpecifierResults(getLangOpts(), Results);
4191   Results.ExitScope();
4192 
4193   HandleCodeCompleteResults(this, CodeCompleter,
4194                             CodeCompletionContext::CCC_Type,
4195                             Results.data(),Results.size());
4196 }
4197 
4198 void Sema::CodeCompleteConstructorInitializer(
4199                               Decl *ConstructorD,
4200                               ArrayRef <CXXCtorInitializer *> Initializers) {
4201   PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
4202   CXXConstructorDecl *Constructor
4203     = static_cast<CXXConstructorDecl *>(ConstructorD);
4204   if (!Constructor)
4205     return;
4206 
4207   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4208                         CodeCompleter->getCodeCompletionTUInfo(),
4209                         CodeCompletionContext::CCC_PotentiallyQualifiedName);
4210   Results.EnterNewScope();
4211 
4212   // Fill in any already-initialized fields or base classes.
4213   llvm::SmallPtrSet<FieldDecl *, 4> InitializedFields;
4214   llvm::SmallPtrSet<CanQualType, 4> InitializedBases;
4215   for (unsigned I = 0, E = Initializers.size(); I != E; ++I) {
4216     if (Initializers[I]->isBaseInitializer())
4217       InitializedBases.insert(
4218         Context.getCanonicalType(QualType(Initializers[I]->getBaseClass(), 0)));
4219     else
4220       InitializedFields.insert(cast<FieldDecl>(
4221                                Initializers[I]->getAnyMember()));
4222   }
4223 
4224   // Add completions for base classes.
4225   CodeCompletionBuilder Builder(Results.getAllocator(),
4226                                 Results.getCodeCompletionTUInfo());
4227   bool SawLastInitializer = Initializers.empty();
4228   CXXRecordDecl *ClassDecl = Constructor->getParent();
4229   for (const auto &Base : ClassDecl->bases()) {
4230     if (!InitializedBases.insert(Context.getCanonicalType(Base.getType()))) {
4231       SawLastInitializer
4232         = !Initializers.empty() &&
4233           Initializers.back()->isBaseInitializer() &&
4234           Context.hasSameUnqualifiedType(Base.getType(),
4235                QualType(Initializers.back()->getBaseClass(), 0));
4236       continue;
4237     }
4238 
4239     Builder.AddTypedTextChunk(
4240                Results.getAllocator().CopyString(
4241                           Base.getType().getAsString(Policy)));
4242     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4243     Builder.AddPlaceholderChunk("args");
4244     Builder.AddChunk(CodeCompletionString::CK_RightParen);
4245     Results.AddResult(CodeCompletionResult(Builder.TakeString(),
4246                                    SawLastInitializer? CCP_NextInitializer
4247                                                      : CCP_MemberDeclaration));
4248     SawLastInitializer = false;
4249   }
4250 
4251   // Add completions for virtual base classes.
4252   for (const auto &Base : ClassDecl->vbases()) {
4253     if (!InitializedBases.insert(Context.getCanonicalType(Base.getType()))) {
4254       SawLastInitializer
4255         = !Initializers.empty() &&
4256           Initializers.back()->isBaseInitializer() &&
4257           Context.hasSameUnqualifiedType(Base.getType(),
4258                QualType(Initializers.back()->getBaseClass(), 0));
4259       continue;
4260     }
4261 
4262     Builder.AddTypedTextChunk(
4263                Builder.getAllocator().CopyString(
4264                           Base.getType().getAsString(Policy)));
4265     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4266     Builder.AddPlaceholderChunk("args");
4267     Builder.AddChunk(CodeCompletionString::CK_RightParen);
4268     Results.AddResult(CodeCompletionResult(Builder.TakeString(),
4269                                    SawLastInitializer? CCP_NextInitializer
4270                                                      : CCP_MemberDeclaration));
4271     SawLastInitializer = false;
4272   }
4273 
4274   // Add completions for members.
4275   for (auto *Field : ClassDecl->fields()) {
4276     if (!InitializedFields.insert(cast<FieldDecl>(Field->getCanonicalDecl()))) {
4277       SawLastInitializer
4278         = !Initializers.empty() &&
4279           Initializers.back()->isAnyMemberInitializer() &&
4280           Initializers.back()->getAnyMember() == Field;
4281       continue;
4282     }
4283 
4284     if (!Field->getDeclName())
4285       continue;
4286 
4287     Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
4288                                          Field->getIdentifier()->getName()));
4289     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4290     Builder.AddPlaceholderChunk("args");
4291     Builder.AddChunk(CodeCompletionString::CK_RightParen);
4292     Results.AddResult(CodeCompletionResult(Builder.TakeString(),
4293                                    SawLastInitializer? CCP_NextInitializer
4294                                                      : CCP_MemberDeclaration,
4295                                            CXCursor_MemberRef,
4296                                            CXAvailability_Available,
4297                                            Field));
4298     SawLastInitializer = false;
4299   }
4300   Results.ExitScope();
4301 
4302   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4303                             Results.data(), Results.size());
4304 }
4305 
4306 /// \brief Determine whether this scope denotes a namespace.
4307 static bool isNamespaceScope(Scope *S) {
4308   DeclContext *DC = S->getEntity();
4309   if (!DC)
4310     return false;
4311 
4312   return DC->isFileContext();
4313 }
4314 
4315 void Sema::CodeCompleteLambdaIntroducer(Scope *S, LambdaIntroducer &Intro,
4316                                         bool AfterAmpersand) {
4317   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4318                         CodeCompleter->getCodeCompletionTUInfo(),
4319                         CodeCompletionContext::CCC_Other);
4320   Results.EnterNewScope();
4321 
4322   // Note what has already been captured.
4323   llvm::SmallPtrSet<IdentifierInfo *, 4> Known;
4324   bool IncludedThis = false;
4325   for (SmallVectorImpl<LambdaCapture>::iterator C = Intro.Captures.begin(),
4326                                              CEnd = Intro.Captures.end();
4327        C != CEnd; ++C) {
4328     if (C->Kind == LCK_This) {
4329       IncludedThis = true;
4330       continue;
4331     }
4332 
4333     Known.insert(C->Id);
4334   }
4335 
4336   // Look for other capturable variables.
4337   for (; S && !isNamespaceScope(S); S = S->getParent()) {
4338     for (const auto *D : S->decls()) {
4339       const auto *Var = dyn_cast<VarDecl>(D);
4340       if (!Var ||
4341           !Var->hasLocalStorage() ||
4342           Var->hasAttr<BlocksAttr>())
4343         continue;
4344 
4345       if (Known.insert(Var->getIdentifier()))
4346         Results.AddResult(CodeCompletionResult(Var, CCP_LocalDeclaration),
4347                           CurContext, 0, false);
4348     }
4349   }
4350 
4351   // Add 'this', if it would be valid.
4352   if (!IncludedThis && !AfterAmpersand && Intro.Default != LCD_ByCopy)
4353     addThisCompletion(*this, Results);
4354 
4355   Results.ExitScope();
4356 
4357   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
4358                             Results.data(), Results.size());
4359 }
4360 
4361 /// Macro that optionally prepends an "@" to the string literal passed in via
4362 /// Keyword, depending on whether NeedAt is true or false.
4363 #define OBJC_AT_KEYWORD_NAME(NeedAt,Keyword) ((NeedAt)? "@" Keyword : Keyword)
4364 
4365 static void AddObjCImplementationResults(const LangOptions &LangOpts,
4366                                          ResultBuilder &Results,
4367                                          bool NeedAt) {
4368   typedef CodeCompletionResult Result;
4369   // Since we have an implementation, we can end it.
4370   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,"end")));
4371 
4372   CodeCompletionBuilder Builder(Results.getAllocator(),
4373                                 Results.getCodeCompletionTUInfo());
4374   if (LangOpts.ObjC2) {
4375     // @dynamic
4376     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"dynamic"));
4377     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4378     Builder.AddPlaceholderChunk("property");
4379     Results.AddResult(Result(Builder.TakeString()));
4380 
4381     // @synthesize
4382     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"synthesize"));
4383     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4384     Builder.AddPlaceholderChunk("property");
4385     Results.AddResult(Result(Builder.TakeString()));
4386   }
4387 }
4388 
4389 static void AddObjCInterfaceResults(const LangOptions &LangOpts,
4390                                     ResultBuilder &Results,
4391                                     bool NeedAt) {
4392   typedef CodeCompletionResult Result;
4393 
4394   // Since we have an interface or protocol, we can end it.
4395   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,"end")));
4396 
4397   if (LangOpts.ObjC2) {
4398     // @property
4399     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,"property")));
4400 
4401     // @required
4402     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,"required")));
4403 
4404     // @optional
4405     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,"optional")));
4406   }
4407 }
4408 
4409 static void AddObjCTopLevelResults(ResultBuilder &Results, bool NeedAt) {
4410   typedef CodeCompletionResult Result;
4411   CodeCompletionBuilder Builder(Results.getAllocator(),
4412                                 Results.getCodeCompletionTUInfo());
4413 
4414   // @class name ;
4415   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"class"));
4416   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4417   Builder.AddPlaceholderChunk("name");
4418   Results.AddResult(Result(Builder.TakeString()));
4419 
4420   if (Results.includeCodePatterns()) {
4421     // @interface name
4422     // FIXME: Could introduce the whole pattern, including superclasses and
4423     // such.
4424     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"interface"));
4425     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4426     Builder.AddPlaceholderChunk("class");
4427     Results.AddResult(Result(Builder.TakeString()));
4428 
4429     // @protocol name
4430     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"protocol"));
4431     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4432     Builder.AddPlaceholderChunk("protocol");
4433     Results.AddResult(Result(Builder.TakeString()));
4434 
4435     // @implementation name
4436     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"implementation"));
4437     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4438     Builder.AddPlaceholderChunk("class");
4439     Results.AddResult(Result(Builder.TakeString()));
4440   }
4441 
4442   // @compatibility_alias name
4443   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"compatibility_alias"));
4444   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4445   Builder.AddPlaceholderChunk("alias");
4446   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4447   Builder.AddPlaceholderChunk("class");
4448   Results.AddResult(Result(Builder.TakeString()));
4449 
4450   if (Results.getSema().getLangOpts().Modules) {
4451     // @import name
4452     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "import"));
4453     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4454     Builder.AddPlaceholderChunk("module");
4455     Results.AddResult(Result(Builder.TakeString()));
4456   }
4457 }
4458 
4459 void Sema::CodeCompleteObjCAtDirective(Scope *S) {
4460   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4461                         CodeCompleter->getCodeCompletionTUInfo(),
4462                         CodeCompletionContext::CCC_Other);
4463   Results.EnterNewScope();
4464   if (isa<ObjCImplDecl>(CurContext))
4465     AddObjCImplementationResults(getLangOpts(), Results, false);
4466   else if (CurContext->isObjCContainer())
4467     AddObjCInterfaceResults(getLangOpts(), Results, false);
4468   else
4469     AddObjCTopLevelResults(Results, false);
4470   Results.ExitScope();
4471   HandleCodeCompleteResults(this, CodeCompleter,
4472                             CodeCompletionContext::CCC_Other,
4473                             Results.data(),Results.size());
4474 }
4475 
4476 static void AddObjCExpressionResults(ResultBuilder &Results, bool NeedAt) {
4477   typedef CodeCompletionResult Result;
4478   CodeCompletionBuilder Builder(Results.getAllocator(),
4479                                 Results.getCodeCompletionTUInfo());
4480 
4481   // @encode ( type-name )
4482   const char *EncodeType = "char[]";
4483   if (Results.getSema().getLangOpts().CPlusPlus ||
4484       Results.getSema().getLangOpts().ConstStrings)
4485     EncodeType = "const char[]";
4486   Builder.AddResultTypeChunk(EncodeType);
4487   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"encode"));
4488   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4489   Builder.AddPlaceholderChunk("type-name");
4490   Builder.AddChunk(CodeCompletionString::CK_RightParen);
4491   Results.AddResult(Result(Builder.TakeString()));
4492 
4493   // @protocol ( protocol-name )
4494   Builder.AddResultTypeChunk("Protocol *");
4495   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"protocol"));
4496   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4497   Builder.AddPlaceholderChunk("protocol-name");
4498   Builder.AddChunk(CodeCompletionString::CK_RightParen);
4499   Results.AddResult(Result(Builder.TakeString()));
4500 
4501   // @selector ( selector )
4502   Builder.AddResultTypeChunk("SEL");
4503   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"selector"));
4504   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4505   Builder.AddPlaceholderChunk("selector");
4506   Builder.AddChunk(CodeCompletionString::CK_RightParen);
4507   Results.AddResult(Result(Builder.TakeString()));
4508 
4509   // @"string"
4510   Builder.AddResultTypeChunk("NSString *");
4511   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"\""));
4512   Builder.AddPlaceholderChunk("string");
4513   Builder.AddTextChunk("\"");
4514   Results.AddResult(Result(Builder.TakeString()));
4515 
4516   // @[objects, ...]
4517   Builder.AddResultTypeChunk("NSArray *");
4518   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"["));
4519   Builder.AddPlaceholderChunk("objects, ...");
4520   Builder.AddChunk(CodeCompletionString::CK_RightBracket);
4521   Results.AddResult(Result(Builder.TakeString()));
4522 
4523   // @{key : object, ...}
4524   Builder.AddResultTypeChunk("NSDictionary *");
4525   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"{"));
4526   Builder.AddPlaceholderChunk("key");
4527   Builder.AddChunk(CodeCompletionString::CK_Colon);
4528   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4529   Builder.AddPlaceholderChunk("object, ...");
4530   Builder.AddChunk(CodeCompletionString::CK_RightBrace);
4531   Results.AddResult(Result(Builder.TakeString()));
4532 
4533   // @(expression)
4534   Builder.AddResultTypeChunk("id");
4535   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt, "("));
4536   Builder.AddPlaceholderChunk("expression");
4537   Builder.AddChunk(CodeCompletionString::CK_RightParen);
4538   Results.AddResult(Result(Builder.TakeString()));
4539 }
4540 
4541 static void AddObjCStatementResults(ResultBuilder &Results, bool NeedAt) {
4542   typedef CodeCompletionResult Result;
4543   CodeCompletionBuilder Builder(Results.getAllocator(),
4544                                 Results.getCodeCompletionTUInfo());
4545 
4546   if (Results.includeCodePatterns()) {
4547     // @try { statements } @catch ( declaration ) { statements } @finally
4548     //   { statements }
4549     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"try"));
4550     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
4551     Builder.AddPlaceholderChunk("statements");
4552     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
4553     Builder.AddTextChunk("@catch");
4554     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4555     Builder.AddPlaceholderChunk("parameter");
4556     Builder.AddChunk(CodeCompletionString::CK_RightParen);
4557     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
4558     Builder.AddPlaceholderChunk("statements");
4559     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
4560     Builder.AddTextChunk("@finally");
4561     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
4562     Builder.AddPlaceholderChunk("statements");
4563     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
4564     Results.AddResult(Result(Builder.TakeString()));
4565   }
4566 
4567   // @throw
4568   Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"throw"));
4569   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4570   Builder.AddPlaceholderChunk("expression");
4571   Results.AddResult(Result(Builder.TakeString()));
4572 
4573   if (Results.includeCodePatterns()) {
4574     // @synchronized ( expression ) { statements }
4575     Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,"synchronized"));
4576     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
4577     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4578     Builder.AddPlaceholderChunk("expression");
4579     Builder.AddChunk(CodeCompletionString::CK_RightParen);
4580     Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
4581     Builder.AddPlaceholderChunk("statements");
4582     Builder.AddChunk(CodeCompletionString::CK_RightBrace);
4583     Results.AddResult(Result(Builder.TakeString()));
4584   }
4585 }
4586 
4587 static void AddObjCVisibilityResults(const LangOptions &LangOpts,
4588                                      ResultBuilder &Results,
4589                                      bool NeedAt) {
4590   typedef CodeCompletionResult Result;
4591   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,"private")));
4592   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,"protected")));
4593   Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,"public")));
4594   if (LangOpts.ObjC2)
4595     Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,"package")));
4596 }
4597 
4598 void Sema::CodeCompleteObjCAtVisibility(Scope *S) {
4599   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4600                         CodeCompleter->getCodeCompletionTUInfo(),
4601                         CodeCompletionContext::CCC_Other);
4602   Results.EnterNewScope();
4603   AddObjCVisibilityResults(getLangOpts(), Results, false);
4604   Results.ExitScope();
4605   HandleCodeCompleteResults(this, CodeCompleter,
4606                             CodeCompletionContext::CCC_Other,
4607                             Results.data(),Results.size());
4608 }
4609 
4610 void Sema::CodeCompleteObjCAtStatement(Scope *S) {
4611   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4612                         CodeCompleter->getCodeCompletionTUInfo(),
4613                         CodeCompletionContext::CCC_Other);
4614   Results.EnterNewScope();
4615   AddObjCStatementResults(Results, false);
4616   AddObjCExpressionResults(Results, false);
4617   Results.ExitScope();
4618   HandleCodeCompleteResults(this, CodeCompleter,
4619                             CodeCompletionContext::CCC_Other,
4620                             Results.data(),Results.size());
4621 }
4622 
4623 void Sema::CodeCompleteObjCAtExpression(Scope *S) {
4624   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4625                         CodeCompleter->getCodeCompletionTUInfo(),
4626                         CodeCompletionContext::CCC_Other);
4627   Results.EnterNewScope();
4628   AddObjCExpressionResults(Results, false);
4629   Results.ExitScope();
4630   HandleCodeCompleteResults(this, CodeCompleter,
4631                             CodeCompletionContext::CCC_Other,
4632                             Results.data(),Results.size());
4633 }
4634 
4635 /// \brief Determine whether the addition of the given flag to an Objective-C
4636 /// property's attributes will cause a conflict.
4637 static bool ObjCPropertyFlagConflicts(unsigned Attributes, unsigned NewFlag) {
4638   // Check if we've already added this flag.
4639   if (Attributes & NewFlag)
4640     return true;
4641 
4642   Attributes |= NewFlag;
4643 
4644   // Check for collisions with "readonly".
4645   if ((Attributes & ObjCDeclSpec::DQ_PR_readonly) &&
4646       (Attributes & ObjCDeclSpec::DQ_PR_readwrite))
4647     return true;
4648 
4649   // Check for more than one of { assign, copy, retain, strong, weak }.
4650   unsigned AssignCopyRetMask = Attributes & (ObjCDeclSpec::DQ_PR_assign |
4651                                          ObjCDeclSpec::DQ_PR_unsafe_unretained |
4652                                              ObjCDeclSpec::DQ_PR_copy |
4653                                              ObjCDeclSpec::DQ_PR_retain |
4654                                              ObjCDeclSpec::DQ_PR_strong |
4655                                              ObjCDeclSpec::DQ_PR_weak);
4656   if (AssignCopyRetMask &&
4657       AssignCopyRetMask != ObjCDeclSpec::DQ_PR_assign &&
4658       AssignCopyRetMask != ObjCDeclSpec::DQ_PR_unsafe_unretained &&
4659       AssignCopyRetMask != ObjCDeclSpec::DQ_PR_copy &&
4660       AssignCopyRetMask != ObjCDeclSpec::DQ_PR_retain &&
4661       AssignCopyRetMask != ObjCDeclSpec::DQ_PR_strong &&
4662       AssignCopyRetMask != ObjCDeclSpec::DQ_PR_weak)
4663     return true;
4664 
4665   return false;
4666 }
4667 
4668 void Sema::CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS) {
4669   if (!CodeCompleter)
4670     return;
4671 
4672   unsigned Attributes = ODS.getPropertyAttributes();
4673 
4674   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4675                         CodeCompleter->getCodeCompletionTUInfo(),
4676                         CodeCompletionContext::CCC_Other);
4677   Results.EnterNewScope();
4678   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_readonly))
4679     Results.AddResult(CodeCompletionResult("readonly"));
4680   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_assign))
4681     Results.AddResult(CodeCompletionResult("assign"));
4682   if (!ObjCPropertyFlagConflicts(Attributes,
4683                                  ObjCDeclSpec::DQ_PR_unsafe_unretained))
4684     Results.AddResult(CodeCompletionResult("unsafe_unretained"));
4685   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_readwrite))
4686     Results.AddResult(CodeCompletionResult("readwrite"));
4687   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_retain))
4688     Results.AddResult(CodeCompletionResult("retain"));
4689   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_strong))
4690     Results.AddResult(CodeCompletionResult("strong"));
4691   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_copy))
4692     Results.AddResult(CodeCompletionResult("copy"));
4693   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_nonatomic))
4694     Results.AddResult(CodeCompletionResult("nonatomic"));
4695   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_atomic))
4696     Results.AddResult(CodeCompletionResult("atomic"));
4697 
4698   // Only suggest "weak" if we're compiling for ARC-with-weak-references or GC.
4699   if (getLangOpts().ObjCARCWeak || getLangOpts().getGC() != LangOptions::NonGC)
4700     if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_weak))
4701       Results.AddResult(CodeCompletionResult("weak"));
4702 
4703   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_setter)) {
4704     CodeCompletionBuilder Setter(Results.getAllocator(),
4705                                  Results.getCodeCompletionTUInfo());
4706     Setter.AddTypedTextChunk("setter");
4707     Setter.AddTextChunk("=");
4708     Setter.AddPlaceholderChunk("method");
4709     Results.AddResult(CodeCompletionResult(Setter.TakeString()));
4710   }
4711   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_getter)) {
4712     CodeCompletionBuilder Getter(Results.getAllocator(),
4713                                  Results.getCodeCompletionTUInfo());
4714     Getter.AddTypedTextChunk("getter");
4715     Getter.AddTextChunk("=");
4716     Getter.AddPlaceholderChunk("method");
4717     Results.AddResult(CodeCompletionResult(Getter.TakeString()));
4718   }
4719   Results.ExitScope();
4720   HandleCodeCompleteResults(this, CodeCompleter,
4721                             CodeCompletionContext::CCC_Other,
4722                             Results.data(),Results.size());
4723 }
4724 
4725 /// \brief Describes the kind of Objective-C method that we want to find
4726 /// via code completion.
4727 enum ObjCMethodKind {
4728   MK_Any, ///< Any kind of method, provided it means other specified criteria.
4729   MK_ZeroArgSelector, ///< Zero-argument (unary) selector.
4730   MK_OneArgSelector ///< One-argument selector.
4731 };
4732 
4733 static bool isAcceptableObjCSelector(Selector Sel,
4734                                      ObjCMethodKind WantKind,
4735                                      ArrayRef<IdentifierInfo *> SelIdents,
4736                                      bool AllowSameLength = true) {
4737   unsigned NumSelIdents = SelIdents.size();
4738   if (NumSelIdents > Sel.getNumArgs())
4739     return false;
4740 
4741   switch (WantKind) {
4742     case MK_Any:             break;
4743     case MK_ZeroArgSelector: return Sel.isUnarySelector();
4744     case MK_OneArgSelector:  return Sel.getNumArgs() == 1;
4745   }
4746 
4747   if (!AllowSameLength && NumSelIdents && NumSelIdents == Sel.getNumArgs())
4748     return false;
4749 
4750   for (unsigned I = 0; I != NumSelIdents; ++I)
4751     if (SelIdents[I] != Sel.getIdentifierInfoForSlot(I))
4752       return false;
4753 
4754   return true;
4755 }
4756 
4757 static bool isAcceptableObjCMethod(ObjCMethodDecl *Method,
4758                                    ObjCMethodKind WantKind,
4759                                    ArrayRef<IdentifierInfo *> SelIdents,
4760                                    bool AllowSameLength = true) {
4761   return isAcceptableObjCSelector(Method->getSelector(), WantKind, SelIdents,
4762                                   AllowSameLength);
4763 }
4764 
4765 namespace {
4766   /// \brief A set of selectors, which is used to avoid introducing multiple
4767   /// completions with the same selector into the result set.
4768   typedef llvm::SmallPtrSet<Selector, 16> VisitedSelectorSet;
4769 }
4770 
4771 /// \brief Add all of the Objective-C methods in the given Objective-C
4772 /// container to the set of results.
4773 ///
4774 /// The container will be a class, protocol, category, or implementation of
4775 /// any of the above. This mether will recurse to include methods from
4776 /// the superclasses of classes along with their categories, protocols, and
4777 /// implementations.
4778 ///
4779 /// \param Container the container in which we'll look to find methods.
4780 ///
4781 /// \param WantInstanceMethods Whether to add instance methods (only); if
4782 /// false, this routine will add factory methods (only).
4783 ///
4784 /// \param CurContext the context in which we're performing the lookup that
4785 /// finds methods.
4786 ///
4787 /// \param AllowSameLength Whether we allow a method to be added to the list
4788 /// when it has the same number of parameters as we have selector identifiers.
4789 ///
4790 /// \param Results the structure into which we'll add results.
4791 static void AddObjCMethods(ObjCContainerDecl *Container,
4792                            bool WantInstanceMethods,
4793                            ObjCMethodKind WantKind,
4794                            ArrayRef<IdentifierInfo *> SelIdents,
4795                            DeclContext *CurContext,
4796                            VisitedSelectorSet &Selectors,
4797                            bool AllowSameLength,
4798                            ResultBuilder &Results,
4799                            bool InOriginalClass = true) {
4800   typedef CodeCompletionResult Result;
4801   Container = getContainerDef(Container);
4802   ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container);
4803   bool isRootClass = IFace && !IFace->getSuperClass();
4804   for (auto *M : Container->methods()) {
4805     // The instance methods on the root class can be messaged via the
4806     // metaclass.
4807     if (M->isInstanceMethod() == WantInstanceMethods ||
4808         (isRootClass && !WantInstanceMethods)) {
4809       // Check whether the selector identifiers we've been given are a
4810       // subset of the identifiers for this particular method.
4811       if (!isAcceptableObjCMethod(M, WantKind, SelIdents, AllowSameLength))
4812         continue;
4813 
4814       if (!Selectors.insert(M->getSelector()))
4815         continue;
4816 
4817       Result R = Result(M, Results.getBasePriority(M), 0);
4818       R.StartParameter = SelIdents.size();
4819       R.AllParametersAreInformative = (WantKind != MK_Any);
4820       if (!InOriginalClass)
4821         R.Priority += CCD_InBaseClass;
4822       Results.MaybeAddResult(R, CurContext);
4823     }
4824   }
4825 
4826   // Visit the protocols of protocols.
4827   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
4828     if (Protocol->hasDefinition()) {
4829       const ObjCList<ObjCProtocolDecl> &Protocols
4830         = Protocol->getReferencedProtocols();
4831       for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
4832                                                 E = Protocols.end();
4833            I != E; ++I)
4834         AddObjCMethods(*I, WantInstanceMethods, WantKind, SelIdents,
4835                        CurContext, Selectors, AllowSameLength, Results, false);
4836     }
4837   }
4838 
4839   if (!IFace || !IFace->hasDefinition())
4840     return;
4841 
4842   // Add methods in protocols.
4843   for (auto *I : IFace->protocols())
4844     AddObjCMethods(I, WantInstanceMethods, WantKind, SelIdents,
4845                    CurContext, Selectors, AllowSameLength, Results, false);
4846 
4847   // Add methods in categories.
4848   for (auto *CatDecl : IFace->known_categories()) {
4849     AddObjCMethods(CatDecl, WantInstanceMethods, WantKind, SelIdents,
4850                    CurContext, Selectors, AllowSameLength,
4851                    Results, InOriginalClass);
4852 
4853     // Add a categories protocol methods.
4854     const ObjCList<ObjCProtocolDecl> &Protocols
4855       = CatDecl->getReferencedProtocols();
4856     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
4857                                               E = Protocols.end();
4858          I != E; ++I)
4859       AddObjCMethods(*I, WantInstanceMethods, WantKind, SelIdents,
4860                      CurContext, Selectors, AllowSameLength,
4861                      Results, false);
4862 
4863     // Add methods in category implementations.
4864     if (ObjCCategoryImplDecl *Impl = CatDecl->getImplementation())
4865       AddObjCMethods(Impl, WantInstanceMethods, WantKind, SelIdents,
4866                      CurContext, Selectors, AllowSameLength,
4867                      Results, InOriginalClass);
4868   }
4869 
4870   // Add methods in superclass.
4871   if (IFace->getSuperClass())
4872     AddObjCMethods(IFace->getSuperClass(), WantInstanceMethods, WantKind,
4873                    SelIdents, CurContext, Selectors,
4874                    AllowSameLength, Results, false);
4875 
4876   // Add methods in our implementation, if any.
4877   if (ObjCImplementationDecl *Impl = IFace->getImplementation())
4878     AddObjCMethods(Impl, WantInstanceMethods, WantKind, SelIdents,
4879                    CurContext, Selectors, AllowSameLength,
4880                    Results, InOriginalClass);
4881 }
4882 
4883 
4884 void Sema::CodeCompleteObjCPropertyGetter(Scope *S) {
4885   // Try to find the interface where getters might live.
4886   ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurContext);
4887   if (!Class) {
4888     if (ObjCCategoryDecl *Category
4889           = dyn_cast_or_null<ObjCCategoryDecl>(CurContext))
4890       Class = Category->getClassInterface();
4891 
4892     if (!Class)
4893       return;
4894   }
4895 
4896   // Find all of the potential getters.
4897   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4898                         CodeCompleter->getCodeCompletionTUInfo(),
4899                         CodeCompletionContext::CCC_Other);
4900   Results.EnterNewScope();
4901 
4902   VisitedSelectorSet Selectors;
4903   AddObjCMethods(Class, true, MK_ZeroArgSelector, None, CurContext, Selectors,
4904                  /*AllowSameLength=*/true, Results);
4905   Results.ExitScope();
4906   HandleCodeCompleteResults(this, CodeCompleter,
4907                             CodeCompletionContext::CCC_Other,
4908                             Results.data(),Results.size());
4909 }
4910 
4911 void Sema::CodeCompleteObjCPropertySetter(Scope *S) {
4912   // Try to find the interface where setters might live.
4913   ObjCInterfaceDecl *Class
4914     = dyn_cast_or_null<ObjCInterfaceDecl>(CurContext);
4915   if (!Class) {
4916     if (ObjCCategoryDecl *Category
4917           = dyn_cast_or_null<ObjCCategoryDecl>(CurContext))
4918       Class = Category->getClassInterface();
4919 
4920     if (!Class)
4921       return;
4922   }
4923 
4924   // Find all of the potential getters.
4925   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4926                         CodeCompleter->getCodeCompletionTUInfo(),
4927                         CodeCompletionContext::CCC_Other);
4928   Results.EnterNewScope();
4929 
4930   VisitedSelectorSet Selectors;
4931   AddObjCMethods(Class, true, MK_OneArgSelector, None, CurContext,
4932                  Selectors, /*AllowSameLength=*/true, Results);
4933 
4934   Results.ExitScope();
4935   HandleCodeCompleteResults(this, CodeCompleter,
4936                             CodeCompletionContext::CCC_Other,
4937                             Results.data(),Results.size());
4938 }
4939 
4940 void Sema::CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
4941                                        bool IsParameter) {
4942   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
4943                         CodeCompleter->getCodeCompletionTUInfo(),
4944                         CodeCompletionContext::CCC_Type);
4945   Results.EnterNewScope();
4946 
4947   // Add context-sensitive, Objective-C parameter-passing keywords.
4948   bool AddedInOut = false;
4949   if ((DS.getObjCDeclQualifier() &
4950        (ObjCDeclSpec::DQ_In | ObjCDeclSpec::DQ_Inout)) == 0) {
4951     Results.AddResult("in");
4952     Results.AddResult("inout");
4953     AddedInOut = true;
4954   }
4955   if ((DS.getObjCDeclQualifier() &
4956        (ObjCDeclSpec::DQ_Out | ObjCDeclSpec::DQ_Inout)) == 0) {
4957     Results.AddResult("out");
4958     if (!AddedInOut)
4959       Results.AddResult("inout");
4960   }
4961   if ((DS.getObjCDeclQualifier() &
4962        (ObjCDeclSpec::DQ_Bycopy | ObjCDeclSpec::DQ_Byref |
4963         ObjCDeclSpec::DQ_Oneway)) == 0) {
4964      Results.AddResult("bycopy");
4965      Results.AddResult("byref");
4966      Results.AddResult("oneway");
4967   }
4968 
4969   // If we're completing the return type of an Objective-C method and the
4970   // identifier IBAction refers to a macro, provide a completion item for
4971   // an action, e.g.,
4972   //   IBAction)<#selector#>:(id)sender
4973   if (DS.getObjCDeclQualifier() == 0 && !IsParameter &&
4974       Context.Idents.get("IBAction").hasMacroDefinition()) {
4975     CodeCompletionBuilder Builder(Results.getAllocator(),
4976                                   Results.getCodeCompletionTUInfo(),
4977                                   CCP_CodePattern, CXAvailability_Available);
4978     Builder.AddTypedTextChunk("IBAction");
4979     Builder.AddChunk(CodeCompletionString::CK_RightParen);
4980     Builder.AddPlaceholderChunk("selector");
4981     Builder.AddChunk(CodeCompletionString::CK_Colon);
4982     Builder.AddChunk(CodeCompletionString::CK_LeftParen);
4983     Builder.AddTextChunk("id");
4984     Builder.AddChunk(CodeCompletionString::CK_RightParen);
4985     Builder.AddTextChunk("sender");
4986     Results.AddResult(CodeCompletionResult(Builder.TakeString()));
4987   }
4988 
4989   // If we're completing the return type, provide 'instancetype'.
4990   if (!IsParameter) {
4991     Results.AddResult(CodeCompletionResult("instancetype"));
4992   }
4993 
4994   // Add various builtin type names and specifiers.
4995   AddOrdinaryNameResults(PCC_Type, S, *this, Results);
4996   Results.ExitScope();
4997 
4998   // Add the various type names
4999   Results.setFilter(&ResultBuilder::IsOrdinaryNonValueName);
5000   CodeCompletionDeclConsumer Consumer(Results, CurContext);
5001   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
5002                      CodeCompleter->includeGlobals());
5003 
5004   if (CodeCompleter->includeMacros())
5005     AddMacroResults(PP, Results, false);
5006 
5007   HandleCodeCompleteResults(this, CodeCompleter,
5008                             CodeCompletionContext::CCC_Type,
5009                             Results.data(), Results.size());
5010 }
5011 
5012 /// \brief When we have an expression with type "id", we may assume
5013 /// that it has some more-specific class type based on knowledge of
5014 /// common uses of Objective-C. This routine returns that class type,
5015 /// or NULL if no better result could be determined.
5016 static ObjCInterfaceDecl *GetAssumedMessageSendExprType(Expr *E) {
5017   ObjCMessageExpr *Msg = dyn_cast_or_null<ObjCMessageExpr>(E);
5018   if (!Msg)
5019     return 0;
5020 
5021   Selector Sel = Msg->getSelector();
5022   if (Sel.isNull())
5023     return 0;
5024 
5025   IdentifierInfo *Id = Sel.getIdentifierInfoForSlot(0);
5026   if (!Id)
5027     return 0;
5028 
5029   ObjCMethodDecl *Method = Msg->getMethodDecl();
5030   if (!Method)
5031     return 0;
5032 
5033   // Determine the class that we're sending the message to.
5034   ObjCInterfaceDecl *IFace = 0;
5035   switch (Msg->getReceiverKind()) {
5036   case ObjCMessageExpr::Class:
5037     if (const ObjCObjectType *ObjType
5038                            = Msg->getClassReceiver()->getAs<ObjCObjectType>())
5039       IFace = ObjType->getInterface();
5040     break;
5041 
5042   case ObjCMessageExpr::Instance: {
5043     QualType T = Msg->getInstanceReceiver()->getType();
5044     if (const ObjCObjectPointerType *Ptr = T->getAs<ObjCObjectPointerType>())
5045       IFace = Ptr->getInterfaceDecl();
5046     break;
5047   }
5048 
5049   case ObjCMessageExpr::SuperInstance:
5050   case ObjCMessageExpr::SuperClass:
5051     break;
5052   }
5053 
5054   if (!IFace)
5055     return 0;
5056 
5057   ObjCInterfaceDecl *Super = IFace->getSuperClass();
5058   if (Method->isInstanceMethod())
5059     return llvm::StringSwitch<ObjCInterfaceDecl *>(Id->getName())
5060       .Case("retain", IFace)
5061       .Case("strong", IFace)
5062       .Case("autorelease", IFace)
5063       .Case("copy", IFace)
5064       .Case("copyWithZone", IFace)
5065       .Case("mutableCopy", IFace)
5066       .Case("mutableCopyWithZone", IFace)
5067       .Case("awakeFromCoder", IFace)
5068       .Case("replacementObjectFromCoder", IFace)
5069       .Case("class", IFace)
5070       .Case("classForCoder", IFace)
5071       .Case("superclass", Super)
5072       .Default(0);
5073 
5074   return llvm::StringSwitch<ObjCInterfaceDecl *>(Id->getName())
5075     .Case("new", IFace)
5076     .Case("alloc", IFace)
5077     .Case("allocWithZone", IFace)
5078     .Case("class", IFace)
5079     .Case("superclass", Super)
5080     .Default(0);
5081 }
5082 
5083 // Add a special completion for a message send to "super", which fills in the
5084 // most likely case of forwarding all of our arguments to the superclass
5085 // function.
5086 ///
5087 /// \param S The semantic analysis object.
5088 ///
5089 /// \param NeedSuperKeyword Whether we need to prefix this completion with
5090 /// the "super" keyword. Otherwise, we just need to provide the arguments.
5091 ///
5092 /// \param SelIdents The identifiers in the selector that have already been
5093 /// provided as arguments for a send to "super".
5094 ///
5095 /// \param Results The set of results to augment.
5096 ///
5097 /// \returns the Objective-C method declaration that would be invoked by
5098 /// this "super" completion. If NULL, no completion was added.
5099 static ObjCMethodDecl *AddSuperSendCompletion(
5100                                           Sema &S, bool NeedSuperKeyword,
5101                                           ArrayRef<IdentifierInfo *> SelIdents,
5102                                           ResultBuilder &Results) {
5103   ObjCMethodDecl *CurMethod = S.getCurMethodDecl();
5104   if (!CurMethod)
5105     return 0;
5106 
5107   ObjCInterfaceDecl *Class = CurMethod->getClassInterface();
5108   if (!Class)
5109     return 0;
5110 
5111   // Try to find a superclass method with the same selector.
5112   ObjCMethodDecl *SuperMethod = 0;
5113   while ((Class = Class->getSuperClass()) && !SuperMethod) {
5114     // Check in the class
5115     SuperMethod = Class->getMethod(CurMethod->getSelector(),
5116                                    CurMethod->isInstanceMethod());
5117 
5118     // Check in categories or class extensions.
5119     if (!SuperMethod) {
5120       for (const auto *Cat : Class->known_categories()) {
5121         if ((SuperMethod = Cat->getMethod(CurMethod->getSelector(),
5122                                                CurMethod->isInstanceMethod())))
5123           break;
5124       }
5125     }
5126   }
5127 
5128   if (!SuperMethod)
5129     return 0;
5130 
5131   // Check whether the superclass method has the same signature.
5132   if (CurMethod->param_size() != SuperMethod->param_size() ||
5133       CurMethod->isVariadic() != SuperMethod->isVariadic())
5134     return 0;
5135 
5136   for (ObjCMethodDecl::param_iterator CurP = CurMethod->param_begin(),
5137                                    CurPEnd = CurMethod->param_end(),
5138                                     SuperP = SuperMethod->param_begin();
5139        CurP != CurPEnd; ++CurP, ++SuperP) {
5140     // Make sure the parameter types are compatible.
5141     if (!S.Context.hasSameUnqualifiedType((*CurP)->getType(),
5142                                           (*SuperP)->getType()))
5143       return 0;
5144 
5145     // Make sure we have a parameter name to forward!
5146     if (!(*CurP)->getIdentifier())
5147       return 0;
5148   }
5149 
5150   // We have a superclass method. Now, form the send-to-super completion.
5151   CodeCompletionBuilder Builder(Results.getAllocator(),
5152                                 Results.getCodeCompletionTUInfo());
5153 
5154   // Give this completion a return type.
5155   AddResultTypeChunk(S.Context, getCompletionPrintingPolicy(S), SuperMethod,
5156                      Builder);
5157 
5158   // If we need the "super" keyword, add it (plus some spacing).
5159   if (NeedSuperKeyword) {
5160     Builder.AddTypedTextChunk("super");
5161     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
5162   }
5163 
5164   Selector Sel = CurMethod->getSelector();
5165   if (Sel.isUnarySelector()) {
5166     if (NeedSuperKeyword)
5167       Builder.AddTextChunk(Builder.getAllocator().CopyString(
5168                                   Sel.getNameForSlot(0)));
5169     else
5170       Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
5171                                    Sel.getNameForSlot(0)));
5172   } else {
5173     ObjCMethodDecl::param_iterator CurP = CurMethod->param_begin();
5174     for (unsigned I = 0, N = Sel.getNumArgs(); I != N; ++I, ++CurP) {
5175       if (I > SelIdents.size())
5176         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
5177 
5178       if (I < SelIdents.size())
5179         Builder.AddInformativeChunk(
5180                    Builder.getAllocator().CopyString(
5181                                                  Sel.getNameForSlot(I) + ":"));
5182       else if (NeedSuperKeyword || I > SelIdents.size()) {
5183         Builder.AddTextChunk(
5184                  Builder.getAllocator().CopyString(
5185                                                   Sel.getNameForSlot(I) + ":"));
5186         Builder.AddPlaceholderChunk(Builder.getAllocator().CopyString(
5187                                          (*CurP)->getIdentifier()->getName()));
5188       } else {
5189         Builder.AddTypedTextChunk(
5190                   Builder.getAllocator().CopyString(
5191                                                   Sel.getNameForSlot(I) + ":"));
5192         Builder.AddPlaceholderChunk(Builder.getAllocator().CopyString(
5193                                          (*CurP)->getIdentifier()->getName()));
5194       }
5195     }
5196   }
5197 
5198   Results.AddResult(CodeCompletionResult(Builder.TakeString(), SuperMethod,
5199                                          CCP_SuperCompletion));
5200   return SuperMethod;
5201 }
5202 
5203 void Sema::CodeCompleteObjCMessageReceiver(Scope *S) {
5204   typedef CodeCompletionResult Result;
5205   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5206                         CodeCompleter->getCodeCompletionTUInfo(),
5207                         CodeCompletionContext::CCC_ObjCMessageReceiver,
5208                         getLangOpts().CPlusPlus11
5209                           ? &ResultBuilder::IsObjCMessageReceiverOrLambdaCapture
5210                           : &ResultBuilder::IsObjCMessageReceiver);
5211 
5212   CodeCompletionDeclConsumer Consumer(Results, CurContext);
5213   Results.EnterNewScope();
5214   LookupVisibleDecls(S, LookupOrdinaryName, Consumer,
5215                      CodeCompleter->includeGlobals());
5216 
5217   // If we are in an Objective-C method inside a class that has a superclass,
5218   // add "super" as an option.
5219   if (ObjCMethodDecl *Method = getCurMethodDecl())
5220     if (ObjCInterfaceDecl *Iface = Method->getClassInterface())
5221       if (Iface->getSuperClass()) {
5222         Results.AddResult(Result("super"));
5223 
5224         AddSuperSendCompletion(*this, /*NeedSuperKeyword=*/true, None, Results);
5225       }
5226 
5227   if (getLangOpts().CPlusPlus11)
5228     addThisCompletion(*this, Results);
5229 
5230   Results.ExitScope();
5231 
5232   if (CodeCompleter->includeMacros())
5233     AddMacroResults(PP, Results, false);
5234   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
5235                             Results.data(), Results.size());
5236 
5237 }
5238 
5239 void Sema::CodeCompleteObjCSuperMessage(Scope *S, SourceLocation SuperLoc,
5240                                         ArrayRef<IdentifierInfo *> SelIdents,
5241                                         bool AtArgumentExpression) {
5242   ObjCInterfaceDecl *CDecl = 0;
5243   if (ObjCMethodDecl *CurMethod = getCurMethodDecl()) {
5244     // Figure out which interface we're in.
5245     CDecl = CurMethod->getClassInterface();
5246     if (!CDecl)
5247       return;
5248 
5249     // Find the superclass of this class.
5250     CDecl = CDecl->getSuperClass();
5251     if (!CDecl)
5252       return;
5253 
5254     if (CurMethod->isInstanceMethod()) {
5255       // We are inside an instance method, which means that the message
5256       // send [super ...] is actually calling an instance method on the
5257       // current object.
5258       return CodeCompleteObjCInstanceMessage(S, 0, SelIdents,
5259                                              AtArgumentExpression,
5260                                              CDecl);
5261     }
5262 
5263     // Fall through to send to the superclass in CDecl.
5264   } else {
5265     // "super" may be the name of a type or variable. Figure out which
5266     // it is.
5267     IdentifierInfo *Super = getSuperIdentifier();
5268     NamedDecl *ND = LookupSingleName(S, Super, SuperLoc,
5269                                      LookupOrdinaryName);
5270     if ((CDecl = dyn_cast_or_null<ObjCInterfaceDecl>(ND))) {
5271       // "super" names an interface. Use it.
5272     } else if (TypeDecl *TD = dyn_cast_or_null<TypeDecl>(ND)) {
5273       if (const ObjCObjectType *Iface
5274             = Context.getTypeDeclType(TD)->getAs<ObjCObjectType>())
5275         CDecl = Iface->getInterface();
5276     } else if (ND && isa<UnresolvedUsingTypenameDecl>(ND)) {
5277       // "super" names an unresolved type; we can't be more specific.
5278     } else {
5279       // Assume that "super" names some kind of value and parse that way.
5280       CXXScopeSpec SS;
5281       SourceLocation TemplateKWLoc;
5282       UnqualifiedId id;
5283       id.setIdentifier(Super, SuperLoc);
5284       ExprResult SuperExpr = ActOnIdExpression(S, SS, TemplateKWLoc, id,
5285                                                false, false);
5286       return CodeCompleteObjCInstanceMessage(S, (Expr *)SuperExpr.get(),
5287                                              SelIdents,
5288                                              AtArgumentExpression);
5289     }
5290 
5291     // Fall through
5292   }
5293 
5294   ParsedType Receiver;
5295   if (CDecl)
5296     Receiver = ParsedType::make(Context.getObjCInterfaceType(CDecl));
5297   return CodeCompleteObjCClassMessage(S, Receiver, SelIdents,
5298                                       AtArgumentExpression,
5299                                       /*IsSuper=*/true);
5300 }
5301 
5302 /// \brief Given a set of code-completion results for the argument of a message
5303 /// send, determine the preferred type (if any) for that argument expression.
5304 static QualType getPreferredArgumentTypeForMessageSend(ResultBuilder &Results,
5305                                                        unsigned NumSelIdents) {
5306   typedef CodeCompletionResult Result;
5307   ASTContext &Context = Results.getSema().Context;
5308 
5309   QualType PreferredType;
5310   unsigned BestPriority = CCP_Unlikely * 2;
5311   Result *ResultsData = Results.data();
5312   for (unsigned I = 0, N = Results.size(); I != N; ++I) {
5313     Result &R = ResultsData[I];
5314     if (R.Kind == Result::RK_Declaration &&
5315         isa<ObjCMethodDecl>(R.Declaration)) {
5316       if (R.Priority <= BestPriority) {
5317         const ObjCMethodDecl *Method = cast<ObjCMethodDecl>(R.Declaration);
5318         if (NumSelIdents <= Method->param_size()) {
5319           QualType MyPreferredType = Method->param_begin()[NumSelIdents - 1]
5320                                        ->getType();
5321           if (R.Priority < BestPriority || PreferredType.isNull()) {
5322             BestPriority = R.Priority;
5323             PreferredType = MyPreferredType;
5324           } else if (!Context.hasSameUnqualifiedType(PreferredType,
5325                                                      MyPreferredType)) {
5326             PreferredType = QualType();
5327           }
5328         }
5329       }
5330     }
5331   }
5332 
5333   return PreferredType;
5334 }
5335 
5336 static void AddClassMessageCompletions(Sema &SemaRef, Scope *S,
5337                                        ParsedType Receiver,
5338                                        ArrayRef<IdentifierInfo *> SelIdents,
5339                                        bool AtArgumentExpression,
5340                                        bool IsSuper,
5341                                        ResultBuilder &Results) {
5342   typedef CodeCompletionResult Result;
5343   ObjCInterfaceDecl *CDecl = 0;
5344 
5345   // If the given name refers to an interface type, retrieve the
5346   // corresponding declaration.
5347   if (Receiver) {
5348     QualType T = SemaRef.GetTypeFromParser(Receiver, 0);
5349     if (!T.isNull())
5350       if (const ObjCObjectType *Interface = T->getAs<ObjCObjectType>())
5351         CDecl = Interface->getInterface();
5352   }
5353 
5354   // Add all of the factory methods in this Objective-C class, its protocols,
5355   // superclasses, categories, implementation, etc.
5356   Results.EnterNewScope();
5357 
5358   // If this is a send-to-super, try to add the special "super" send
5359   // completion.
5360   if (IsSuper) {
5361     if (ObjCMethodDecl *SuperMethod
5362         = AddSuperSendCompletion(SemaRef, false, SelIdents, Results))
5363       Results.Ignore(SuperMethod);
5364   }
5365 
5366   // If we're inside an Objective-C method definition, prefer its selector to
5367   // others.
5368   if (ObjCMethodDecl *CurMethod = SemaRef.getCurMethodDecl())
5369     Results.setPreferredSelector(CurMethod->getSelector());
5370 
5371   VisitedSelectorSet Selectors;
5372   if (CDecl)
5373     AddObjCMethods(CDecl, false, MK_Any, SelIdents,
5374                    SemaRef.CurContext, Selectors, AtArgumentExpression,
5375                    Results);
5376   else {
5377     // We're messaging "id" as a type; provide all class/factory methods.
5378 
5379     // If we have an external source, load the entire class method
5380     // pool from the AST file.
5381     if (SemaRef.getExternalSource()) {
5382       for (uint32_t I = 0,
5383                     N = SemaRef.getExternalSource()->GetNumExternalSelectors();
5384            I != N; ++I) {
5385         Selector Sel = SemaRef.getExternalSource()->GetExternalSelector(I);
5386         if (Sel.isNull() || SemaRef.MethodPool.count(Sel))
5387           continue;
5388 
5389         SemaRef.ReadMethodPool(Sel);
5390       }
5391     }
5392 
5393     for (Sema::GlobalMethodPool::iterator M = SemaRef.MethodPool.begin(),
5394                                        MEnd = SemaRef.MethodPool.end();
5395          M != MEnd; ++M) {
5396       for (ObjCMethodList *MethList = &M->second.second;
5397            MethList && MethList->Method;
5398            MethList = MethList->getNext()) {
5399         if (!isAcceptableObjCMethod(MethList->Method, MK_Any, SelIdents))
5400           continue;
5401 
5402         Result R(MethList->Method, Results.getBasePriority(MethList->Method),0);
5403         R.StartParameter = SelIdents.size();
5404         R.AllParametersAreInformative = false;
5405         Results.MaybeAddResult(R, SemaRef.CurContext);
5406       }
5407     }
5408   }
5409 
5410   Results.ExitScope();
5411 }
5412 
5413 void Sema::CodeCompleteObjCClassMessage(Scope *S, ParsedType Receiver,
5414                                         ArrayRef<IdentifierInfo *> SelIdents,
5415                                         bool AtArgumentExpression,
5416                                         bool IsSuper) {
5417 
5418   QualType T = this->GetTypeFromParser(Receiver);
5419 
5420   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5421                         CodeCompleter->getCodeCompletionTUInfo(),
5422               CodeCompletionContext(CodeCompletionContext::CCC_ObjCClassMessage,
5423                                     T, SelIdents));
5424 
5425   AddClassMessageCompletions(*this, S, Receiver, SelIdents,
5426                              AtArgumentExpression, IsSuper, Results);
5427 
5428   // If we're actually at the argument expression (rather than prior to the
5429   // selector), we're actually performing code completion for an expression.
5430   // Determine whether we have a single, best method. If so, we can
5431   // code-complete the expression using the corresponding parameter type as
5432   // our preferred type, improving completion results.
5433   if (AtArgumentExpression) {
5434     QualType PreferredType = getPreferredArgumentTypeForMessageSend(Results,
5435                                                               SelIdents.size());
5436     if (PreferredType.isNull())
5437       CodeCompleteOrdinaryName(S, PCC_Expression);
5438     else
5439       CodeCompleteExpression(S, PreferredType);
5440     return;
5441   }
5442 
5443   HandleCodeCompleteResults(this, CodeCompleter,
5444                             Results.getCompletionContext(),
5445                             Results.data(), Results.size());
5446 }
5447 
5448 void Sema::CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver,
5449                                            ArrayRef<IdentifierInfo *> SelIdents,
5450                                            bool AtArgumentExpression,
5451                                            ObjCInterfaceDecl *Super) {
5452   typedef CodeCompletionResult Result;
5453 
5454   Expr *RecExpr = static_cast<Expr *>(Receiver);
5455 
5456   // If necessary, apply function/array conversion to the receiver.
5457   // C99 6.7.5.3p[7,8].
5458   if (RecExpr) {
5459     ExprResult Conv = DefaultFunctionArrayLvalueConversion(RecExpr);
5460     if (Conv.isInvalid()) // conversion failed. bail.
5461       return;
5462     RecExpr = Conv.take();
5463   }
5464   QualType ReceiverType = RecExpr? RecExpr->getType()
5465                           : Super? Context.getObjCObjectPointerType(
5466                                             Context.getObjCInterfaceType(Super))
5467                                  : Context.getObjCIdType();
5468 
5469   // If we're messaging an expression with type "id" or "Class", check
5470   // whether we know something special about the receiver that allows
5471   // us to assume a more-specific receiver type.
5472   if (ReceiverType->isObjCIdType() || ReceiverType->isObjCClassType()) {
5473     if (ObjCInterfaceDecl *IFace = GetAssumedMessageSendExprType(RecExpr)) {
5474       if (ReceiverType->isObjCClassType())
5475         return CodeCompleteObjCClassMessage(S,
5476                        ParsedType::make(Context.getObjCInterfaceType(IFace)),
5477                                             SelIdents,
5478                                             AtArgumentExpression, Super);
5479 
5480       ReceiverType = Context.getObjCObjectPointerType(
5481                                           Context.getObjCInterfaceType(IFace));
5482     }
5483   } else if (RecExpr && getLangOpts().CPlusPlus) {
5484     ExprResult Conv = PerformContextuallyConvertToObjCPointer(RecExpr);
5485     if (Conv.isUsable()) {
5486       RecExpr = Conv.take();
5487       ReceiverType = RecExpr->getType();
5488     }
5489   }
5490 
5491   // Build the set of methods we can see.
5492   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5493                         CodeCompleter->getCodeCompletionTUInfo(),
5494            CodeCompletionContext(CodeCompletionContext::CCC_ObjCInstanceMessage,
5495                                  ReceiverType, SelIdents));
5496 
5497   Results.EnterNewScope();
5498 
5499   // If this is a send-to-super, try to add the special "super" send
5500   // completion.
5501   if (Super) {
5502     if (ObjCMethodDecl *SuperMethod
5503           = AddSuperSendCompletion(*this, false, SelIdents, Results))
5504       Results.Ignore(SuperMethod);
5505   }
5506 
5507   // If we're inside an Objective-C method definition, prefer its selector to
5508   // others.
5509   if (ObjCMethodDecl *CurMethod = getCurMethodDecl())
5510     Results.setPreferredSelector(CurMethod->getSelector());
5511 
5512   // Keep track of the selectors we've already added.
5513   VisitedSelectorSet Selectors;
5514 
5515   // Handle messages to Class. This really isn't a message to an instance
5516   // method, so we treat it the same way we would treat a message send to a
5517   // class method.
5518   if (ReceiverType->isObjCClassType() ||
5519       ReceiverType->isObjCQualifiedClassType()) {
5520     if (ObjCMethodDecl *CurMethod = getCurMethodDecl()) {
5521       if (ObjCInterfaceDecl *ClassDecl = CurMethod->getClassInterface())
5522         AddObjCMethods(ClassDecl, false, MK_Any, SelIdents,
5523                        CurContext, Selectors, AtArgumentExpression, Results);
5524     }
5525   }
5526   // Handle messages to a qualified ID ("id<foo>").
5527   else if (const ObjCObjectPointerType *QualID
5528              = ReceiverType->getAsObjCQualifiedIdType()) {
5529     // Search protocols for instance methods.
5530     for (auto *I : QualID->quals())
5531       AddObjCMethods(I, true, MK_Any, SelIdents, CurContext,
5532                      Selectors, AtArgumentExpression, Results);
5533   }
5534   // Handle messages to a pointer to interface type.
5535   else if (const ObjCObjectPointerType *IFacePtr
5536                               = ReceiverType->getAsObjCInterfacePointerType()) {
5537     // Search the class, its superclasses, etc., for instance methods.
5538     AddObjCMethods(IFacePtr->getInterfaceDecl(), true, MK_Any, SelIdents,
5539                    CurContext, Selectors, AtArgumentExpression,
5540                    Results);
5541 
5542     // Search protocols for instance methods.
5543     for (auto *I : IFacePtr->quals())
5544       AddObjCMethods(I, true, MK_Any, SelIdents, CurContext,
5545                      Selectors, AtArgumentExpression, Results);
5546   }
5547   // Handle messages to "id".
5548   else if (ReceiverType->isObjCIdType()) {
5549     // We're messaging "id", so provide all instance methods we know
5550     // about as code-completion results.
5551 
5552     // If we have an external source, load the entire class method
5553     // pool from the AST file.
5554     if (ExternalSource) {
5555       for (uint32_t I = 0, N = ExternalSource->GetNumExternalSelectors();
5556            I != N; ++I) {
5557         Selector Sel = ExternalSource->GetExternalSelector(I);
5558         if (Sel.isNull() || MethodPool.count(Sel))
5559           continue;
5560 
5561         ReadMethodPool(Sel);
5562       }
5563     }
5564 
5565     for (GlobalMethodPool::iterator M = MethodPool.begin(),
5566                                     MEnd = MethodPool.end();
5567          M != MEnd; ++M) {
5568       for (ObjCMethodList *MethList = &M->second.first;
5569            MethList && MethList->Method;
5570            MethList = MethList->getNext()) {
5571         if (!isAcceptableObjCMethod(MethList->Method, MK_Any, SelIdents))
5572           continue;
5573 
5574         if (!Selectors.insert(MethList->Method->getSelector()))
5575           continue;
5576 
5577         Result R(MethList->Method, Results.getBasePriority(MethList->Method),0);
5578         R.StartParameter = SelIdents.size();
5579         R.AllParametersAreInformative = false;
5580         Results.MaybeAddResult(R, CurContext);
5581       }
5582     }
5583   }
5584   Results.ExitScope();
5585 
5586 
5587   // If we're actually at the argument expression (rather than prior to the
5588   // selector), we're actually performing code completion for an expression.
5589   // Determine whether we have a single, best method. If so, we can
5590   // code-complete the expression using the corresponding parameter type as
5591   // our preferred type, improving completion results.
5592   if (AtArgumentExpression) {
5593     QualType PreferredType = getPreferredArgumentTypeForMessageSend(Results,
5594                                                               SelIdents.size());
5595     if (PreferredType.isNull())
5596       CodeCompleteOrdinaryName(S, PCC_Expression);
5597     else
5598       CodeCompleteExpression(S, PreferredType);
5599     return;
5600   }
5601 
5602   HandleCodeCompleteResults(this, CodeCompleter,
5603                             Results.getCompletionContext(),
5604                             Results.data(),Results.size());
5605 }
5606 
5607 void Sema::CodeCompleteObjCForCollection(Scope *S,
5608                                          DeclGroupPtrTy IterationVar) {
5609   CodeCompleteExpressionData Data;
5610   Data.ObjCCollection = true;
5611 
5612   if (IterationVar.getAsOpaquePtr()) {
5613     DeclGroupRef DG = IterationVar.get();
5614     for (DeclGroupRef::iterator I = DG.begin(), End = DG.end(); I != End; ++I) {
5615       if (*I)
5616         Data.IgnoreDecls.push_back(*I);
5617     }
5618   }
5619 
5620   CodeCompleteExpression(S, Data);
5621 }
5622 
5623 void Sema::CodeCompleteObjCSelector(Scope *S,
5624                                     ArrayRef<IdentifierInfo *> SelIdents) {
5625   // If we have an external source, load the entire class method
5626   // pool from the AST file.
5627   if (ExternalSource) {
5628     for (uint32_t I = 0, N = ExternalSource->GetNumExternalSelectors();
5629          I != N; ++I) {
5630       Selector Sel = ExternalSource->GetExternalSelector(I);
5631       if (Sel.isNull() || MethodPool.count(Sel))
5632         continue;
5633 
5634       ReadMethodPool(Sel);
5635     }
5636   }
5637 
5638   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5639                         CodeCompleter->getCodeCompletionTUInfo(),
5640                         CodeCompletionContext::CCC_SelectorName);
5641   Results.EnterNewScope();
5642   for (GlobalMethodPool::iterator M = MethodPool.begin(),
5643                                MEnd = MethodPool.end();
5644        M != MEnd; ++M) {
5645 
5646     Selector Sel = M->first;
5647     if (!isAcceptableObjCSelector(Sel, MK_Any, SelIdents))
5648       continue;
5649 
5650     CodeCompletionBuilder Builder(Results.getAllocator(),
5651                                   Results.getCodeCompletionTUInfo());
5652     if (Sel.isUnarySelector()) {
5653       Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
5654                                                        Sel.getNameForSlot(0)));
5655       Results.AddResult(Builder.TakeString());
5656       continue;
5657     }
5658 
5659     std::string Accumulator;
5660     for (unsigned I = 0, N = Sel.getNumArgs(); I != N; ++I) {
5661       if (I == SelIdents.size()) {
5662         if (!Accumulator.empty()) {
5663           Builder.AddInformativeChunk(Builder.getAllocator().CopyString(
5664                                                  Accumulator));
5665           Accumulator.clear();
5666         }
5667       }
5668 
5669       Accumulator += Sel.getNameForSlot(I);
5670       Accumulator += ':';
5671     }
5672     Builder.AddTypedTextChunk(Builder.getAllocator().CopyString( Accumulator));
5673     Results.AddResult(Builder.TakeString());
5674   }
5675   Results.ExitScope();
5676 
5677   HandleCodeCompleteResults(this, CodeCompleter,
5678                             CodeCompletionContext::CCC_SelectorName,
5679                             Results.data(), Results.size());
5680 }
5681 
5682 /// \brief Add all of the protocol declarations that we find in the given
5683 /// (translation unit) context.
5684 static void AddProtocolResults(DeclContext *Ctx, DeclContext *CurContext,
5685                                bool OnlyForwardDeclarations,
5686                                ResultBuilder &Results) {
5687   typedef CodeCompletionResult Result;
5688 
5689   for (const auto *D : Ctx->decls()) {
5690     // Record any protocols we find.
5691     if (const auto *Proto = dyn_cast<ObjCProtocolDecl>(D))
5692       if (!OnlyForwardDeclarations || !Proto->hasDefinition())
5693         Results.AddResult(Result(Proto, Results.getBasePriority(Proto), 0),
5694                           CurContext, 0, false);
5695   }
5696 }
5697 
5698 void Sema::CodeCompleteObjCProtocolReferences(IdentifierLocPair *Protocols,
5699                                               unsigned NumProtocols) {
5700   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5701                         CodeCompleter->getCodeCompletionTUInfo(),
5702                         CodeCompletionContext::CCC_ObjCProtocolName);
5703 
5704   if (CodeCompleter && CodeCompleter->includeGlobals()) {
5705     Results.EnterNewScope();
5706 
5707     // Tell the result set to ignore all of the protocols we have
5708     // already seen.
5709     // FIXME: This doesn't work when caching code-completion results.
5710     for (unsigned I = 0; I != NumProtocols; ++I)
5711       if (ObjCProtocolDecl *Protocol = LookupProtocol(Protocols[I].first,
5712                                                       Protocols[I].second))
5713         Results.Ignore(Protocol);
5714 
5715     // Add all protocols.
5716     AddProtocolResults(Context.getTranslationUnitDecl(), CurContext, false,
5717                        Results);
5718 
5719     Results.ExitScope();
5720   }
5721 
5722   HandleCodeCompleteResults(this, CodeCompleter,
5723                             CodeCompletionContext::CCC_ObjCProtocolName,
5724                             Results.data(),Results.size());
5725 }
5726 
5727 void Sema::CodeCompleteObjCProtocolDecl(Scope *) {
5728   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5729                         CodeCompleter->getCodeCompletionTUInfo(),
5730                         CodeCompletionContext::CCC_ObjCProtocolName);
5731 
5732   if (CodeCompleter && CodeCompleter->includeGlobals()) {
5733     Results.EnterNewScope();
5734 
5735     // Add all protocols.
5736     AddProtocolResults(Context.getTranslationUnitDecl(), CurContext, true,
5737                        Results);
5738 
5739     Results.ExitScope();
5740   }
5741 
5742   HandleCodeCompleteResults(this, CodeCompleter,
5743                             CodeCompletionContext::CCC_ObjCProtocolName,
5744                             Results.data(),Results.size());
5745 }
5746 
5747 /// \brief Add all of the Objective-C interface declarations that we find in
5748 /// the given (translation unit) context.
5749 static void AddInterfaceResults(DeclContext *Ctx, DeclContext *CurContext,
5750                                 bool OnlyForwardDeclarations,
5751                                 bool OnlyUnimplemented,
5752                                 ResultBuilder &Results) {
5753   typedef CodeCompletionResult Result;
5754 
5755   for (const auto *D : Ctx->decls()) {
5756     // Record any interfaces we find.
5757     if (const auto *Class = dyn_cast<ObjCInterfaceDecl>(D))
5758       if ((!OnlyForwardDeclarations || !Class->hasDefinition()) &&
5759           (!OnlyUnimplemented || !Class->getImplementation()))
5760         Results.AddResult(Result(Class, Results.getBasePriority(Class), 0),
5761                           CurContext, 0, false);
5762   }
5763 }
5764 
5765 void Sema::CodeCompleteObjCInterfaceDecl(Scope *S) {
5766   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5767                         CodeCompleter->getCodeCompletionTUInfo(),
5768                         CodeCompletionContext::CCC_Other);
5769   Results.EnterNewScope();
5770 
5771   if (CodeCompleter->includeGlobals()) {
5772     // Add all classes.
5773     AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
5774                         false, Results);
5775   }
5776 
5777   Results.ExitScope();
5778 
5779   HandleCodeCompleteResults(this, CodeCompleter,
5780                             CodeCompletionContext::CCC_ObjCInterfaceName,
5781                             Results.data(),Results.size());
5782 }
5783 
5784 void Sema::CodeCompleteObjCSuperclass(Scope *S, IdentifierInfo *ClassName,
5785                                       SourceLocation ClassNameLoc) {
5786   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5787                         CodeCompleter->getCodeCompletionTUInfo(),
5788                         CodeCompletionContext::CCC_ObjCInterfaceName);
5789   Results.EnterNewScope();
5790 
5791   // Make sure that we ignore the class we're currently defining.
5792   NamedDecl *CurClass
5793     = LookupSingleName(TUScope, ClassName, ClassNameLoc, LookupOrdinaryName);
5794   if (CurClass && isa<ObjCInterfaceDecl>(CurClass))
5795     Results.Ignore(CurClass);
5796 
5797   if (CodeCompleter->includeGlobals()) {
5798     // Add all classes.
5799     AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
5800                         false, Results);
5801   }
5802 
5803   Results.ExitScope();
5804 
5805   HandleCodeCompleteResults(this, CodeCompleter,
5806                             CodeCompletionContext::CCC_ObjCInterfaceName,
5807                             Results.data(),Results.size());
5808 }
5809 
5810 void Sema::CodeCompleteObjCImplementationDecl(Scope *S) {
5811   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5812                         CodeCompleter->getCodeCompletionTUInfo(),
5813                         CodeCompletionContext::CCC_Other);
5814   Results.EnterNewScope();
5815 
5816   if (CodeCompleter->includeGlobals()) {
5817     // Add all unimplemented classes.
5818     AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
5819                         true, Results);
5820   }
5821 
5822   Results.ExitScope();
5823 
5824   HandleCodeCompleteResults(this, CodeCompleter,
5825                             CodeCompletionContext::CCC_ObjCInterfaceName,
5826                             Results.data(),Results.size());
5827 }
5828 
5829 void Sema::CodeCompleteObjCInterfaceCategory(Scope *S,
5830                                              IdentifierInfo *ClassName,
5831                                              SourceLocation ClassNameLoc) {
5832   typedef CodeCompletionResult Result;
5833 
5834   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5835                         CodeCompleter->getCodeCompletionTUInfo(),
5836                         CodeCompletionContext::CCC_ObjCCategoryName);
5837 
5838   // Ignore any categories we find that have already been implemented by this
5839   // interface.
5840   llvm::SmallPtrSet<IdentifierInfo *, 16> CategoryNames;
5841   NamedDecl *CurClass
5842     = LookupSingleName(TUScope, ClassName, ClassNameLoc, LookupOrdinaryName);
5843   if (ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurClass)){
5844     for (const auto *Cat : Class->visible_categories())
5845       CategoryNames.insert(Cat->getIdentifier());
5846   }
5847 
5848   // Add all of the categories we know about.
5849   Results.EnterNewScope();
5850   TranslationUnitDecl *TU = Context.getTranslationUnitDecl();
5851   for (const auto *D : TU->decls())
5852     if (const auto *Category = dyn_cast<ObjCCategoryDecl>(D))
5853       if (CategoryNames.insert(Category->getIdentifier()))
5854         Results.AddResult(Result(Category, Results.getBasePriority(Category),0),
5855                           CurContext, 0, false);
5856   Results.ExitScope();
5857 
5858   HandleCodeCompleteResults(this, CodeCompleter,
5859                             CodeCompletionContext::CCC_ObjCCategoryName,
5860                             Results.data(),Results.size());
5861 }
5862 
5863 void Sema::CodeCompleteObjCImplementationCategory(Scope *S,
5864                                                   IdentifierInfo *ClassName,
5865                                                   SourceLocation ClassNameLoc) {
5866   typedef CodeCompletionResult Result;
5867 
5868   // Find the corresponding interface. If we couldn't find the interface, the
5869   // program itself is ill-formed. However, we'll try to be helpful still by
5870   // providing the list of all of the categories we know about.
5871   NamedDecl *CurClass
5872     = LookupSingleName(TUScope, ClassName, ClassNameLoc, LookupOrdinaryName);
5873   ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurClass);
5874   if (!Class)
5875     return CodeCompleteObjCInterfaceCategory(S, ClassName, ClassNameLoc);
5876 
5877   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5878                         CodeCompleter->getCodeCompletionTUInfo(),
5879                         CodeCompletionContext::CCC_ObjCCategoryName);
5880 
5881   // Add all of the categories that have have corresponding interface
5882   // declarations in this class and any of its superclasses, except for
5883   // already-implemented categories in the class itself.
5884   llvm::SmallPtrSet<IdentifierInfo *, 16> CategoryNames;
5885   Results.EnterNewScope();
5886   bool IgnoreImplemented = true;
5887   while (Class) {
5888     for (const auto *Cat : Class->visible_categories()) {
5889       if ((!IgnoreImplemented || !Cat->getImplementation()) &&
5890           CategoryNames.insert(Cat->getIdentifier()))
5891         Results.AddResult(Result(Cat, Results.getBasePriority(Cat), 0),
5892                           CurContext, 0, false);
5893     }
5894 
5895     Class = Class->getSuperClass();
5896     IgnoreImplemented = false;
5897   }
5898   Results.ExitScope();
5899 
5900   HandleCodeCompleteResults(this, CodeCompleter,
5901                             CodeCompletionContext::CCC_ObjCCategoryName,
5902                             Results.data(),Results.size());
5903 }
5904 
5905 void Sema::CodeCompleteObjCPropertyDefinition(Scope *S) {
5906   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5907                         CodeCompleter->getCodeCompletionTUInfo(),
5908                         CodeCompletionContext::CCC_Other);
5909 
5910   // Figure out where this @synthesize lives.
5911   ObjCContainerDecl *Container
5912     = dyn_cast_or_null<ObjCContainerDecl>(CurContext);
5913   if (!Container ||
5914       (!isa<ObjCImplementationDecl>(Container) &&
5915        !isa<ObjCCategoryImplDecl>(Container)))
5916     return;
5917 
5918   // Ignore any properties that have already been implemented.
5919   Container = getContainerDef(Container);
5920   for (const auto *D : Container->decls())
5921     if (const auto *PropertyImpl = dyn_cast<ObjCPropertyImplDecl>(D))
5922       Results.Ignore(PropertyImpl->getPropertyDecl());
5923 
5924   // Add any properties that we find.
5925   AddedPropertiesSet AddedProperties;
5926   Results.EnterNewScope();
5927   if (ObjCImplementationDecl *ClassImpl
5928         = dyn_cast<ObjCImplementationDecl>(Container))
5929     AddObjCProperties(ClassImpl->getClassInterface(), false,
5930                       /*AllowNullaryMethods=*/false, CurContext,
5931                       AddedProperties, Results);
5932   else
5933     AddObjCProperties(cast<ObjCCategoryImplDecl>(Container)->getCategoryDecl(),
5934                       false, /*AllowNullaryMethods=*/false, CurContext,
5935                       AddedProperties, Results);
5936   Results.ExitScope();
5937 
5938   HandleCodeCompleteResults(this, CodeCompleter,
5939                             CodeCompletionContext::CCC_Other,
5940                             Results.data(),Results.size());
5941 }
5942 
5943 void Sema::CodeCompleteObjCPropertySynthesizeIvar(Scope *S,
5944                                                   IdentifierInfo *PropertyName) {
5945   typedef CodeCompletionResult Result;
5946   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
5947                         CodeCompleter->getCodeCompletionTUInfo(),
5948                         CodeCompletionContext::CCC_Other);
5949 
5950   // Figure out where this @synthesize lives.
5951   ObjCContainerDecl *Container
5952     = dyn_cast_or_null<ObjCContainerDecl>(CurContext);
5953   if (!Container ||
5954       (!isa<ObjCImplementationDecl>(Container) &&
5955        !isa<ObjCCategoryImplDecl>(Container)))
5956     return;
5957 
5958   // Figure out which interface we're looking into.
5959   ObjCInterfaceDecl *Class = 0;
5960   if (ObjCImplementationDecl *ClassImpl
5961                                  = dyn_cast<ObjCImplementationDecl>(Container))
5962     Class = ClassImpl->getClassInterface();
5963   else
5964     Class = cast<ObjCCategoryImplDecl>(Container)->getCategoryDecl()
5965                                                           ->getClassInterface();
5966 
5967   // Determine the type of the property we're synthesizing.
5968   QualType PropertyType = Context.getObjCIdType();
5969   if (Class) {
5970     if (ObjCPropertyDecl *Property
5971                               = Class->FindPropertyDeclaration(PropertyName)) {
5972       PropertyType
5973         = Property->getType().getNonReferenceType().getUnqualifiedType();
5974 
5975       // Give preference to ivars
5976       Results.setPreferredType(PropertyType);
5977     }
5978   }
5979 
5980   // Add all of the instance variables in this class and its superclasses.
5981   Results.EnterNewScope();
5982   bool SawSimilarlyNamedIvar = false;
5983   std::string NameWithPrefix;
5984   NameWithPrefix += '_';
5985   NameWithPrefix += PropertyName->getName();
5986   std::string NameWithSuffix = PropertyName->getName().str();
5987   NameWithSuffix += '_';
5988   for(; Class; Class = Class->getSuperClass()) {
5989     for (ObjCIvarDecl *Ivar = Class->all_declared_ivar_begin(); Ivar;
5990          Ivar = Ivar->getNextIvar()) {
5991       Results.AddResult(Result(Ivar, Results.getBasePriority(Ivar), 0),
5992                         CurContext, 0, false);
5993 
5994       // Determine whether we've seen an ivar with a name similar to the
5995       // property.
5996       if ((PropertyName == Ivar->getIdentifier() ||
5997            NameWithPrefix == Ivar->getName() ||
5998            NameWithSuffix == Ivar->getName())) {
5999         SawSimilarlyNamedIvar = true;
6000 
6001         // Reduce the priority of this result by one, to give it a slight
6002         // advantage over other results whose names don't match so closely.
6003         if (Results.size() &&
6004             Results.data()[Results.size() - 1].Kind
6005                                       == CodeCompletionResult::RK_Declaration &&
6006             Results.data()[Results.size() - 1].Declaration == Ivar)
6007           Results.data()[Results.size() - 1].Priority--;
6008       }
6009     }
6010   }
6011 
6012   if (!SawSimilarlyNamedIvar) {
6013     // Create ivar result _propName, that the user can use to synthesize
6014     // an ivar of the appropriate type.
6015     unsigned Priority = CCP_MemberDeclaration + 1;
6016     typedef CodeCompletionResult Result;
6017     CodeCompletionAllocator &Allocator = Results.getAllocator();
6018     CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo(),
6019                                   Priority,CXAvailability_Available);
6020 
6021     PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
6022     Builder.AddResultTypeChunk(GetCompletionTypeString(PropertyType, Context,
6023                                                        Policy, Allocator));
6024     Builder.AddTypedTextChunk(Allocator.CopyString(NameWithPrefix));
6025     Results.AddResult(Result(Builder.TakeString(), Priority,
6026                              CXCursor_ObjCIvarDecl));
6027   }
6028 
6029   Results.ExitScope();
6030 
6031   HandleCodeCompleteResults(this, CodeCompleter,
6032                             CodeCompletionContext::CCC_Other,
6033                             Results.data(),Results.size());
6034 }
6035 
6036 // Mapping from selectors to the methods that implement that selector, along
6037 // with the "in original class" flag.
6038 typedef llvm::DenseMap<
6039     Selector, llvm::PointerIntPair<ObjCMethodDecl *, 1, bool> > KnownMethodsMap;
6040 
6041 /// \brief Find all of the methods that reside in the given container
6042 /// (and its superclasses, protocols, etc.) that meet the given
6043 /// criteria. Insert those methods into the map of known methods,
6044 /// indexed by selector so they can be easily found.
6045 static void FindImplementableMethods(ASTContext &Context,
6046                                      ObjCContainerDecl *Container,
6047                                      bool WantInstanceMethods,
6048                                      QualType ReturnType,
6049                                      KnownMethodsMap &KnownMethods,
6050                                      bool InOriginalClass = true) {
6051   if (ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container)) {
6052     // Make sure we have a definition; that's what we'll walk.
6053     if (!IFace->hasDefinition())
6054       return;
6055 
6056     IFace = IFace->getDefinition();
6057     Container = IFace;
6058 
6059     const ObjCList<ObjCProtocolDecl> &Protocols
6060       = IFace->getReferencedProtocols();
6061     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
6062                                               E = Protocols.end();
6063          I != E; ++I)
6064       FindImplementableMethods(Context, *I, WantInstanceMethods, ReturnType,
6065                                KnownMethods, InOriginalClass);
6066 
6067     // Add methods from any class extensions and categories.
6068     for (auto *Cat : IFace->visible_categories()) {
6069       FindImplementableMethods(Context, Cat, WantInstanceMethods, ReturnType,
6070                                KnownMethods, false);
6071     }
6072 
6073     // Visit the superclass.
6074     if (IFace->getSuperClass())
6075       FindImplementableMethods(Context, IFace->getSuperClass(),
6076                                WantInstanceMethods, ReturnType,
6077                                KnownMethods, false);
6078   }
6079 
6080   if (ObjCCategoryDecl *Category = dyn_cast<ObjCCategoryDecl>(Container)) {
6081     // Recurse into protocols.
6082     const ObjCList<ObjCProtocolDecl> &Protocols
6083       = Category->getReferencedProtocols();
6084     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
6085                                               E = Protocols.end();
6086          I != E; ++I)
6087       FindImplementableMethods(Context, *I, WantInstanceMethods, ReturnType,
6088                                KnownMethods, InOriginalClass);
6089 
6090     // If this category is the original class, jump to the interface.
6091     if (InOriginalClass && Category->getClassInterface())
6092       FindImplementableMethods(Context, Category->getClassInterface(),
6093                                WantInstanceMethods, ReturnType, KnownMethods,
6094                                false);
6095   }
6096 
6097   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
6098     // Make sure we have a definition; that's what we'll walk.
6099     if (!Protocol->hasDefinition())
6100       return;
6101     Protocol = Protocol->getDefinition();
6102     Container = Protocol;
6103 
6104     // Recurse into protocols.
6105     const ObjCList<ObjCProtocolDecl> &Protocols
6106       = Protocol->getReferencedProtocols();
6107     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
6108            E = Protocols.end();
6109          I != E; ++I)
6110       FindImplementableMethods(Context, *I, WantInstanceMethods, ReturnType,
6111                                KnownMethods, false);
6112   }
6113 
6114   // Add methods in this container. This operation occurs last because
6115   // we want the methods from this container to override any methods
6116   // we've previously seen with the same selector.
6117   for (auto *M : Container->methods()) {
6118     if (M->isInstanceMethod() == WantInstanceMethods) {
6119       if (!ReturnType.isNull() &&
6120           !Context.hasSameUnqualifiedType(ReturnType, M->getReturnType()))
6121         continue;
6122 
6123       KnownMethods[M->getSelector()] =
6124           KnownMethodsMap::mapped_type(M, InOriginalClass);
6125     }
6126   }
6127 }
6128 
6129 /// \brief Add the parenthesized return or parameter type chunk to a code
6130 /// completion string.
6131 static void AddObjCPassingTypeChunk(QualType Type,
6132                                     unsigned ObjCDeclQuals,
6133                                     ASTContext &Context,
6134                                     const PrintingPolicy &Policy,
6135                                     CodeCompletionBuilder &Builder) {
6136   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6137   std::string Quals = formatObjCParamQualifiers(ObjCDeclQuals);
6138   if (!Quals.empty())
6139     Builder.AddTextChunk(Builder.getAllocator().CopyString(Quals));
6140   Builder.AddTextChunk(GetCompletionTypeString(Type, Context, Policy,
6141                                                Builder.getAllocator()));
6142   Builder.AddChunk(CodeCompletionString::CK_RightParen);
6143 }
6144 
6145 /// \brief Determine whether the given class is or inherits from a class by
6146 /// the given name.
6147 static bool InheritsFromClassNamed(ObjCInterfaceDecl *Class,
6148                                    StringRef Name) {
6149   if (!Class)
6150     return false;
6151 
6152   if (Class->getIdentifier() && Class->getIdentifier()->getName() == Name)
6153     return true;
6154 
6155   return InheritsFromClassNamed(Class->getSuperClass(), Name);
6156 }
6157 
6158 /// \brief Add code completions for Objective-C Key-Value Coding (KVC) and
6159 /// Key-Value Observing (KVO).
6160 static void AddObjCKeyValueCompletions(ObjCPropertyDecl *Property,
6161                                        bool IsInstanceMethod,
6162                                        QualType ReturnType,
6163                                        ASTContext &Context,
6164                                        VisitedSelectorSet &KnownSelectors,
6165                                        ResultBuilder &Results) {
6166   IdentifierInfo *PropName = Property->getIdentifier();
6167   if (!PropName || PropName->getLength() == 0)
6168     return;
6169 
6170   PrintingPolicy Policy = getCompletionPrintingPolicy(Results.getSema());
6171 
6172   // Builder that will create each code completion.
6173   typedef CodeCompletionResult Result;
6174   CodeCompletionAllocator &Allocator = Results.getAllocator();
6175   CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
6176 
6177   // The selector table.
6178   SelectorTable &Selectors = Context.Selectors;
6179 
6180   // The property name, copied into the code completion allocation region
6181   // on demand.
6182   struct KeyHolder {
6183     CodeCompletionAllocator &Allocator;
6184     StringRef Key;
6185     const char *CopiedKey;
6186 
6187     KeyHolder(CodeCompletionAllocator &Allocator, StringRef Key)
6188     : Allocator(Allocator), Key(Key), CopiedKey(0) { }
6189 
6190     operator const char *() {
6191       if (CopiedKey)
6192         return CopiedKey;
6193 
6194       return CopiedKey = Allocator.CopyString(Key);
6195     }
6196   } Key(Allocator, PropName->getName());
6197 
6198   // The uppercased name of the property name.
6199   std::string UpperKey = PropName->getName();
6200   if (!UpperKey.empty())
6201     UpperKey[0] = toUppercase(UpperKey[0]);
6202 
6203   bool ReturnTypeMatchesProperty = ReturnType.isNull() ||
6204     Context.hasSameUnqualifiedType(ReturnType.getNonReferenceType(),
6205                                    Property->getType());
6206   bool ReturnTypeMatchesVoid
6207     = ReturnType.isNull() || ReturnType->isVoidType();
6208 
6209   // Add the normal accessor -(type)key.
6210   if (IsInstanceMethod &&
6211       KnownSelectors.insert(Selectors.getNullarySelector(PropName)) &&
6212       ReturnTypeMatchesProperty && !Property->getGetterMethodDecl()) {
6213     if (ReturnType.isNull())
6214       AddObjCPassingTypeChunk(Property->getType(), /*Quals=*/0,
6215                               Context, Policy, Builder);
6216 
6217     Builder.AddTypedTextChunk(Key);
6218     Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
6219                              CXCursor_ObjCInstanceMethodDecl));
6220   }
6221 
6222   // If we have an integral or boolean property (or the user has provided
6223   // an integral or boolean return type), add the accessor -(type)isKey.
6224   if (IsInstanceMethod &&
6225       ((!ReturnType.isNull() &&
6226         (ReturnType->isIntegerType() || ReturnType->isBooleanType())) ||
6227        (ReturnType.isNull() &&
6228         (Property->getType()->isIntegerType() ||
6229          Property->getType()->isBooleanType())))) {
6230     std::string SelectorName = (Twine("is") + UpperKey).str();
6231     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6232     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))) {
6233       if (ReturnType.isNull()) {
6234         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6235         Builder.AddTextChunk("BOOL");
6236         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6237       }
6238 
6239       Builder.AddTypedTextChunk(
6240                                 Allocator.CopyString(SelectorId->getName()));
6241       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
6242                                CXCursor_ObjCInstanceMethodDecl));
6243     }
6244   }
6245 
6246   // Add the normal mutator.
6247   if (IsInstanceMethod && ReturnTypeMatchesVoid &&
6248       !Property->getSetterMethodDecl()) {
6249     std::string SelectorName = (Twine("set") + UpperKey).str();
6250     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6251     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6252       if (ReturnType.isNull()) {
6253         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6254         Builder.AddTextChunk("void");
6255         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6256       }
6257 
6258       Builder.AddTypedTextChunk(
6259                                 Allocator.CopyString(SelectorId->getName()));
6260       Builder.AddTypedTextChunk(":");
6261       AddObjCPassingTypeChunk(Property->getType(), /*Quals=*/0,
6262                               Context, Policy, Builder);
6263       Builder.AddTextChunk(Key);
6264       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
6265                                CXCursor_ObjCInstanceMethodDecl));
6266     }
6267   }
6268 
6269   // Indexed and unordered accessors
6270   unsigned IndexedGetterPriority = CCP_CodePattern;
6271   unsigned IndexedSetterPriority = CCP_CodePattern;
6272   unsigned UnorderedGetterPriority = CCP_CodePattern;
6273   unsigned UnorderedSetterPriority = CCP_CodePattern;
6274   if (const ObjCObjectPointerType *ObjCPointer
6275                     = Property->getType()->getAs<ObjCObjectPointerType>()) {
6276     if (ObjCInterfaceDecl *IFace = ObjCPointer->getInterfaceDecl()) {
6277       // If this interface type is not provably derived from a known
6278       // collection, penalize the corresponding completions.
6279       if (!InheritsFromClassNamed(IFace, "NSMutableArray")) {
6280         IndexedSetterPriority += CCD_ProbablyNotObjCCollection;
6281         if (!InheritsFromClassNamed(IFace, "NSArray"))
6282           IndexedGetterPriority += CCD_ProbablyNotObjCCollection;
6283       }
6284 
6285       if (!InheritsFromClassNamed(IFace, "NSMutableSet")) {
6286         UnorderedSetterPriority += CCD_ProbablyNotObjCCollection;
6287         if (!InheritsFromClassNamed(IFace, "NSSet"))
6288           UnorderedGetterPriority += CCD_ProbablyNotObjCCollection;
6289       }
6290     }
6291   } else {
6292     IndexedGetterPriority += CCD_ProbablyNotObjCCollection;
6293     IndexedSetterPriority += CCD_ProbablyNotObjCCollection;
6294     UnorderedGetterPriority += CCD_ProbablyNotObjCCollection;
6295     UnorderedSetterPriority += CCD_ProbablyNotObjCCollection;
6296   }
6297 
6298   // Add -(NSUInteger)countOf<key>
6299   if (IsInstanceMethod &&
6300       (ReturnType.isNull() || ReturnType->isIntegerType())) {
6301     std::string SelectorName = (Twine("countOf") + UpperKey).str();
6302     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6303     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))) {
6304       if (ReturnType.isNull()) {
6305         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6306         Builder.AddTextChunk("NSUInteger");
6307         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6308       }
6309 
6310       Builder.AddTypedTextChunk(
6311                                 Allocator.CopyString(SelectorId->getName()));
6312       Results.AddResult(Result(Builder.TakeString(),
6313                                std::min(IndexedGetterPriority,
6314                                         UnorderedGetterPriority),
6315                                CXCursor_ObjCInstanceMethodDecl));
6316     }
6317   }
6318 
6319   // Indexed getters
6320   // Add -(id)objectInKeyAtIndex:(NSUInteger)index
6321   if (IsInstanceMethod &&
6322       (ReturnType.isNull() || ReturnType->isObjCObjectPointerType())) {
6323     std::string SelectorName
6324       = (Twine("objectIn") + UpperKey + "AtIndex").str();
6325     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6326     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6327       if (ReturnType.isNull()) {
6328         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6329         Builder.AddTextChunk("id");
6330         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6331       }
6332 
6333       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6334       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6335       Builder.AddTextChunk("NSUInteger");
6336       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6337       Builder.AddTextChunk("index");
6338       Results.AddResult(Result(Builder.TakeString(), IndexedGetterPriority,
6339                                CXCursor_ObjCInstanceMethodDecl));
6340     }
6341   }
6342 
6343   // Add -(NSArray *)keyAtIndexes:(NSIndexSet *)indexes
6344   if (IsInstanceMethod &&
6345       (ReturnType.isNull() ||
6346        (ReturnType->isObjCObjectPointerType() &&
6347         ReturnType->getAs<ObjCObjectPointerType>()->getInterfaceDecl() &&
6348         ReturnType->getAs<ObjCObjectPointerType>()->getInterfaceDecl()
6349                                                 ->getName() == "NSArray"))) {
6350     std::string SelectorName
6351       = (Twine(Property->getName()) + "AtIndexes").str();
6352     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6353     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6354       if (ReturnType.isNull()) {
6355         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6356         Builder.AddTextChunk("NSArray *");
6357         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6358       }
6359 
6360       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6361       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6362       Builder.AddTextChunk("NSIndexSet *");
6363       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6364       Builder.AddTextChunk("indexes");
6365       Results.AddResult(Result(Builder.TakeString(), IndexedGetterPriority,
6366                                CXCursor_ObjCInstanceMethodDecl));
6367     }
6368   }
6369 
6370   // Add -(void)getKey:(type **)buffer range:(NSRange)inRange
6371   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6372     std::string SelectorName = (Twine("get") + UpperKey).str();
6373     IdentifierInfo *SelectorIds[2] = {
6374       &Context.Idents.get(SelectorName),
6375       &Context.Idents.get("range")
6376     };
6377 
6378     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds))) {
6379       if (ReturnType.isNull()) {
6380         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6381         Builder.AddTextChunk("void");
6382         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6383       }
6384 
6385       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6386       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6387       Builder.AddPlaceholderChunk("object-type");
6388       Builder.AddTextChunk(" **");
6389       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6390       Builder.AddTextChunk("buffer");
6391       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6392       Builder.AddTypedTextChunk("range:");
6393       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6394       Builder.AddTextChunk("NSRange");
6395       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6396       Builder.AddTextChunk("inRange");
6397       Results.AddResult(Result(Builder.TakeString(), IndexedGetterPriority,
6398                                CXCursor_ObjCInstanceMethodDecl));
6399     }
6400   }
6401 
6402   // Mutable indexed accessors
6403 
6404   // - (void)insertObject:(type *)object inKeyAtIndex:(NSUInteger)index
6405   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6406     std::string SelectorName = (Twine("in") + UpperKey + "AtIndex").str();
6407     IdentifierInfo *SelectorIds[2] = {
6408       &Context.Idents.get("insertObject"),
6409       &Context.Idents.get(SelectorName)
6410     };
6411 
6412     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds))) {
6413       if (ReturnType.isNull()) {
6414         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6415         Builder.AddTextChunk("void");
6416         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6417       }
6418 
6419       Builder.AddTypedTextChunk("insertObject:");
6420       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6421       Builder.AddPlaceholderChunk("object-type");
6422       Builder.AddTextChunk(" *");
6423       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6424       Builder.AddTextChunk("object");
6425       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6426       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6427       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6428       Builder.AddPlaceholderChunk("NSUInteger");
6429       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6430       Builder.AddTextChunk("index");
6431       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
6432                                CXCursor_ObjCInstanceMethodDecl));
6433     }
6434   }
6435 
6436   // - (void)insertKey:(NSArray *)array atIndexes:(NSIndexSet *)indexes
6437   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6438     std::string SelectorName = (Twine("insert") + UpperKey).str();
6439     IdentifierInfo *SelectorIds[2] = {
6440       &Context.Idents.get(SelectorName),
6441       &Context.Idents.get("atIndexes")
6442     };
6443 
6444     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds))) {
6445       if (ReturnType.isNull()) {
6446         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6447         Builder.AddTextChunk("void");
6448         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6449       }
6450 
6451       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6452       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6453       Builder.AddTextChunk("NSArray *");
6454       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6455       Builder.AddTextChunk("array");
6456       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6457       Builder.AddTypedTextChunk("atIndexes:");
6458       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6459       Builder.AddPlaceholderChunk("NSIndexSet *");
6460       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6461       Builder.AddTextChunk("indexes");
6462       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
6463                                CXCursor_ObjCInstanceMethodDecl));
6464     }
6465   }
6466 
6467   // -(void)removeObjectFromKeyAtIndex:(NSUInteger)index
6468   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6469     std::string SelectorName
6470       = (Twine("removeObjectFrom") + UpperKey + "AtIndex").str();
6471     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6472     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6473       if (ReturnType.isNull()) {
6474         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6475         Builder.AddTextChunk("void");
6476         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6477       }
6478 
6479       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6480       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6481       Builder.AddTextChunk("NSUInteger");
6482       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6483       Builder.AddTextChunk("index");
6484       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
6485                                CXCursor_ObjCInstanceMethodDecl));
6486     }
6487   }
6488 
6489   // -(void)removeKeyAtIndexes:(NSIndexSet *)indexes
6490   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6491     std::string SelectorName
6492       = (Twine("remove") + UpperKey + "AtIndexes").str();
6493     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6494     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6495       if (ReturnType.isNull()) {
6496         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6497         Builder.AddTextChunk("void");
6498         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6499       }
6500 
6501       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6502       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6503       Builder.AddTextChunk("NSIndexSet *");
6504       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6505       Builder.AddTextChunk("indexes");
6506       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
6507                                CXCursor_ObjCInstanceMethodDecl));
6508     }
6509   }
6510 
6511   // - (void)replaceObjectInKeyAtIndex:(NSUInteger)index withObject:(id)object
6512   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6513     std::string SelectorName
6514       = (Twine("replaceObjectIn") + UpperKey + "AtIndex").str();
6515     IdentifierInfo *SelectorIds[2] = {
6516       &Context.Idents.get(SelectorName),
6517       &Context.Idents.get("withObject")
6518     };
6519 
6520     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds))) {
6521       if (ReturnType.isNull()) {
6522         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6523         Builder.AddTextChunk("void");
6524         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6525       }
6526 
6527       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6528       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6529       Builder.AddPlaceholderChunk("NSUInteger");
6530       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6531       Builder.AddTextChunk("index");
6532       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6533       Builder.AddTypedTextChunk("withObject:");
6534       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6535       Builder.AddTextChunk("id");
6536       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6537       Builder.AddTextChunk("object");
6538       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
6539                                CXCursor_ObjCInstanceMethodDecl));
6540     }
6541   }
6542 
6543   // - (void)replaceKeyAtIndexes:(NSIndexSet *)indexes withKey:(NSArray *)array
6544   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6545     std::string SelectorName1
6546       = (Twine("replace") + UpperKey + "AtIndexes").str();
6547     std::string SelectorName2 = (Twine("with") + UpperKey).str();
6548     IdentifierInfo *SelectorIds[2] = {
6549       &Context.Idents.get(SelectorName1),
6550       &Context.Idents.get(SelectorName2)
6551     };
6552 
6553     if (KnownSelectors.insert(Selectors.getSelector(2, SelectorIds))) {
6554       if (ReturnType.isNull()) {
6555         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6556         Builder.AddTextChunk("void");
6557         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6558       }
6559 
6560       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName1 + ":"));
6561       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6562       Builder.AddPlaceholderChunk("NSIndexSet *");
6563       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6564       Builder.AddTextChunk("indexes");
6565       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6566       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName2 + ":"));
6567       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6568       Builder.AddTextChunk("NSArray *");
6569       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6570       Builder.AddTextChunk("array");
6571       Results.AddResult(Result(Builder.TakeString(), IndexedSetterPriority,
6572                                CXCursor_ObjCInstanceMethodDecl));
6573     }
6574   }
6575 
6576   // Unordered getters
6577   // - (NSEnumerator *)enumeratorOfKey
6578   if (IsInstanceMethod &&
6579       (ReturnType.isNull() ||
6580        (ReturnType->isObjCObjectPointerType() &&
6581         ReturnType->getAs<ObjCObjectPointerType>()->getInterfaceDecl() &&
6582         ReturnType->getAs<ObjCObjectPointerType>()->getInterfaceDecl()
6583           ->getName() == "NSEnumerator"))) {
6584     std::string SelectorName = (Twine("enumeratorOf") + UpperKey).str();
6585     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6586     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))) {
6587       if (ReturnType.isNull()) {
6588         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6589         Builder.AddTextChunk("NSEnumerator *");
6590         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6591       }
6592 
6593       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName));
6594       Results.AddResult(Result(Builder.TakeString(), UnorderedGetterPriority,
6595                               CXCursor_ObjCInstanceMethodDecl));
6596     }
6597   }
6598 
6599   // - (type *)memberOfKey:(type *)object
6600   if (IsInstanceMethod &&
6601       (ReturnType.isNull() || ReturnType->isObjCObjectPointerType())) {
6602     std::string SelectorName = (Twine("memberOf") + UpperKey).str();
6603     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6604     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6605       if (ReturnType.isNull()) {
6606         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6607         Builder.AddPlaceholderChunk("object-type");
6608         Builder.AddTextChunk(" *");
6609         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6610       }
6611 
6612       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6613       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6614       if (ReturnType.isNull()) {
6615         Builder.AddPlaceholderChunk("object-type");
6616         Builder.AddTextChunk(" *");
6617       } else {
6618         Builder.AddTextChunk(GetCompletionTypeString(ReturnType, Context,
6619                                                      Policy,
6620                                                      Builder.getAllocator()));
6621       }
6622       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6623       Builder.AddTextChunk("object");
6624       Results.AddResult(Result(Builder.TakeString(), UnorderedGetterPriority,
6625                                CXCursor_ObjCInstanceMethodDecl));
6626     }
6627   }
6628 
6629   // Mutable unordered accessors
6630   // - (void)addKeyObject:(type *)object
6631   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6632     std::string SelectorName
6633       = (Twine("add") + UpperKey + Twine("Object")).str();
6634     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6635     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6636       if (ReturnType.isNull()) {
6637         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6638         Builder.AddTextChunk("void");
6639         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6640       }
6641 
6642       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6643       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6644       Builder.AddPlaceholderChunk("object-type");
6645       Builder.AddTextChunk(" *");
6646       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6647       Builder.AddTextChunk("object");
6648       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
6649                                CXCursor_ObjCInstanceMethodDecl));
6650     }
6651   }
6652 
6653   // - (void)addKey:(NSSet *)objects
6654   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6655     std::string SelectorName = (Twine("add") + UpperKey).str();
6656     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6657     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6658       if (ReturnType.isNull()) {
6659         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6660         Builder.AddTextChunk("void");
6661         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6662       }
6663 
6664       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6665       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6666       Builder.AddTextChunk("NSSet *");
6667       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6668       Builder.AddTextChunk("objects");
6669       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
6670                                CXCursor_ObjCInstanceMethodDecl));
6671     }
6672   }
6673 
6674   // - (void)removeKeyObject:(type *)object
6675   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6676     std::string SelectorName
6677       = (Twine("remove") + UpperKey + Twine("Object")).str();
6678     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6679     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6680       if (ReturnType.isNull()) {
6681         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6682         Builder.AddTextChunk("void");
6683         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6684       }
6685 
6686       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6687       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6688       Builder.AddPlaceholderChunk("object-type");
6689       Builder.AddTextChunk(" *");
6690       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6691       Builder.AddTextChunk("object");
6692       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
6693                                CXCursor_ObjCInstanceMethodDecl));
6694     }
6695   }
6696 
6697   // - (void)removeKey:(NSSet *)objects
6698   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6699     std::string SelectorName = (Twine("remove") + UpperKey).str();
6700     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6701     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6702       if (ReturnType.isNull()) {
6703         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6704         Builder.AddTextChunk("void");
6705         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6706       }
6707 
6708       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6709       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6710       Builder.AddTextChunk("NSSet *");
6711       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6712       Builder.AddTextChunk("objects");
6713       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
6714                                CXCursor_ObjCInstanceMethodDecl));
6715     }
6716   }
6717 
6718   // - (void)intersectKey:(NSSet *)objects
6719   if (IsInstanceMethod && ReturnTypeMatchesVoid) {
6720     std::string SelectorName = (Twine("intersect") + UpperKey).str();
6721     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6722     if (KnownSelectors.insert(Selectors.getUnarySelector(SelectorId))) {
6723       if (ReturnType.isNull()) {
6724         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6725         Builder.AddTextChunk("void");
6726         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6727       }
6728 
6729       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName + ":"));
6730       Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6731       Builder.AddTextChunk("NSSet *");
6732       Builder.AddChunk(CodeCompletionString::CK_RightParen);
6733       Builder.AddTextChunk("objects");
6734       Results.AddResult(Result(Builder.TakeString(), UnorderedSetterPriority,
6735                                CXCursor_ObjCInstanceMethodDecl));
6736     }
6737   }
6738 
6739   // Key-Value Observing
6740   // + (NSSet *)keyPathsForValuesAffectingKey
6741   if (!IsInstanceMethod &&
6742       (ReturnType.isNull() ||
6743        (ReturnType->isObjCObjectPointerType() &&
6744         ReturnType->getAs<ObjCObjectPointerType>()->getInterfaceDecl() &&
6745         ReturnType->getAs<ObjCObjectPointerType>()->getInterfaceDecl()
6746                                                     ->getName() == "NSSet"))) {
6747     std::string SelectorName
6748       = (Twine("keyPathsForValuesAffecting") + UpperKey).str();
6749     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6750     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))) {
6751       if (ReturnType.isNull()) {
6752         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6753         Builder.AddTextChunk("NSSet *");
6754         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6755       }
6756 
6757       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName));
6758       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
6759                               CXCursor_ObjCClassMethodDecl));
6760     }
6761   }
6762 
6763   // + (BOOL)automaticallyNotifiesObserversForKey
6764   if (!IsInstanceMethod &&
6765       (ReturnType.isNull() ||
6766        ReturnType->isIntegerType() ||
6767        ReturnType->isBooleanType())) {
6768     std::string SelectorName
6769       = (Twine("automaticallyNotifiesObserversOf") + UpperKey).str();
6770     IdentifierInfo *SelectorId = &Context.Idents.get(SelectorName);
6771     if (KnownSelectors.insert(Selectors.getNullarySelector(SelectorId))) {
6772       if (ReturnType.isNull()) {
6773         Builder.AddChunk(CodeCompletionString::CK_LeftParen);
6774         Builder.AddTextChunk("BOOL");
6775         Builder.AddChunk(CodeCompletionString::CK_RightParen);
6776       }
6777 
6778       Builder.AddTypedTextChunk(Allocator.CopyString(SelectorName));
6779       Results.AddResult(Result(Builder.TakeString(), CCP_CodePattern,
6780                               CXCursor_ObjCClassMethodDecl));
6781     }
6782   }
6783 }
6784 
6785 void Sema::CodeCompleteObjCMethodDecl(Scope *S,
6786                                       bool IsInstanceMethod,
6787                                       ParsedType ReturnTy) {
6788   // Determine the return type of the method we're declaring, if
6789   // provided.
6790   QualType ReturnType = GetTypeFromParser(ReturnTy);
6791   Decl *IDecl = 0;
6792   if (CurContext->isObjCContainer()) {
6793       ObjCContainerDecl *OCD = dyn_cast<ObjCContainerDecl>(CurContext);
6794       IDecl = cast<Decl>(OCD);
6795   }
6796   // Determine where we should start searching for methods.
6797   ObjCContainerDecl *SearchDecl = 0;
6798   bool IsInImplementation = false;
6799   if (Decl *D = IDecl) {
6800     if (ObjCImplementationDecl *Impl = dyn_cast<ObjCImplementationDecl>(D)) {
6801       SearchDecl = Impl->getClassInterface();
6802       IsInImplementation = true;
6803     } else if (ObjCCategoryImplDecl *CatImpl
6804                                          = dyn_cast<ObjCCategoryImplDecl>(D)) {
6805       SearchDecl = CatImpl->getCategoryDecl();
6806       IsInImplementation = true;
6807     } else
6808       SearchDecl = dyn_cast<ObjCContainerDecl>(D);
6809   }
6810 
6811   if (!SearchDecl && S) {
6812     if (DeclContext *DC = S->getEntity())
6813       SearchDecl = dyn_cast<ObjCContainerDecl>(DC);
6814   }
6815 
6816   if (!SearchDecl) {
6817     HandleCodeCompleteResults(this, CodeCompleter,
6818                               CodeCompletionContext::CCC_Other,
6819                               0, 0);
6820     return;
6821   }
6822 
6823   // Find all of the methods that we could declare/implement here.
6824   KnownMethodsMap KnownMethods;
6825   FindImplementableMethods(Context, SearchDecl, IsInstanceMethod,
6826                            ReturnType, KnownMethods);
6827 
6828   // Add declarations or definitions for each of the known methods.
6829   typedef CodeCompletionResult Result;
6830   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6831                         CodeCompleter->getCodeCompletionTUInfo(),
6832                         CodeCompletionContext::CCC_Other);
6833   Results.EnterNewScope();
6834   PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
6835   for (KnownMethodsMap::iterator M = KnownMethods.begin(),
6836                               MEnd = KnownMethods.end();
6837        M != MEnd; ++M) {
6838     ObjCMethodDecl *Method = M->second.getPointer();
6839     CodeCompletionBuilder Builder(Results.getAllocator(),
6840                                   Results.getCodeCompletionTUInfo());
6841 
6842     // If the result type was not already provided, add it to the
6843     // pattern as (type).
6844     if (ReturnType.isNull())
6845       AddObjCPassingTypeChunk(Method->getReturnType(),
6846                               Method->getObjCDeclQualifier(), Context, Policy,
6847                               Builder);
6848 
6849     Selector Sel = Method->getSelector();
6850 
6851     // Add the first part of the selector to the pattern.
6852     Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
6853                                                        Sel.getNameForSlot(0)));
6854 
6855     // Add parameters to the pattern.
6856     unsigned I = 0;
6857     for (ObjCMethodDecl::param_iterator P = Method->param_begin(),
6858                                      PEnd = Method->param_end();
6859          P != PEnd; (void)++P, ++I) {
6860       // Add the part of the selector name.
6861       if (I == 0)
6862         Builder.AddTypedTextChunk(":");
6863       else if (I < Sel.getNumArgs()) {
6864         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6865         Builder.AddTypedTextChunk(
6866                 Builder.getAllocator().CopyString(Sel.getNameForSlot(I) + ":"));
6867       } else
6868         break;
6869 
6870       // Add the parameter type.
6871       AddObjCPassingTypeChunk((*P)->getOriginalType(),
6872                               (*P)->getObjCDeclQualifier(),
6873                               Context, Policy,
6874                               Builder);
6875 
6876       if (IdentifierInfo *Id = (*P)->getIdentifier())
6877         Builder.AddTextChunk(Builder.getAllocator().CopyString( Id->getName()));
6878     }
6879 
6880     if (Method->isVariadic()) {
6881       if (Method->param_size() > 0)
6882         Builder.AddChunk(CodeCompletionString::CK_Comma);
6883       Builder.AddTextChunk("...");
6884     }
6885 
6886     if (IsInImplementation && Results.includeCodePatterns()) {
6887       // We will be defining the method here, so add a compound statement.
6888       Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6889       Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
6890       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
6891       if (!Method->getReturnType()->isVoidType()) {
6892         // If the result type is not void, add a return clause.
6893         Builder.AddTextChunk("return");
6894         Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
6895         Builder.AddPlaceholderChunk("expression");
6896         Builder.AddChunk(CodeCompletionString::CK_SemiColon);
6897       } else
6898         Builder.AddPlaceholderChunk("statements");
6899 
6900       Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
6901       Builder.AddChunk(CodeCompletionString::CK_RightBrace);
6902     }
6903 
6904     unsigned Priority = CCP_CodePattern;
6905     if (!M->second.getInt())
6906       Priority += CCD_InBaseClass;
6907 
6908     Results.AddResult(Result(Builder.TakeString(), Method, Priority));
6909   }
6910 
6911   // Add Key-Value-Coding and Key-Value-Observing accessor methods for all of
6912   // the properties in this class and its categories.
6913   if (Context.getLangOpts().ObjC2) {
6914     SmallVector<ObjCContainerDecl *, 4> Containers;
6915     Containers.push_back(SearchDecl);
6916 
6917     VisitedSelectorSet KnownSelectors;
6918     for (KnownMethodsMap::iterator M = KnownMethods.begin(),
6919                                 MEnd = KnownMethods.end();
6920          M != MEnd; ++M)
6921       KnownSelectors.insert(M->first);
6922 
6923 
6924     ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(SearchDecl);
6925     if (!IFace)
6926       if (ObjCCategoryDecl *Category = dyn_cast<ObjCCategoryDecl>(SearchDecl))
6927         IFace = Category->getClassInterface();
6928 
6929     if (IFace)
6930       for (auto *Cat : IFace->visible_categories())
6931         Containers.push_back(Cat);
6932 
6933     for (unsigned I = 0, N = Containers.size(); I != N; ++I)
6934       for (auto *P : Containers[I]->properties())
6935         AddObjCKeyValueCompletions(P, IsInstanceMethod, ReturnType, Context,
6936                                    KnownSelectors, Results);
6937   }
6938 
6939   Results.ExitScope();
6940 
6941   HandleCodeCompleteResults(this, CodeCompleter,
6942                             CodeCompletionContext::CCC_Other,
6943                             Results.data(),Results.size());
6944 }
6945 
6946 void Sema::CodeCompleteObjCMethodDeclSelector(Scope *S,
6947                                               bool IsInstanceMethod,
6948                                               bool AtParameterName,
6949                                               ParsedType ReturnTy,
6950                                          ArrayRef<IdentifierInfo *> SelIdents) {
6951   // If we have an external source, load the entire class method
6952   // pool from the AST file.
6953   if (ExternalSource) {
6954     for (uint32_t I = 0, N = ExternalSource->GetNumExternalSelectors();
6955          I != N; ++I) {
6956       Selector Sel = ExternalSource->GetExternalSelector(I);
6957       if (Sel.isNull() || MethodPool.count(Sel))
6958         continue;
6959 
6960       ReadMethodPool(Sel);
6961     }
6962   }
6963 
6964   // Build the set of methods we can see.
6965   typedef CodeCompletionResult Result;
6966   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
6967                         CodeCompleter->getCodeCompletionTUInfo(),
6968                         CodeCompletionContext::CCC_Other);
6969 
6970   if (ReturnTy)
6971     Results.setPreferredType(GetTypeFromParser(ReturnTy).getNonReferenceType());
6972 
6973   Results.EnterNewScope();
6974   for (GlobalMethodPool::iterator M = MethodPool.begin(),
6975                                   MEnd = MethodPool.end();
6976        M != MEnd; ++M) {
6977     for (ObjCMethodList *MethList = IsInstanceMethod ? &M->second.first :
6978                                                        &M->second.second;
6979          MethList && MethList->Method;
6980          MethList = MethList->getNext()) {
6981       if (!isAcceptableObjCMethod(MethList->Method, MK_Any, SelIdents))
6982         continue;
6983 
6984       if (AtParameterName) {
6985         // Suggest parameter names we've seen before.
6986         unsigned NumSelIdents = SelIdents.size();
6987         if (NumSelIdents && NumSelIdents <= MethList->Method->param_size()) {
6988           ParmVarDecl *Param = MethList->Method->param_begin()[NumSelIdents-1];
6989           if (Param->getIdentifier()) {
6990             CodeCompletionBuilder Builder(Results.getAllocator(),
6991                                           Results.getCodeCompletionTUInfo());
6992             Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
6993                                            Param->getIdentifier()->getName()));
6994             Results.AddResult(Builder.TakeString());
6995           }
6996         }
6997 
6998         continue;
6999       }
7000 
7001       Result R(MethList->Method, Results.getBasePriority(MethList->Method), 0);
7002       R.StartParameter = SelIdents.size();
7003       R.AllParametersAreInformative = false;
7004       R.DeclaringEntity = true;
7005       Results.MaybeAddResult(R, CurContext);
7006     }
7007   }
7008 
7009   Results.ExitScope();
7010   HandleCodeCompleteResults(this, CodeCompleter,
7011                             CodeCompletionContext::CCC_Other,
7012                             Results.data(),Results.size());
7013 }
7014 
7015 void Sema::CodeCompletePreprocessorDirective(bool InConditional) {
7016   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7017                         CodeCompleter->getCodeCompletionTUInfo(),
7018                         CodeCompletionContext::CCC_PreprocessorDirective);
7019   Results.EnterNewScope();
7020 
7021   // #if <condition>
7022   CodeCompletionBuilder Builder(Results.getAllocator(),
7023                                 Results.getCodeCompletionTUInfo());
7024   Builder.AddTypedTextChunk("if");
7025   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7026   Builder.AddPlaceholderChunk("condition");
7027   Results.AddResult(Builder.TakeString());
7028 
7029   // #ifdef <macro>
7030   Builder.AddTypedTextChunk("ifdef");
7031   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7032   Builder.AddPlaceholderChunk("macro");
7033   Results.AddResult(Builder.TakeString());
7034 
7035   // #ifndef <macro>
7036   Builder.AddTypedTextChunk("ifndef");
7037   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7038   Builder.AddPlaceholderChunk("macro");
7039   Results.AddResult(Builder.TakeString());
7040 
7041   if (InConditional) {
7042     // #elif <condition>
7043     Builder.AddTypedTextChunk("elif");
7044     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7045     Builder.AddPlaceholderChunk("condition");
7046     Results.AddResult(Builder.TakeString());
7047 
7048     // #else
7049     Builder.AddTypedTextChunk("else");
7050     Results.AddResult(Builder.TakeString());
7051 
7052     // #endif
7053     Builder.AddTypedTextChunk("endif");
7054     Results.AddResult(Builder.TakeString());
7055   }
7056 
7057   // #include "header"
7058   Builder.AddTypedTextChunk("include");
7059   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7060   Builder.AddTextChunk("\"");
7061   Builder.AddPlaceholderChunk("header");
7062   Builder.AddTextChunk("\"");
7063   Results.AddResult(Builder.TakeString());
7064 
7065   // #include <header>
7066   Builder.AddTypedTextChunk("include");
7067   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7068   Builder.AddTextChunk("<");
7069   Builder.AddPlaceholderChunk("header");
7070   Builder.AddTextChunk(">");
7071   Results.AddResult(Builder.TakeString());
7072 
7073   // #define <macro>
7074   Builder.AddTypedTextChunk("define");
7075   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7076   Builder.AddPlaceholderChunk("macro");
7077   Results.AddResult(Builder.TakeString());
7078 
7079   // #define <macro>(<args>)
7080   Builder.AddTypedTextChunk("define");
7081   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7082   Builder.AddPlaceholderChunk("macro");
7083   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
7084   Builder.AddPlaceholderChunk("args");
7085   Builder.AddChunk(CodeCompletionString::CK_RightParen);
7086   Results.AddResult(Builder.TakeString());
7087 
7088   // #undef <macro>
7089   Builder.AddTypedTextChunk("undef");
7090   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7091   Builder.AddPlaceholderChunk("macro");
7092   Results.AddResult(Builder.TakeString());
7093 
7094   // #line <number>
7095   Builder.AddTypedTextChunk("line");
7096   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7097   Builder.AddPlaceholderChunk("number");
7098   Results.AddResult(Builder.TakeString());
7099 
7100   // #line <number> "filename"
7101   Builder.AddTypedTextChunk("line");
7102   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7103   Builder.AddPlaceholderChunk("number");
7104   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7105   Builder.AddTextChunk("\"");
7106   Builder.AddPlaceholderChunk("filename");
7107   Builder.AddTextChunk("\"");
7108   Results.AddResult(Builder.TakeString());
7109 
7110   // #error <message>
7111   Builder.AddTypedTextChunk("error");
7112   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7113   Builder.AddPlaceholderChunk("message");
7114   Results.AddResult(Builder.TakeString());
7115 
7116   // #pragma <arguments>
7117   Builder.AddTypedTextChunk("pragma");
7118   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7119   Builder.AddPlaceholderChunk("arguments");
7120   Results.AddResult(Builder.TakeString());
7121 
7122   if (getLangOpts().ObjC1) {
7123     // #import "header"
7124     Builder.AddTypedTextChunk("import");
7125     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7126     Builder.AddTextChunk("\"");
7127     Builder.AddPlaceholderChunk("header");
7128     Builder.AddTextChunk("\"");
7129     Results.AddResult(Builder.TakeString());
7130 
7131     // #import <header>
7132     Builder.AddTypedTextChunk("import");
7133     Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7134     Builder.AddTextChunk("<");
7135     Builder.AddPlaceholderChunk("header");
7136     Builder.AddTextChunk(">");
7137     Results.AddResult(Builder.TakeString());
7138   }
7139 
7140   // #include_next "header"
7141   Builder.AddTypedTextChunk("include_next");
7142   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7143   Builder.AddTextChunk("\"");
7144   Builder.AddPlaceholderChunk("header");
7145   Builder.AddTextChunk("\"");
7146   Results.AddResult(Builder.TakeString());
7147 
7148   // #include_next <header>
7149   Builder.AddTypedTextChunk("include_next");
7150   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7151   Builder.AddTextChunk("<");
7152   Builder.AddPlaceholderChunk("header");
7153   Builder.AddTextChunk(">");
7154   Results.AddResult(Builder.TakeString());
7155 
7156   // #warning <message>
7157   Builder.AddTypedTextChunk("warning");
7158   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7159   Builder.AddPlaceholderChunk("message");
7160   Results.AddResult(Builder.TakeString());
7161 
7162   // Note: #ident and #sccs are such crazy anachronisms that we don't provide
7163   // completions for them. And __include_macros is a Clang-internal extension
7164   // that we don't want to encourage anyone to use.
7165 
7166   // FIXME: we don't support #assert or #unassert, so don't suggest them.
7167   Results.ExitScope();
7168 
7169   HandleCodeCompleteResults(this, CodeCompleter,
7170                             CodeCompletionContext::CCC_PreprocessorDirective,
7171                             Results.data(), Results.size());
7172 }
7173 
7174 void Sema::CodeCompleteInPreprocessorConditionalExclusion(Scope *S) {
7175   CodeCompleteOrdinaryName(S,
7176                            S->getFnParent()? Sema::PCC_RecoveryInFunction
7177                                            : Sema::PCC_Namespace);
7178 }
7179 
7180 void Sema::CodeCompletePreprocessorMacroName(bool IsDefinition) {
7181   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7182                         CodeCompleter->getCodeCompletionTUInfo(),
7183                         IsDefinition? CodeCompletionContext::CCC_MacroName
7184                                     : CodeCompletionContext::CCC_MacroNameUse);
7185   if (!IsDefinition && (!CodeCompleter || CodeCompleter->includeMacros())) {
7186     // Add just the names of macros, not their arguments.
7187     CodeCompletionBuilder Builder(Results.getAllocator(),
7188                                   Results.getCodeCompletionTUInfo());
7189     Results.EnterNewScope();
7190     for (Preprocessor::macro_iterator M = PP.macro_begin(),
7191                                    MEnd = PP.macro_end();
7192          M != MEnd; ++M) {
7193       Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
7194                                            M->first->getName()));
7195       Results.AddResult(CodeCompletionResult(Builder.TakeString(),
7196                                              CCP_CodePattern,
7197                                              CXCursor_MacroDefinition));
7198     }
7199     Results.ExitScope();
7200   } else if (IsDefinition) {
7201     // FIXME: Can we detect when the user just wrote an include guard above?
7202   }
7203 
7204   HandleCodeCompleteResults(this, CodeCompleter, Results.getCompletionContext(),
7205                             Results.data(), Results.size());
7206 }
7207 
7208 void Sema::CodeCompletePreprocessorExpression() {
7209   ResultBuilder Results(*this, CodeCompleter->getAllocator(),
7210                         CodeCompleter->getCodeCompletionTUInfo(),
7211                         CodeCompletionContext::CCC_PreprocessorExpression);
7212 
7213   if (!CodeCompleter || CodeCompleter->includeMacros())
7214     AddMacroResults(PP, Results, true);
7215 
7216     // defined (<macro>)
7217   Results.EnterNewScope();
7218   CodeCompletionBuilder Builder(Results.getAllocator(),
7219                                 Results.getCodeCompletionTUInfo());
7220   Builder.AddTypedTextChunk("defined");
7221   Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
7222   Builder.AddChunk(CodeCompletionString::CK_LeftParen);
7223   Builder.AddPlaceholderChunk("macro");
7224   Builder.AddChunk(CodeCompletionString::CK_RightParen);
7225   Results.AddResult(Builder.TakeString());
7226   Results.ExitScope();
7227 
7228   HandleCodeCompleteResults(this, CodeCompleter,
7229                             CodeCompletionContext::CCC_PreprocessorExpression,
7230                             Results.data(), Results.size());
7231 }
7232 
7233 void Sema::CodeCompletePreprocessorMacroArgument(Scope *S,
7234                                                  IdentifierInfo *Macro,
7235                                                  MacroInfo *MacroInfo,
7236                                                  unsigned Argument) {
7237   // FIXME: In the future, we could provide "overload" results, much like we
7238   // do for function calls.
7239 
7240   // Now just ignore this. There will be another code-completion callback
7241   // for the expanded tokens.
7242 }
7243 
7244 void Sema::CodeCompleteNaturalLanguage() {
7245   HandleCodeCompleteResults(this, CodeCompleter,
7246                             CodeCompletionContext::CCC_NaturalLanguage,
7247                             0, 0);
7248 }
7249 
7250 void Sema::GatherGlobalCodeCompletions(CodeCompletionAllocator &Allocator,
7251                                        CodeCompletionTUInfo &CCTUInfo,
7252                  SmallVectorImpl<CodeCompletionResult> &Results) {
7253   ResultBuilder Builder(*this, Allocator, CCTUInfo,
7254                         CodeCompletionContext::CCC_Recovery);
7255   if (!CodeCompleter || CodeCompleter->includeGlobals()) {
7256     CodeCompletionDeclConsumer Consumer(Builder,
7257                                         Context.getTranslationUnitDecl());
7258     LookupVisibleDecls(Context.getTranslationUnitDecl(), LookupAnyName,
7259                        Consumer);
7260   }
7261 
7262   if (!CodeCompleter || CodeCompleter->includeMacros())
7263     AddMacroResults(PP, Builder, true);
7264 
7265   Results.clear();
7266   Results.insert(Results.end(),
7267                  Builder.data(), Builder.data() + Builder.size());
7268 }
7269