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 "Sema.h"
14 #include "clang/Sema/CodeCompleteConsumer.h"
15 #include "clang/AST/ExprCXX.h"
16 #include "clang/AST/ExprObjC.h"
17 #include "clang/Lex/MacroInfo.h"
18 #include "clang/Lex/Preprocessor.h"
19 #include "llvm/ADT/SmallPtrSet.h"
20 #include "llvm/ADT/StringExtras.h"
21 #include <list>
22 #include <map>
23 #include <vector>
24 
25 using namespace clang;
26 
27 namespace {
28   /// \brief A container of code-completion results.
29   class ResultBuilder {
30   public:
31     /// \brief The type of a name-lookup filter, which can be provided to the
32     /// name-lookup routines to specify which declarations should be included in
33     /// the result set (when it returns true) and which declarations should be
34     /// filtered out (returns false).
35     typedef bool (ResultBuilder::*LookupFilter)(NamedDecl *) const;
36 
37     typedef CodeCompleteConsumer::Result Result;
38 
39   private:
40     /// \brief The actual results we have found.
41     std::vector<Result> Results;
42 
43     /// \brief A record of all of the declarations we have found and placed
44     /// into the result set, used to ensure that no declaration ever gets into
45     /// the result set twice.
46     llvm::SmallPtrSet<Decl*, 16> AllDeclsFound;
47 
48     typedef std::pair<NamedDecl *, unsigned> DeclIndexPair;
49 
50     /// \brief An entry in the shadow map, which is optimized to store
51     /// a single (declaration, index) mapping (the common case) but
52     /// can also store a list of (declaration, index) mappings.
53     class ShadowMapEntry {
54       typedef llvm::SmallVector<DeclIndexPair, 4> DeclIndexPairVector;
55 
56       /// \brief Contains either the solitary NamedDecl * or a vector
57       /// of (declaration, index) pairs.
58       llvm::PointerUnion<NamedDecl *, DeclIndexPairVector*> DeclOrVector;
59 
60       /// \brief When the entry contains a single declaration, this is
61       /// the index associated with that entry.
62       unsigned SingleDeclIndex;
63 
64     public:
65       ShadowMapEntry() : DeclOrVector(), SingleDeclIndex(0) { }
66 
67       void Add(NamedDecl *ND, unsigned Index) {
68         if (DeclOrVector.isNull()) {
69           // 0 - > 1 elements: just set the single element information.
70           DeclOrVector = ND;
71           SingleDeclIndex = Index;
72           return;
73         }
74 
75         if (NamedDecl *PrevND = DeclOrVector.dyn_cast<NamedDecl *>()) {
76           // 1 -> 2 elements: create the vector of results and push in the
77           // existing declaration.
78           DeclIndexPairVector *Vec = new DeclIndexPairVector;
79           Vec->push_back(DeclIndexPair(PrevND, SingleDeclIndex));
80           DeclOrVector = Vec;
81         }
82 
83         // Add the new element to the end of the vector.
84         DeclOrVector.get<DeclIndexPairVector*>()->push_back(
85                                                     DeclIndexPair(ND, Index));
86       }
87 
88       void Destroy() {
89         if (DeclIndexPairVector *Vec
90               = DeclOrVector.dyn_cast<DeclIndexPairVector *>()) {
91           delete Vec;
92           DeclOrVector = ((NamedDecl *)0);
93         }
94       }
95 
96       // Iteration.
97       class iterator;
98       iterator begin() const;
99       iterator end() const;
100     };
101 
102     /// \brief A mapping from declaration names to the declarations that have
103     /// this name within a particular scope and their index within the list of
104     /// results.
105     typedef llvm::DenseMap<DeclarationName, ShadowMapEntry> ShadowMap;
106 
107     /// \brief The semantic analysis object for which results are being
108     /// produced.
109     Sema &SemaRef;
110 
111     /// \brief If non-NULL, a filter function used to remove any code-completion
112     /// results that are not desirable.
113     LookupFilter Filter;
114 
115     /// \brief A list of shadow maps, which is used to model name hiding at
116     /// different levels of, e.g., the inheritance hierarchy.
117     std::list<ShadowMap> ShadowMaps;
118 
119   public:
120     explicit ResultBuilder(Sema &SemaRef, LookupFilter Filter = 0)
121       : SemaRef(SemaRef), Filter(Filter) { }
122 
123     /// \brief Set the filter used for code-completion results.
124     void setFilter(LookupFilter Filter) {
125       this->Filter = Filter;
126     }
127 
128     typedef std::vector<Result>::iterator iterator;
129     iterator begin() { return Results.begin(); }
130     iterator end() { return Results.end(); }
131 
132     Result *data() { return Results.empty()? 0 : &Results.front(); }
133     unsigned size() const { return Results.size(); }
134     bool empty() const { return Results.empty(); }
135 
136     /// \brief Add a new result to this result set (if it isn't already in one
137     /// of the shadow maps), or replace an existing result (for, e.g., a
138     /// redeclaration).
139     ///
140     /// \param R the result to add (if it is unique).
141     ///
142     /// \param R the context in which this result will be named.
143     void MaybeAddResult(Result R, DeclContext *CurContext = 0);
144 
145     /// \brief Enter into a new scope.
146     void EnterNewScope();
147 
148     /// \brief Exit from the current scope.
149     void ExitScope();
150 
151     /// \brief Ignore this declaration, if it is seen again.
152     void Ignore(Decl *D) { AllDeclsFound.insert(D->getCanonicalDecl()); }
153 
154     /// \name Name lookup predicates
155     ///
156     /// These predicates can be passed to the name lookup functions to filter the
157     /// results of name lookup. All of the predicates have the same type, so that
158     ///
159     //@{
160     bool IsOrdinaryName(NamedDecl *ND) const;
161     bool IsNestedNameSpecifier(NamedDecl *ND) const;
162     bool IsEnum(NamedDecl *ND) const;
163     bool IsClassOrStruct(NamedDecl *ND) const;
164     bool IsUnion(NamedDecl *ND) const;
165     bool IsNamespace(NamedDecl *ND) const;
166     bool IsNamespaceOrAlias(NamedDecl *ND) const;
167     bool IsType(NamedDecl *ND) const;
168     bool IsMember(NamedDecl *ND) const;
169     //@}
170   };
171 }
172 
173 class ResultBuilder::ShadowMapEntry::iterator {
174   llvm::PointerUnion<NamedDecl*, const DeclIndexPair*> DeclOrIterator;
175   unsigned SingleDeclIndex;
176 
177 public:
178   typedef DeclIndexPair value_type;
179   typedef value_type reference;
180   typedef std::ptrdiff_t difference_type;
181   typedef std::input_iterator_tag iterator_category;
182 
183   class pointer {
184     DeclIndexPair Value;
185 
186   public:
187     pointer(const DeclIndexPair &Value) : Value(Value) { }
188 
189     const DeclIndexPair *operator->() const {
190       return &Value;
191     }
192   };
193 
194   iterator() : DeclOrIterator((NamedDecl *)0), SingleDeclIndex(0) { }
195 
196   iterator(NamedDecl *SingleDecl, unsigned Index)
197     : DeclOrIterator(SingleDecl), SingleDeclIndex(Index) { }
198 
199   iterator(const DeclIndexPair *Iterator)
200     : DeclOrIterator(Iterator), SingleDeclIndex(0) { }
201 
202   iterator &operator++() {
203     if (DeclOrIterator.is<NamedDecl *>()) {
204       DeclOrIterator = (NamedDecl *)0;
205       SingleDeclIndex = 0;
206       return *this;
207     }
208 
209     const DeclIndexPair *I = DeclOrIterator.get<const DeclIndexPair*>();
210     ++I;
211     DeclOrIterator = I;
212     return *this;
213   }
214 
215   iterator operator++(int) {
216     iterator tmp(*this);
217     ++(*this);
218     return tmp;
219   }
220 
221   reference operator*() const {
222     if (NamedDecl *ND = DeclOrIterator.dyn_cast<NamedDecl *>())
223       return reference(ND, SingleDeclIndex);
224 
225     return *DeclOrIterator.get<const DeclIndexPair*>();
226   }
227 
228   pointer operator->() const {
229     return pointer(**this);
230   }
231 
232   friend bool operator==(const iterator &X, const iterator &Y) {
233     return X.DeclOrIterator.getOpaqueValue()
234                                   == Y.DeclOrIterator.getOpaqueValue() &&
235       X.SingleDeclIndex == Y.SingleDeclIndex;
236   }
237 
238   friend bool operator!=(const iterator &X, const iterator &Y) {
239     return !(X == Y);
240   }
241 };
242 
243 namespace llvm {
244   template<>
245   struct DenseMapInfo<ResultBuilder::ShadowMapEntry> {
246     static bool isPod() { return false; }
247   };
248 }
249 
250 ResultBuilder::ShadowMapEntry::iterator
251 ResultBuilder::ShadowMapEntry::begin() const {
252   if (DeclOrVector.isNull())
253     return iterator();
254 
255   if (NamedDecl *ND = DeclOrVector.dyn_cast<NamedDecl *>())
256     return iterator(ND, SingleDeclIndex);
257 
258   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->begin());
259 }
260 
261 ResultBuilder::ShadowMapEntry::iterator
262 ResultBuilder::ShadowMapEntry::end() const {
263   if (DeclOrVector.is<NamedDecl *>() || DeclOrVector.isNull())
264     return iterator();
265 
266   return iterator(DeclOrVector.get<DeclIndexPairVector *>()->end());
267 }
268 
269 /// \brief Determines whether the given hidden result could be found with
270 /// some extra work, e.g., by qualifying the name.
271 ///
272 /// \param Hidden the declaration that is hidden by the currenly \p Visible
273 /// declaration.
274 ///
275 /// \param Visible the declaration with the same name that is already visible.
276 ///
277 /// \returns true if the hidden result can be found by some mechanism,
278 /// false otherwise.
279 static bool canHiddenResultBeFound(const LangOptions &LangOpts,
280                                    NamedDecl *Hidden, NamedDecl *Visible) {
281   // In C, there is no way to refer to a hidden name.
282   if (!LangOpts.CPlusPlus)
283     return false;
284 
285   DeclContext *HiddenCtx = Hidden->getDeclContext()->getLookupContext();
286 
287   // There is no way to qualify a name declared in a function or method.
288   if (HiddenCtx->isFunctionOrMethod())
289     return false;
290 
291   return HiddenCtx != Visible->getDeclContext()->getLookupContext();
292 }
293 
294 /// \brief Compute the qualification required to get from the current context
295 /// (\p CurContext) to the target context (\p TargetContext).
296 ///
297 /// \param Context the AST context in which the qualification will be used.
298 ///
299 /// \param CurContext the context where an entity is being named, which is
300 /// typically based on the current scope.
301 ///
302 /// \param TargetContext the context in which the named entity actually
303 /// resides.
304 ///
305 /// \returns a nested name specifier that refers into the target context, or
306 /// NULL if no qualification is needed.
307 static NestedNameSpecifier *
308 getRequiredQualification(ASTContext &Context,
309                          DeclContext *CurContext,
310                          DeclContext *TargetContext) {
311   llvm::SmallVector<DeclContext *, 4> TargetParents;
312 
313   for (DeclContext *CommonAncestor = TargetContext;
314        CommonAncestor && !CommonAncestor->Encloses(CurContext);
315        CommonAncestor = CommonAncestor->getLookupParent()) {
316     if (CommonAncestor->isTransparentContext() ||
317         CommonAncestor->isFunctionOrMethod())
318       continue;
319 
320     TargetParents.push_back(CommonAncestor);
321   }
322 
323   NestedNameSpecifier *Result = 0;
324   while (!TargetParents.empty()) {
325     DeclContext *Parent = TargetParents.back();
326     TargetParents.pop_back();
327 
328     if (NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(Parent))
329       Result = NestedNameSpecifier::Create(Context, Result, Namespace);
330     else if (TagDecl *TD = dyn_cast<TagDecl>(Parent))
331       Result = NestedNameSpecifier::Create(Context, Result,
332                                            false,
333                                      Context.getTypeDeclType(TD).getTypePtr());
334     else
335       assert(Parent->isTranslationUnit());
336   }
337   return Result;
338 }
339 
340 void ResultBuilder::MaybeAddResult(Result R, DeclContext *CurContext) {
341   assert(!ShadowMaps.empty() && "Must enter into a results scope");
342 
343   if (R.Kind != Result::RK_Declaration) {
344     // For non-declaration results, just add the result.
345     Results.push_back(R);
346     return;
347   }
348 
349   // Skip unnamed entities.
350   if (!R.Declaration->getDeclName())
351     return;
352 
353   // Look through using declarations.
354   if (UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(R.Declaration))
355     MaybeAddResult(Result(Using->getTargetDecl(), R.Rank, R.Qualifier),
356                    CurContext);
357 
358   Decl *CanonDecl = R.Declaration->getCanonicalDecl();
359   unsigned IDNS = CanonDecl->getIdentifierNamespace();
360 
361   // Friend declarations and declarations introduced due to friends are never
362   // added as results.
363   if (isa<FriendDecl>(CanonDecl) ||
364       (IDNS & (Decl::IDNS_OrdinaryFriend | Decl::IDNS_TagFriend)))
365     return;
366 
367   // Class template (partial) specializations are never added as results.
368   if (isa<ClassTemplateSpecializationDecl>(CanonDecl) ||
369       isa<ClassTemplatePartialSpecializationDecl>(CanonDecl))
370     return;
371 
372   // Using declarations themselves are never added as results.
373   if (isa<UsingDecl>(CanonDecl))
374     return;
375 
376   if (const IdentifierInfo *Id = R.Declaration->getIdentifier()) {
377     // __va_list_tag is a freak of nature. Find it and skip it.
378     if (Id->isStr("__va_list_tag") || Id->isStr("__builtin_va_list"))
379       return;
380 
381     // Filter out names reserved for the implementation (C99 7.1.3,
382     // C++ [lib.global.names]). Users don't need to see those.
383     //
384     // FIXME: Add predicate for this.
385     if (Id->getLength() >= 2) {
386       const char *Name = Id->getNameStart();
387       if (Name[0] == '_' &&
388           (Name[1] == '_' || (Name[1] >= 'A' && Name[1] <= 'Z')))
389         return;
390     }
391   }
392 
393   // C++ constructors are never found by name lookup.
394   if (isa<CXXConstructorDecl>(CanonDecl))
395     return;
396 
397   // Filter out any unwanted results.
398   if (Filter && !(this->*Filter)(R.Declaration))
399     return;
400 
401   ShadowMap &SMap = ShadowMaps.back();
402   ShadowMapEntry::iterator I, IEnd;
403   ShadowMap::iterator NamePos = SMap.find(R.Declaration->getDeclName());
404   if (NamePos != SMap.end()) {
405     I = NamePos->second.begin();
406     IEnd = NamePos->second.end();
407   }
408 
409   for (; I != IEnd; ++I) {
410     NamedDecl *ND = I->first;
411     unsigned Index = I->second;
412     if (ND->getCanonicalDecl() == CanonDecl) {
413       // This is a redeclaration. Always pick the newer declaration.
414       Results[Index].Declaration = R.Declaration;
415 
416       // Pick the best rank of the two.
417       Results[Index].Rank = std::min(Results[Index].Rank, R.Rank);
418 
419       // We're done.
420       return;
421     }
422   }
423 
424   // This is a new declaration in this scope. However, check whether this
425   // declaration name is hidden by a similarly-named declaration in an outer
426   // scope.
427   std::list<ShadowMap>::iterator SM, SMEnd = ShadowMaps.end();
428   --SMEnd;
429   for (SM = ShadowMaps.begin(); SM != SMEnd; ++SM) {
430     ShadowMapEntry::iterator I, IEnd;
431     ShadowMap::iterator NamePos = SM->find(R.Declaration->getDeclName());
432     if (NamePos != SM->end()) {
433       I = NamePos->second.begin();
434       IEnd = NamePos->second.end();
435     }
436     for (; I != IEnd; ++I) {
437       // A tag declaration does not hide a non-tag declaration.
438       if (I->first->getIdentifierNamespace() == Decl::IDNS_Tag &&
439           (IDNS & (Decl::IDNS_Member | Decl::IDNS_Ordinary |
440                    Decl::IDNS_ObjCProtocol)))
441         continue;
442 
443       // Protocols are in distinct namespaces from everything else.
444       if (((I->first->getIdentifierNamespace() & Decl::IDNS_ObjCProtocol)
445            || (IDNS & Decl::IDNS_ObjCProtocol)) &&
446           I->first->getIdentifierNamespace() != IDNS)
447         continue;
448 
449       // The newly-added result is hidden by an entry in the shadow map.
450       if (canHiddenResultBeFound(SemaRef.getLangOptions(), R.Declaration,
451                                  I->first)) {
452         // Note that this result was hidden.
453         R.Hidden = true;
454         R.QualifierIsInformative = false;
455 
456         if (!R.Qualifier)
457           R.Qualifier = getRequiredQualification(SemaRef.Context,
458                                                  CurContext,
459                                               R.Declaration->getDeclContext());
460       } else {
461         // This result was hidden and cannot be found; don't bother adding
462         // it.
463         return;
464       }
465 
466       break;
467     }
468   }
469 
470   // Make sure that any given declaration only shows up in the result set once.
471   if (!AllDeclsFound.insert(CanonDecl))
472     return;
473 
474   // If the filter is for nested-name-specifiers, then this result starts a
475   // nested-name-specifier.
476   if ((Filter == &ResultBuilder::IsNestedNameSpecifier) ||
477       (Filter == &ResultBuilder::IsMember &&
478        isa<CXXRecordDecl>(R.Declaration) &&
479        cast<CXXRecordDecl>(R.Declaration)->isInjectedClassName()))
480     R.StartsNestedNameSpecifier = true;
481 
482   // If this result is supposed to have an informative qualifier, add one.
483   if (R.QualifierIsInformative && !R.Qualifier &&
484       !R.StartsNestedNameSpecifier) {
485     DeclContext *Ctx = R.Declaration->getDeclContext();
486     if (NamespaceDecl *Namespace = dyn_cast<NamespaceDecl>(Ctx))
487       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, Namespace);
488     else if (TagDecl *Tag = dyn_cast<TagDecl>(Ctx))
489       R.Qualifier = NestedNameSpecifier::Create(SemaRef.Context, 0, false,
490                              SemaRef.Context.getTypeDeclType(Tag).getTypePtr());
491     else
492       R.QualifierIsInformative = false;
493   }
494 
495   // Insert this result into the set of results and into the current shadow
496   // map.
497   SMap[R.Declaration->getDeclName()].Add(R.Declaration, Results.size());
498   Results.push_back(R);
499 }
500 
501 /// \brief Enter into a new scope.
502 void ResultBuilder::EnterNewScope() {
503   ShadowMaps.push_back(ShadowMap());
504 }
505 
506 /// \brief Exit from the current scope.
507 void ResultBuilder::ExitScope() {
508   for (ShadowMap::iterator E = ShadowMaps.back().begin(),
509                         EEnd = ShadowMaps.back().end();
510        E != EEnd;
511        ++E)
512     E->second.Destroy();
513 
514   ShadowMaps.pop_back();
515 }
516 
517 /// \brief Determines whether this given declaration will be found by
518 /// ordinary name lookup.
519 bool ResultBuilder::IsOrdinaryName(NamedDecl *ND) const {
520   unsigned IDNS = Decl::IDNS_Ordinary;
521   if (SemaRef.getLangOptions().CPlusPlus)
522     IDNS |= Decl::IDNS_Tag;
523 
524   return ND->getIdentifierNamespace() & IDNS;
525 }
526 
527 /// \brief Determines whether the given declaration is suitable as the
528 /// start of a C++ nested-name-specifier, e.g., a class or namespace.
529 bool ResultBuilder::IsNestedNameSpecifier(NamedDecl *ND) const {
530   // Allow us to find class templates, too.
531   if (ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
532     ND = ClassTemplate->getTemplatedDecl();
533 
534   return SemaRef.isAcceptableNestedNameSpecifier(ND);
535 }
536 
537 /// \brief Determines whether the given declaration is an enumeration.
538 bool ResultBuilder::IsEnum(NamedDecl *ND) const {
539   return isa<EnumDecl>(ND);
540 }
541 
542 /// \brief Determines whether the given declaration is a class or struct.
543 bool ResultBuilder::IsClassOrStruct(NamedDecl *ND) const {
544   // Allow us to find class templates, too.
545   if (ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
546     ND = ClassTemplate->getTemplatedDecl();
547 
548   if (RecordDecl *RD = dyn_cast<RecordDecl>(ND))
549     return RD->getTagKind() == TagDecl::TK_class ||
550     RD->getTagKind() == TagDecl::TK_struct;
551 
552   return false;
553 }
554 
555 /// \brief Determines whether the given declaration is a union.
556 bool ResultBuilder::IsUnion(NamedDecl *ND) const {
557   // Allow us to find class templates, too.
558   if (ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(ND))
559     ND = ClassTemplate->getTemplatedDecl();
560 
561   if (RecordDecl *RD = dyn_cast<RecordDecl>(ND))
562     return RD->getTagKind() == TagDecl::TK_union;
563 
564   return false;
565 }
566 
567 /// \brief Determines whether the given declaration is a namespace.
568 bool ResultBuilder::IsNamespace(NamedDecl *ND) const {
569   return isa<NamespaceDecl>(ND);
570 }
571 
572 /// \brief Determines whether the given declaration is a namespace or
573 /// namespace alias.
574 bool ResultBuilder::IsNamespaceOrAlias(NamedDecl *ND) const {
575   return isa<NamespaceDecl>(ND) || isa<NamespaceAliasDecl>(ND);
576 }
577 
578 /// \brief Determines whether the given declaration is a type.
579 bool ResultBuilder::IsType(NamedDecl *ND) const {
580   return isa<TypeDecl>(ND);
581 }
582 
583 /// \brief Determines which members of a class should be visible via
584 /// "." or "->".  Only value declarations, nested name specifiers, and
585 /// using declarations thereof should show up.
586 bool ResultBuilder::IsMember(NamedDecl *ND) const {
587   if (UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(ND))
588     ND = Using->getTargetDecl();
589 
590   return isa<ValueDecl>(ND) || isa<FunctionTemplateDecl>(ND) ||
591     isa<ObjCPropertyDecl>(ND);
592 }
593 
594 // Find the next outer declaration context corresponding to this scope.
595 static DeclContext *findOuterContext(Scope *S) {
596   for (S = S->getParent(); S; S = S->getParent())
597     if (S->getEntity())
598       return static_cast<DeclContext *>(S->getEntity())->getPrimaryContext();
599 
600   return 0;
601 }
602 
603 /// \brief Collect the results of searching for members within the given
604 /// declaration context.
605 ///
606 /// \param Ctx the declaration context from which we will gather results.
607 ///
608 /// \param Rank the rank given to results in this declaration context.
609 ///
610 /// \param Visited the set of declaration contexts that have already been
611 /// visited. Declaration contexts will only be visited once.
612 ///
613 /// \param Results the result set that will be extended with any results
614 /// found within this declaration context (and, for a C++ class, its bases).
615 ///
616 /// \param InBaseClass whether we are in a base class.
617 ///
618 /// \returns the next higher rank value, after considering all of the
619 /// names within this declaration context.
620 static unsigned CollectMemberLookupResults(DeclContext *Ctx,
621                                            unsigned Rank,
622                                            DeclContext *CurContext,
623                                  llvm::SmallPtrSet<DeclContext *, 16> &Visited,
624                                            ResultBuilder &Results,
625                                            bool InBaseClass = false) {
626   // Make sure we don't visit the same context twice.
627   if (!Visited.insert(Ctx->getPrimaryContext()))
628     return Rank;
629 
630   // Enumerate all of the results in this context.
631   typedef CodeCompleteConsumer::Result Result;
632   Results.EnterNewScope();
633   for (DeclContext *CurCtx = Ctx->getPrimaryContext(); CurCtx;
634        CurCtx = CurCtx->getNextContext()) {
635     for (DeclContext::decl_iterator D = CurCtx->decls_begin(),
636                                  DEnd = CurCtx->decls_end();
637          D != DEnd; ++D) {
638       if (NamedDecl *ND = dyn_cast<NamedDecl>(*D))
639         Results.MaybeAddResult(Result(ND, Rank, 0, InBaseClass), CurContext);
640 
641       // Visit transparent contexts inside this context.
642       if (DeclContext *InnerCtx = dyn_cast<DeclContext>(*D)) {
643         if (InnerCtx->isTransparentContext())
644           CollectMemberLookupResults(InnerCtx, Rank, CurContext, Visited,
645                                      Results, InBaseClass);
646       }
647     }
648   }
649 
650   // Traverse the contexts of inherited classes.
651   if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Ctx)) {
652     for (CXXRecordDecl::base_class_iterator B = Record->bases_begin(),
653                                          BEnd = Record->bases_end();
654          B != BEnd; ++B) {
655       QualType BaseType = B->getType();
656 
657       // Don't look into dependent bases, because name lookup can't look
658       // there anyway.
659       if (BaseType->isDependentType())
660         continue;
661 
662       const RecordType *Record = BaseType->getAs<RecordType>();
663       if (!Record)
664         continue;
665 
666       // FIXME: It would be nice to be able to determine whether referencing
667       // a particular member would be ambiguous. For example, given
668       //
669       //   struct A { int member; };
670       //   struct B { int member; };
671       //   struct C : A, B { };
672       //
673       //   void f(C *c) { c->### }
674       // accessing 'member' would result in an ambiguity. However, code
675       // completion could be smart enough to qualify the member with the
676       // base class, e.g.,
677       //
678       //   c->B::member
679       //
680       // or
681       //
682       //   c->A::member
683 
684       // Collect results from this base class (and its bases).
685       CollectMemberLookupResults(Record->getDecl(), Rank, CurContext, Visited,
686                                  Results, /*InBaseClass=*/true);
687     }
688   }
689 
690   // FIXME: Look into base classes in Objective-C!
691 
692   Results.ExitScope();
693   return Rank + 1;
694 }
695 
696 /// \brief Collect the results of searching for members within the given
697 /// declaration context.
698 ///
699 /// \param Ctx the declaration context from which we will gather results.
700 ///
701 /// \param InitialRank the initial rank given to results in this declaration
702 /// context. Larger rank values will be used for, e.g., members found in
703 /// base classes.
704 ///
705 /// \param Results the result set that will be extended with any results
706 /// found within this declaration context (and, for a C++ class, its bases).
707 ///
708 /// \returns the next higher rank value, after considering all of the
709 /// names within this declaration context.
710 static unsigned CollectMemberLookupResults(DeclContext *Ctx,
711                                            unsigned InitialRank,
712                                            DeclContext *CurContext,
713                                            ResultBuilder &Results) {
714   llvm::SmallPtrSet<DeclContext *, 16> Visited;
715   return CollectMemberLookupResults(Ctx, InitialRank, CurContext, Visited,
716                                     Results);
717 }
718 
719 /// \brief Collect the results of searching for declarations within the given
720 /// scope and its parent scopes.
721 ///
722 /// \param S the scope in which we will start looking for declarations.
723 ///
724 /// \param InitialRank the initial rank given to results in this scope.
725 /// Larger rank values will be used for results found in parent scopes.
726 ///
727 /// \param CurContext the context from which lookup results will be found.
728 ///
729 /// \param Results the builder object that will receive each result.
730 static unsigned CollectLookupResults(Scope *S,
731                                      TranslationUnitDecl *TranslationUnit,
732                                      unsigned InitialRank,
733                                      DeclContext *CurContext,
734                                      ResultBuilder &Results) {
735   if (!S)
736     return InitialRank;
737 
738   // FIXME: Using directives!
739 
740   unsigned NextRank = InitialRank;
741   Results.EnterNewScope();
742   if (S->getEntity() &&
743       !((DeclContext *)S->getEntity())->isFunctionOrMethod()) {
744     // Look into this scope's declaration context, along with any of its
745     // parent lookup contexts (e.g., enclosing classes), up to the point
746     // where we hit the context stored in the next outer scope.
747     DeclContext *Ctx = (DeclContext *)S->getEntity();
748     DeclContext *OuterCtx = findOuterContext(S);
749 
750     for (; Ctx && Ctx->getPrimaryContext() != OuterCtx;
751          Ctx = Ctx->getLookupParent()) {
752       if (Ctx->isFunctionOrMethod())
753         continue;
754 
755       NextRank = CollectMemberLookupResults(Ctx, NextRank + 1, CurContext,
756                                             Results);
757     }
758   } else if (!S->getParent()) {
759     // Look into the translation unit scope. We walk through the translation
760     // unit's declaration context, because the Scope itself won't have all of
761     // the declarations if we loaded a precompiled header.
762     // FIXME: We would like the translation unit's Scope object to point to the
763     // translation unit, so we don't need this special "if" branch. However,
764     // doing so would force the normal C++ name-lookup code to look into the
765     // translation unit decl when the IdentifierInfo chains would suffice.
766     // Once we fix that problem (which is part of a more general "don't look
767     // in DeclContexts unless we have to" optimization), we can eliminate the
768     // TranslationUnit parameter entirely.
769     NextRank = CollectMemberLookupResults(TranslationUnit, NextRank + 1,
770                                           CurContext, Results);
771   } else {
772     // Walk through the declarations in this Scope.
773     for (Scope::decl_iterator D = S->decl_begin(), DEnd = S->decl_end();
774          D != DEnd; ++D) {
775       if (NamedDecl *ND = dyn_cast<NamedDecl>((Decl *)((*D).get())))
776         Results.MaybeAddResult(CodeCompleteConsumer::Result(ND, NextRank),
777                                CurContext);
778     }
779 
780     NextRank = NextRank + 1;
781   }
782 
783   // Lookup names in the parent scope.
784   NextRank = CollectLookupResults(S->getParent(), TranslationUnit, NextRank,
785                                   CurContext, Results);
786   Results.ExitScope();
787 
788   return NextRank;
789 }
790 
791 /// \brief Add type specifiers for the current language as keyword results.
792 static void AddTypeSpecifierResults(const LangOptions &LangOpts, unsigned Rank,
793                                     ResultBuilder &Results) {
794   typedef CodeCompleteConsumer::Result Result;
795   Results.MaybeAddResult(Result("short", Rank));
796   Results.MaybeAddResult(Result("long", Rank));
797   Results.MaybeAddResult(Result("signed", Rank));
798   Results.MaybeAddResult(Result("unsigned", Rank));
799   Results.MaybeAddResult(Result("void", Rank));
800   Results.MaybeAddResult(Result("char", Rank));
801   Results.MaybeAddResult(Result("int", Rank));
802   Results.MaybeAddResult(Result("float", Rank));
803   Results.MaybeAddResult(Result("double", Rank));
804   Results.MaybeAddResult(Result("enum", Rank));
805   Results.MaybeAddResult(Result("struct", Rank));
806   Results.MaybeAddResult(Result("union", Rank));
807 
808   if (LangOpts.C99) {
809     // C99-specific
810     Results.MaybeAddResult(Result("_Complex", Rank));
811     Results.MaybeAddResult(Result("_Imaginary", Rank));
812     Results.MaybeAddResult(Result("_Bool", Rank));
813   }
814 
815   if (LangOpts.CPlusPlus) {
816     // C++-specific
817     Results.MaybeAddResult(Result("bool", Rank));
818     Results.MaybeAddResult(Result("class", Rank));
819     Results.MaybeAddResult(Result("typename", Rank));
820     Results.MaybeAddResult(Result("wchar_t", Rank));
821 
822     if (LangOpts.CPlusPlus0x) {
823       Results.MaybeAddResult(Result("char16_t", Rank));
824       Results.MaybeAddResult(Result("char32_t", Rank));
825       Results.MaybeAddResult(Result("decltype", Rank));
826     }
827   }
828 
829   // GNU extensions
830   if (LangOpts.GNUMode) {
831     // FIXME: Enable when we actually support decimal floating point.
832     //    Results.MaybeAddResult(Result("_Decimal32", Rank));
833     //    Results.MaybeAddResult(Result("_Decimal64", Rank));
834     //    Results.MaybeAddResult(Result("_Decimal128", Rank));
835     Results.MaybeAddResult(Result("typeof", Rank));
836   }
837 }
838 
839 /// \brief Add function parameter chunks to the given code completion string.
840 static void AddFunctionParameterChunks(ASTContext &Context,
841                                        FunctionDecl *Function,
842                                        CodeCompletionString *Result) {
843   typedef CodeCompletionString::Chunk Chunk;
844 
845   CodeCompletionString *CCStr = Result;
846 
847   for (unsigned P = 0, N = Function->getNumParams(); P != N; ++P) {
848     ParmVarDecl *Param = Function->getParamDecl(P);
849 
850     if (Param->hasDefaultArg()) {
851       // When we see an optional default argument, put that argument and
852       // the remaining default arguments into a new, optional string.
853       CodeCompletionString *Opt = new CodeCompletionString;
854       CCStr->AddOptionalChunk(std::auto_ptr<CodeCompletionString>(Opt));
855       CCStr = Opt;
856     }
857 
858     if (P != 0)
859       CCStr->AddChunk(Chunk(CodeCompletionString::CK_Comma));
860 
861     // Format the placeholder string.
862     std::string PlaceholderStr;
863     if (Param->getIdentifier())
864       PlaceholderStr = Param->getIdentifier()->getName();
865 
866     Param->getType().getAsStringInternal(PlaceholderStr,
867                                          Context.PrintingPolicy);
868 
869     // Add the placeholder string.
870     CCStr->AddPlaceholderChunk(PlaceholderStr);
871   }
872 
873   if (const FunctionProtoType *Proto
874         = Function->getType()->getAs<FunctionProtoType>())
875     if (Proto->isVariadic())
876       CCStr->AddPlaceholderChunk(", ...");
877 }
878 
879 /// \brief Add template parameter chunks to the given code completion string.
880 static void AddTemplateParameterChunks(ASTContext &Context,
881                                        TemplateDecl *Template,
882                                        CodeCompletionString *Result,
883                                        unsigned MaxParameters = 0) {
884   typedef CodeCompletionString::Chunk Chunk;
885 
886   CodeCompletionString *CCStr = Result;
887   bool FirstParameter = true;
888 
889   TemplateParameterList *Params = Template->getTemplateParameters();
890   TemplateParameterList::iterator PEnd = Params->end();
891   if (MaxParameters)
892     PEnd = Params->begin() + MaxParameters;
893   for (TemplateParameterList::iterator P = Params->begin(); P != PEnd; ++P) {
894     bool HasDefaultArg = false;
895     std::string PlaceholderStr;
896     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*P)) {
897       if (TTP->wasDeclaredWithTypename())
898         PlaceholderStr = "typename";
899       else
900         PlaceholderStr = "class";
901 
902       if (TTP->getIdentifier()) {
903         PlaceholderStr += ' ';
904         PlaceholderStr += TTP->getIdentifier()->getName();
905       }
906 
907       HasDefaultArg = TTP->hasDefaultArgument();
908     } else if (NonTypeTemplateParmDecl *NTTP
909                = dyn_cast<NonTypeTemplateParmDecl>(*P)) {
910       if (NTTP->getIdentifier())
911         PlaceholderStr = NTTP->getIdentifier()->getName();
912       NTTP->getType().getAsStringInternal(PlaceholderStr,
913                                           Context.PrintingPolicy);
914       HasDefaultArg = NTTP->hasDefaultArgument();
915     } else {
916       assert(isa<TemplateTemplateParmDecl>(*P));
917       TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(*P);
918 
919       // Since putting the template argument list into the placeholder would
920       // be very, very long, we just use an abbreviation.
921       PlaceholderStr = "template<...> class";
922       if (TTP->getIdentifier()) {
923         PlaceholderStr += ' ';
924         PlaceholderStr += TTP->getIdentifier()->getName();
925       }
926 
927       HasDefaultArg = TTP->hasDefaultArgument();
928     }
929 
930     if (HasDefaultArg) {
931       // When we see an optional default argument, put that argument and
932       // the remaining default arguments into a new, optional string.
933       CodeCompletionString *Opt = new CodeCompletionString;
934       CCStr->AddOptionalChunk(std::auto_ptr<CodeCompletionString>(Opt));
935       CCStr = Opt;
936     }
937 
938     if (FirstParameter)
939       FirstParameter = false;
940     else
941       CCStr->AddChunk(Chunk(CodeCompletionString::CK_Comma));
942 
943     // Add the placeholder string.
944     CCStr->AddPlaceholderChunk(PlaceholderStr);
945   }
946 }
947 
948 /// \brief Add a qualifier to the given code-completion string, if the
949 /// provided nested-name-specifier is non-NULL.
950 static void
951 AddQualifierToCompletionString(CodeCompletionString *Result,
952                                NestedNameSpecifier *Qualifier,
953                                bool QualifierIsInformative,
954                                ASTContext &Context) {
955   if (!Qualifier)
956     return;
957 
958   std::string PrintedNNS;
959   {
960     llvm::raw_string_ostream OS(PrintedNNS);
961     Qualifier->print(OS, Context.PrintingPolicy);
962   }
963   if (QualifierIsInformative)
964     Result->AddInformativeChunk(PrintedNNS);
965   else
966     Result->AddTextChunk(PrintedNNS);
967 }
968 
969 static void AddFunctionTypeQualsToCompletionString(CodeCompletionString *Result,
970                                                    FunctionDecl *Function) {
971   const FunctionProtoType *Proto
972     = Function->getType()->getAs<FunctionProtoType>();
973   if (!Proto || !Proto->getTypeQuals())
974     return;
975 
976   std::string QualsStr;
977   if (Proto->getTypeQuals() & Qualifiers::Const)
978     QualsStr += " const";
979   if (Proto->getTypeQuals() & Qualifiers::Volatile)
980     QualsStr += " volatile";
981   if (Proto->getTypeQuals() & Qualifiers::Restrict)
982     QualsStr += " restrict";
983   Result->AddInformativeChunk(QualsStr);
984 }
985 
986 /// \brief If possible, create a new code completion string for the given
987 /// result.
988 ///
989 /// \returns Either a new, heap-allocated code completion string describing
990 /// how to use this result, or NULL to indicate that the string or name of the
991 /// result is all that is needed.
992 CodeCompletionString *
993 CodeCompleteConsumer::Result::CreateCodeCompletionString(Sema &S) {
994   typedef CodeCompletionString::Chunk Chunk;
995 
996   if (Kind == RK_Pattern)
997     return Pattern->Clone();
998 
999   CodeCompletionString *Result = new CodeCompletionString;
1000 
1001   if (Kind == RK_Keyword) {
1002     Result->AddTypedTextChunk(Keyword);
1003     return Result;
1004   }
1005 
1006   if (Kind == RK_Macro) {
1007     MacroInfo *MI = S.PP.getMacroInfo(Macro);
1008     assert(MI && "Not a macro?");
1009 
1010     Result->AddTypedTextChunk(Macro->getName());
1011 
1012     if (!MI->isFunctionLike())
1013       return Result;
1014 
1015     // Format a function-like macro with placeholders for the arguments.
1016     Result->AddChunk(Chunk(CodeCompletionString::CK_LeftParen));
1017     for (MacroInfo::arg_iterator A = MI->arg_begin(), AEnd = MI->arg_end();
1018          A != AEnd; ++A) {
1019       if (A != MI->arg_begin())
1020         Result->AddChunk(Chunk(CodeCompletionString::CK_Comma));
1021 
1022       if (!MI->isVariadic() || A != AEnd - 1) {
1023         // Non-variadic argument.
1024         Result->AddPlaceholderChunk((*A)->getName());
1025         continue;
1026       }
1027 
1028       // Variadic argument; cope with the different between GNU and C99
1029       // variadic macros, providing a single placeholder for the rest of the
1030       // arguments.
1031       if ((*A)->isStr("__VA_ARGS__"))
1032         Result->AddPlaceholderChunk("...");
1033       else {
1034         std::string Arg = (*A)->getName();
1035         Arg += "...";
1036         Result->AddPlaceholderChunk(Arg);
1037       }
1038     }
1039     Result->AddChunk(Chunk(CodeCompletionString::CK_RightParen));
1040     return Result;
1041   }
1042 
1043   assert(Kind == RK_Declaration && "Missed a macro kind?");
1044   NamedDecl *ND = Declaration;
1045 
1046   if (StartsNestedNameSpecifier) {
1047     Result->AddTypedTextChunk(ND->getNameAsString());
1048     Result->AddTextChunk("::");
1049     return Result;
1050   }
1051 
1052   if (FunctionDecl *Function = dyn_cast<FunctionDecl>(ND)) {
1053     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
1054                                    S.Context);
1055     Result->AddTypedTextChunk(Function->getNameAsString());
1056     Result->AddChunk(Chunk(CodeCompletionString::CK_LeftParen));
1057     AddFunctionParameterChunks(S.Context, Function, Result);
1058     Result->AddChunk(Chunk(CodeCompletionString::CK_RightParen));
1059     AddFunctionTypeQualsToCompletionString(Result, Function);
1060     return Result;
1061   }
1062 
1063   if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(ND)) {
1064     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
1065                                    S.Context);
1066     FunctionDecl *Function = FunTmpl->getTemplatedDecl();
1067     Result->AddTypedTextChunk(Function->getNameAsString());
1068 
1069     // Figure out which template parameters are deduced (or have default
1070     // arguments).
1071     llvm::SmallVector<bool, 16> Deduced;
1072     S.MarkDeducedTemplateParameters(FunTmpl, Deduced);
1073     unsigned LastDeducibleArgument;
1074     for (LastDeducibleArgument = Deduced.size(); LastDeducibleArgument > 0;
1075          --LastDeducibleArgument) {
1076       if (!Deduced[LastDeducibleArgument - 1]) {
1077         // C++0x: Figure out if the template argument has a default. If so,
1078         // the user doesn't need to type this argument.
1079         // FIXME: We need to abstract template parameters better!
1080         bool HasDefaultArg = false;
1081         NamedDecl *Param = FunTmpl->getTemplateParameters()->getParam(
1082                                                                       LastDeducibleArgument - 1);
1083         if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param))
1084           HasDefaultArg = TTP->hasDefaultArgument();
1085         else if (NonTypeTemplateParmDecl *NTTP
1086                  = dyn_cast<NonTypeTemplateParmDecl>(Param))
1087           HasDefaultArg = NTTP->hasDefaultArgument();
1088         else {
1089           assert(isa<TemplateTemplateParmDecl>(Param));
1090           HasDefaultArg
1091             = cast<TemplateTemplateParmDecl>(Param)->hasDefaultArgument();
1092         }
1093 
1094         if (!HasDefaultArg)
1095           break;
1096       }
1097     }
1098 
1099     if (LastDeducibleArgument) {
1100       // Some of the function template arguments cannot be deduced from a
1101       // function call, so we introduce an explicit template argument list
1102       // containing all of the arguments up to the first deducible argument.
1103       Result->AddChunk(Chunk(CodeCompletionString::CK_LeftAngle));
1104       AddTemplateParameterChunks(S.Context, FunTmpl, Result,
1105                                  LastDeducibleArgument);
1106       Result->AddChunk(Chunk(CodeCompletionString::CK_RightAngle));
1107     }
1108 
1109     // Add the function parameters
1110     Result->AddChunk(Chunk(CodeCompletionString::CK_LeftParen));
1111     AddFunctionParameterChunks(S.Context, Function, Result);
1112     Result->AddChunk(Chunk(CodeCompletionString::CK_RightParen));
1113     AddFunctionTypeQualsToCompletionString(Result, Function);
1114     return Result;
1115   }
1116 
1117   if (TemplateDecl *Template = dyn_cast<TemplateDecl>(ND)) {
1118     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
1119                                    S.Context);
1120     Result->AddTypedTextChunk(Template->getNameAsString());
1121     Result->AddChunk(Chunk(CodeCompletionString::CK_LeftAngle));
1122     AddTemplateParameterChunks(S.Context, Template, Result);
1123     Result->AddChunk(Chunk(CodeCompletionString::CK_RightAngle));
1124     return Result;
1125   }
1126 
1127   if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(ND)) {
1128     Selector Sel = Method->getSelector();
1129     if (Sel.isUnarySelector()) {
1130       Result->AddTypedTextChunk(Sel.getIdentifierInfoForSlot(0)->getName());
1131       return Result;
1132     }
1133 
1134     std::string SelName = Sel.getIdentifierInfoForSlot(0)->getName().str();
1135     SelName += ':';
1136     if (StartParameter == 0)
1137       Result->AddTypedTextChunk(SelName);
1138     else {
1139       Result->AddInformativeChunk(SelName);
1140 
1141       // If there is only one parameter, and we're past it, add an empty
1142       // typed-text chunk since there is nothing to type.
1143       if (Method->param_size() == 1)
1144         Result->AddTypedTextChunk("");
1145     }
1146     unsigned Idx = 0;
1147     for (ObjCMethodDecl::param_iterator P = Method->param_begin(),
1148                                      PEnd = Method->param_end();
1149          P != PEnd; (void)++P, ++Idx) {
1150       if (Idx > 0) {
1151         std::string Keyword;
1152         if (Idx > StartParameter)
1153           Keyword = " ";
1154         if (IdentifierInfo *II = Sel.getIdentifierInfoForSlot(Idx))
1155           Keyword += II->getName().str();
1156         Keyword += ":";
1157         if (Idx < StartParameter || AllParametersAreInformative) {
1158           Result->AddInformativeChunk(Keyword);
1159         } else if (Idx == StartParameter)
1160           Result->AddTypedTextChunk(Keyword);
1161         else
1162           Result->AddTextChunk(Keyword);
1163       }
1164 
1165       // If we're before the starting parameter, skip the placeholder.
1166       if (Idx < StartParameter)
1167         continue;
1168 
1169       std::string Arg;
1170       (*P)->getType().getAsStringInternal(Arg, S.Context.PrintingPolicy);
1171       Arg = "(" + Arg + ")";
1172       if (IdentifierInfo *II = (*P)->getIdentifier())
1173         Arg += II->getName().str();
1174       if (AllParametersAreInformative)
1175         Result->AddInformativeChunk(Arg);
1176       else
1177         Result->AddPlaceholderChunk(Arg);
1178     }
1179 
1180     return Result;
1181   }
1182 
1183   if (Qualifier)
1184     AddQualifierToCompletionString(Result, Qualifier, QualifierIsInformative,
1185                                    S.Context);
1186 
1187   Result->AddTypedTextChunk(ND->getNameAsString());
1188   return Result;
1189 }
1190 
1191 CodeCompletionString *
1192 CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(
1193                                                           unsigned CurrentArg,
1194                                                                Sema &S) const {
1195   typedef CodeCompletionString::Chunk Chunk;
1196 
1197   CodeCompletionString *Result = new CodeCompletionString;
1198   FunctionDecl *FDecl = getFunction();
1199   const FunctionProtoType *Proto
1200     = dyn_cast<FunctionProtoType>(getFunctionType());
1201   if (!FDecl && !Proto) {
1202     // Function without a prototype. Just give the return type and a
1203     // highlighted ellipsis.
1204     const FunctionType *FT = getFunctionType();
1205     Result->AddTextChunk(
1206             FT->getResultType().getAsString(S.Context.PrintingPolicy));
1207     Result->AddChunk(Chunk(CodeCompletionString::CK_LeftParen));
1208     Result->AddChunk(Chunk(CodeCompletionString::CK_CurrentParameter, "..."));
1209     Result->AddChunk(Chunk(CodeCompletionString::CK_RightParen));
1210     return Result;
1211   }
1212 
1213   if (FDecl)
1214     Result->AddTextChunk(FDecl->getNameAsString());
1215   else
1216     Result->AddTextChunk(
1217          Proto->getResultType().getAsString(S.Context.PrintingPolicy));
1218 
1219   Result->AddChunk(Chunk(CodeCompletionString::CK_LeftParen));
1220   unsigned NumParams = FDecl? FDecl->getNumParams() : Proto->getNumArgs();
1221   for (unsigned I = 0; I != NumParams; ++I) {
1222     if (I)
1223       Result->AddChunk(Chunk(CodeCompletionString::CK_Comma));
1224 
1225     std::string ArgString;
1226     QualType ArgType;
1227 
1228     if (FDecl) {
1229       ArgString = FDecl->getParamDecl(I)->getNameAsString();
1230       ArgType = FDecl->getParamDecl(I)->getOriginalType();
1231     } else {
1232       ArgType = Proto->getArgType(I);
1233     }
1234 
1235     ArgType.getAsStringInternal(ArgString, S.Context.PrintingPolicy);
1236 
1237     if (I == CurrentArg)
1238       Result->AddChunk(Chunk(CodeCompletionString::CK_CurrentParameter,
1239                              ArgString));
1240     else
1241       Result->AddTextChunk(ArgString);
1242   }
1243 
1244   if (Proto && Proto->isVariadic()) {
1245     Result->AddChunk(Chunk(CodeCompletionString::CK_Comma));
1246     if (CurrentArg < NumParams)
1247       Result->AddTextChunk("...");
1248     else
1249       Result->AddChunk(Chunk(CodeCompletionString::CK_CurrentParameter, "..."));
1250   }
1251   Result->AddChunk(Chunk(CodeCompletionString::CK_RightParen));
1252 
1253   return Result;
1254 }
1255 
1256 namespace {
1257   struct SortCodeCompleteResult {
1258     typedef CodeCompleteConsumer::Result Result;
1259 
1260     bool isEarlierDeclarationName(DeclarationName X, DeclarationName Y) const {
1261       Selector XSel = X.getObjCSelector();
1262       Selector YSel = Y.getObjCSelector();
1263       if (!XSel.isNull() && !YSel.isNull()) {
1264         // We are comparing two selectors.
1265         unsigned N = std::min(XSel.getNumArgs(), YSel.getNumArgs());
1266         if (N == 0)
1267           ++N;
1268         for (unsigned I = 0; I != N; ++I) {
1269           IdentifierInfo *XId = XSel.getIdentifierInfoForSlot(I);
1270           IdentifierInfo *YId = YSel.getIdentifierInfoForSlot(I);
1271           if (!XId || !YId)
1272             return XId && !YId;
1273 
1274           switch (XId->getName().compare_lower(YId->getName())) {
1275           case -1: return true;
1276           case 1: return false;
1277           default: break;
1278           }
1279         }
1280 
1281         return XSel.getNumArgs() < YSel.getNumArgs();
1282       }
1283 
1284       // For non-selectors, order by kind.
1285       if (X.getNameKind() != Y.getNameKind())
1286         return X.getNameKind() < Y.getNameKind();
1287 
1288       // Order identifiers by comparison of their lowercased names.
1289       if (IdentifierInfo *XId = X.getAsIdentifierInfo())
1290         return XId->getName().compare_lower(
1291                                      Y.getAsIdentifierInfo()->getName()) < 0;
1292 
1293       // Order overloaded operators by the order in which they appear
1294       // in our list of operators.
1295       if (OverloadedOperatorKind XOp = X.getCXXOverloadedOperator())
1296         return XOp < Y.getCXXOverloadedOperator();
1297 
1298       // Order C++0x user-defined literal operators lexically by their
1299       // lowercased suffixes.
1300       if (IdentifierInfo *XLit = X.getCXXLiteralIdentifier())
1301         return XLit->getName().compare_lower(
1302                                   Y.getCXXLiteralIdentifier()->getName()) < 0;
1303 
1304       // The only stable ordering we have is to turn the name into a
1305       // string and then compare the lower-case strings. This is
1306       // inefficient, but thankfully does not happen too often.
1307       return llvm::StringRef(X.getAsString()).compare_lower(
1308                                                  Y.getAsString()) < 0;
1309     }
1310 
1311     bool operator()(const Result &X, const Result &Y) const {
1312       // Sort first by rank.
1313       if (X.Rank < Y.Rank)
1314         return true;
1315       else if (X.Rank > Y.Rank)
1316         return false;
1317 
1318       // We use a special ordering for keywords and patterns, based on the
1319       // typed text.
1320       if ((X.Kind == Result::RK_Keyword || X.Kind == Result::RK_Pattern) &&
1321           (Y.Kind == Result::RK_Keyword || Y.Kind == Result::RK_Pattern)) {
1322         const char *XStr = (X.Kind == Result::RK_Keyword)? X.Keyword
1323                                                    : X.Pattern->getTypedText();
1324         const char *YStr = (Y.Kind == Result::RK_Keyword)? Y.Keyword
1325                                                    : Y.Pattern->getTypedText();
1326         return llvm::StringRef(XStr).compare_lower(YStr) < 0;
1327       }
1328 
1329       // Result kinds are ordered by decreasing importance.
1330       if (X.Kind < Y.Kind)
1331         return true;
1332       else if (X.Kind > Y.Kind)
1333         return false;
1334 
1335       // Non-hidden names precede hidden names.
1336       if (X.Hidden != Y.Hidden)
1337         return !X.Hidden;
1338 
1339       // Non-nested-name-specifiers precede nested-name-specifiers.
1340       if (X.StartsNestedNameSpecifier != Y.StartsNestedNameSpecifier)
1341         return !X.StartsNestedNameSpecifier;
1342 
1343       // Ordering depends on the kind of result.
1344       switch (X.Kind) {
1345         case Result::RK_Declaration:
1346           // Order based on the declaration names.
1347           return isEarlierDeclarationName(X.Declaration->getDeclName(),
1348                                           Y.Declaration->getDeclName());
1349 
1350         case Result::RK_Macro:
1351           return X.Macro->getName().compare_lower(Y.Macro->getName()) < 0;
1352 
1353         case Result::RK_Keyword:
1354         case Result::RK_Pattern:
1355           llvm::llvm_unreachable("Result kinds handled above");
1356           break;
1357       }
1358 
1359       // Silence GCC warning.
1360       return false;
1361     }
1362   };
1363 }
1364 
1365 static void AddMacroResults(Preprocessor &PP, unsigned Rank,
1366                             ResultBuilder &Results) {
1367   Results.EnterNewScope();
1368   for (Preprocessor::macro_iterator M = PP.macro_begin(),
1369                                  MEnd = PP.macro_end();
1370        M != MEnd; ++M)
1371     Results.MaybeAddResult(CodeCompleteConsumer::Result(M->first, Rank));
1372   Results.ExitScope();
1373 }
1374 
1375 static void HandleCodeCompleteResults(Sema *S,
1376                                       CodeCompleteConsumer *CodeCompleter,
1377                                      CodeCompleteConsumer::Result *Results,
1378                                      unsigned NumResults) {
1379   // Sort the results by rank/kind/etc.
1380   std::stable_sort(Results, Results + NumResults, SortCodeCompleteResult());
1381 
1382   if (CodeCompleter)
1383     CodeCompleter->ProcessCodeCompleteResults(*S, Results, NumResults);
1384 
1385   for (unsigned I = 0; I != NumResults; ++I)
1386     Results[I].Destroy();
1387 }
1388 
1389 void Sema::CodeCompleteOrdinaryName(Scope *S) {
1390   typedef CodeCompleteConsumer::Result Result;
1391   ResultBuilder Results(*this, &ResultBuilder::IsOrdinaryName);
1392   unsigned NextRank = CollectLookupResults(S, Context.getTranslationUnitDecl(),
1393                                            0, CurContext, Results);
1394 
1395   Results.EnterNewScope();
1396   AddTypeSpecifierResults(getLangOptions(), NextRank, Results);
1397 
1398   if (getLangOptions().ObjC1) {
1399     // Add the "super" keyword, if appropriate.
1400     if (ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(CurContext))
1401       if (Method->getClassInterface()->getSuperClass())
1402         Results.MaybeAddResult(Result("super", NextRank));
1403   }
1404 
1405   Results.ExitScope();
1406 
1407   if (CodeCompleter->includeMacros())
1408     AddMacroResults(PP, NextRank, Results);
1409   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1410 }
1411 
1412 static void AddObjCProperties(ObjCContainerDecl *Container,
1413                               bool AllowCategories,
1414                               DeclContext *CurContext,
1415                               ResultBuilder &Results) {
1416   typedef CodeCompleteConsumer::Result Result;
1417 
1418   // Add properties in this container.
1419   for (ObjCContainerDecl::prop_iterator P = Container->prop_begin(),
1420                                      PEnd = Container->prop_end();
1421        P != PEnd;
1422        ++P)
1423     Results.MaybeAddResult(Result(*P, 0), CurContext);
1424 
1425   // Add properties in referenced protocols.
1426   if (ObjCProtocolDecl *Protocol = dyn_cast<ObjCProtocolDecl>(Container)) {
1427     for (ObjCProtocolDecl::protocol_iterator P = Protocol->protocol_begin(),
1428                                           PEnd = Protocol->protocol_end();
1429          P != PEnd; ++P)
1430       AddObjCProperties(*P, AllowCategories, CurContext, Results);
1431   } else if (ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container)){
1432     if (AllowCategories) {
1433       // Look through categories.
1434       for (ObjCCategoryDecl *Category = IFace->getCategoryList();
1435            Category; Category = Category->getNextClassCategory())
1436         AddObjCProperties(Category, AllowCategories, CurContext, Results);
1437     }
1438 
1439     // Look through protocols.
1440     for (ObjCInterfaceDecl::protocol_iterator I = IFace->protocol_begin(),
1441                                               E = IFace->protocol_end();
1442          I != E; ++I)
1443       AddObjCProperties(*I, AllowCategories, CurContext, Results);
1444 
1445     // Look in the superclass.
1446     if (IFace->getSuperClass())
1447       AddObjCProperties(IFace->getSuperClass(), AllowCategories, CurContext,
1448                         Results);
1449   } else if (const ObjCCategoryDecl *Category
1450                                     = dyn_cast<ObjCCategoryDecl>(Container)) {
1451     // Look through protocols.
1452     for (ObjCInterfaceDecl::protocol_iterator P = Category->protocol_begin(),
1453                                            PEnd = Category->protocol_end();
1454          P != PEnd; ++P)
1455       AddObjCProperties(*P, AllowCategories, CurContext, Results);
1456   }
1457 }
1458 
1459 void Sema::CodeCompleteMemberReferenceExpr(Scope *S, ExprTy *BaseE,
1460                                            SourceLocation OpLoc,
1461                                            bool IsArrow) {
1462   if (!BaseE || !CodeCompleter)
1463     return;
1464 
1465   typedef CodeCompleteConsumer::Result Result;
1466 
1467   Expr *Base = static_cast<Expr *>(BaseE);
1468   QualType BaseType = Base->getType();
1469 
1470   if (IsArrow) {
1471     if (const PointerType *Ptr = BaseType->getAs<PointerType>())
1472       BaseType = Ptr->getPointeeType();
1473     else if (BaseType->isObjCObjectPointerType())
1474     /*Do nothing*/ ;
1475     else
1476       return;
1477   }
1478 
1479   ResultBuilder Results(*this, &ResultBuilder::IsMember);
1480   unsigned NextRank = 0;
1481 
1482   Results.EnterNewScope();
1483   if (const RecordType *Record = BaseType->getAs<RecordType>()) {
1484     // Access to a C/C++ class, struct, or union.
1485     NextRank = CollectMemberLookupResults(Record->getDecl(), NextRank,
1486                                           Record->getDecl(), Results);
1487 
1488     if (getLangOptions().CPlusPlus) {
1489       if (!Results.empty()) {
1490         // The "template" keyword can follow "->" or "." in the grammar.
1491         // However, we only want to suggest the template keyword if something
1492         // is dependent.
1493         bool IsDependent = BaseType->isDependentType();
1494         if (!IsDependent) {
1495           for (Scope *DepScope = S; DepScope; DepScope = DepScope->getParent())
1496             if (DeclContext *Ctx = (DeclContext *)DepScope->getEntity()) {
1497               IsDependent = Ctx->isDependentContext();
1498               break;
1499             }
1500         }
1501 
1502         if (IsDependent)
1503           Results.MaybeAddResult(Result("template", NextRank++));
1504       }
1505 
1506       // We could have the start of a nested-name-specifier. Add those
1507       // results as well.
1508       // FIXME: We should really walk base classes to produce
1509       // nested-name-specifiers so that we produce more-precise results.
1510       Results.setFilter(&ResultBuilder::IsNestedNameSpecifier);
1511       CollectLookupResults(S, Context.getTranslationUnitDecl(), NextRank,
1512                            CurContext, Results);
1513     }
1514   } else if (!IsArrow && BaseType->getAsObjCInterfacePointerType()) {
1515     // Objective-C property reference.
1516 
1517     // Add property results based on our interface.
1518     const ObjCObjectPointerType *ObjCPtr
1519       = BaseType->getAsObjCInterfacePointerType();
1520     assert(ObjCPtr && "Non-NULL pointer guaranteed above!");
1521     AddObjCProperties(ObjCPtr->getInterfaceDecl(), true, CurContext, Results);
1522 
1523     // Add properties from the protocols in a qualified interface.
1524     for (ObjCObjectPointerType::qual_iterator I = ObjCPtr->qual_begin(),
1525                                               E = ObjCPtr->qual_end();
1526          I != E; ++I)
1527       AddObjCProperties(*I, true, CurContext, Results);
1528 
1529     // FIXME: We could (should?) also look for "implicit" properties, identified
1530     // only by the presence of nullary and unary selectors.
1531   } else if ((IsArrow && BaseType->isObjCObjectPointerType()) ||
1532              (!IsArrow && BaseType->isObjCInterfaceType())) {
1533     // Objective-C instance variable access.
1534     ObjCInterfaceDecl *Class = 0;
1535     if (const ObjCObjectPointerType *ObjCPtr
1536                                     = BaseType->getAs<ObjCObjectPointerType>())
1537       Class = ObjCPtr->getInterfaceDecl();
1538     else
1539       Class = BaseType->getAs<ObjCInterfaceType>()->getDecl();
1540 
1541     // Add all ivars from this class and its superclasses.
1542     for (; Class; Class = Class->getSuperClass()) {
1543       for (ObjCInterfaceDecl::ivar_iterator IVar = Class->ivar_begin(),
1544                                          IVarEnd = Class->ivar_end();
1545            IVar != IVarEnd; ++IVar)
1546         Results.MaybeAddResult(Result(*IVar, 0), CurContext);
1547     }
1548   }
1549 
1550   // FIXME: How do we cope with isa?
1551 
1552   Results.ExitScope();
1553 
1554   // Add macros
1555   if (CodeCompleter->includeMacros())
1556     AddMacroResults(PP, NextRank, Results);
1557 
1558   // Hand off the results found for code completion.
1559   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1560 }
1561 
1562 void Sema::CodeCompleteTag(Scope *S, unsigned TagSpec) {
1563   if (!CodeCompleter)
1564     return;
1565 
1566   typedef CodeCompleteConsumer::Result Result;
1567   ResultBuilder::LookupFilter Filter = 0;
1568   switch ((DeclSpec::TST)TagSpec) {
1569   case DeclSpec::TST_enum:
1570     Filter = &ResultBuilder::IsEnum;
1571     break;
1572 
1573   case DeclSpec::TST_union:
1574     Filter = &ResultBuilder::IsUnion;
1575     break;
1576 
1577   case DeclSpec::TST_struct:
1578   case DeclSpec::TST_class:
1579     Filter = &ResultBuilder::IsClassOrStruct;
1580     break;
1581 
1582   default:
1583     assert(false && "Unknown type specifier kind in CodeCompleteTag");
1584     return;
1585   }
1586 
1587   ResultBuilder Results(*this, Filter);
1588   unsigned NextRank = CollectLookupResults(S, Context.getTranslationUnitDecl(),
1589                                            0, CurContext, Results);
1590 
1591   if (getLangOptions().CPlusPlus) {
1592     // We could have the start of a nested-name-specifier. Add those
1593     // results as well.
1594     Results.setFilter(&ResultBuilder::IsNestedNameSpecifier);
1595     NextRank = CollectLookupResults(S, Context.getTranslationUnitDecl(),
1596                                     NextRank, CurContext, Results);
1597   }
1598 
1599   if (CodeCompleter->includeMacros())
1600     AddMacroResults(PP, NextRank, Results);
1601   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1602 }
1603 
1604 void Sema::CodeCompleteCase(Scope *S) {
1605   if (getSwitchStack().empty() || !CodeCompleter)
1606     return;
1607 
1608   SwitchStmt *Switch = getSwitchStack().back();
1609   if (!Switch->getCond()->getType()->isEnumeralType())
1610     return;
1611 
1612   // Code-complete the cases of a switch statement over an enumeration type
1613   // by providing the list of
1614   EnumDecl *Enum = Switch->getCond()->getType()->getAs<EnumType>()->getDecl();
1615 
1616   // Determine which enumerators we have already seen in the switch statement.
1617   // FIXME: Ideally, we would also be able to look *past* the code-completion
1618   // token, in case we are code-completing in the middle of the switch and not
1619   // at the end. However, we aren't able to do so at the moment.
1620   llvm::SmallPtrSet<EnumConstantDecl *, 8> EnumeratorsSeen;
1621   NestedNameSpecifier *Qualifier = 0;
1622   for (SwitchCase *SC = Switch->getSwitchCaseList(); SC;
1623        SC = SC->getNextSwitchCase()) {
1624     CaseStmt *Case = dyn_cast<CaseStmt>(SC);
1625     if (!Case)
1626       continue;
1627 
1628     Expr *CaseVal = Case->getLHS()->IgnoreParenCasts();
1629     if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CaseVal))
1630       if (EnumConstantDecl *Enumerator
1631             = dyn_cast<EnumConstantDecl>(DRE->getDecl())) {
1632         // We look into the AST of the case statement to determine which
1633         // enumerator was named. Alternatively, we could compute the value of
1634         // the integral constant expression, then compare it against the
1635         // values of each enumerator. However, value-based approach would not
1636         // work as well with C++ templates where enumerators declared within a
1637         // template are type- and value-dependent.
1638         EnumeratorsSeen.insert(Enumerator);
1639 
1640         // If this is a qualified-id, keep track of the nested-name-specifier
1641         // so that we can reproduce it as part of code completion, e.g.,
1642         //
1643         //   switch (TagD.getKind()) {
1644         //     case TagDecl::TK_enum:
1645         //       break;
1646         //     case XXX
1647         //
1648         // At the XXX, our completions are TagDecl::TK_union,
1649         // TagDecl::TK_struct, and TagDecl::TK_class, rather than TK_union,
1650         // TK_struct, and TK_class.
1651         Qualifier = DRE->getQualifier();
1652       }
1653   }
1654 
1655   if (getLangOptions().CPlusPlus && !Qualifier && EnumeratorsSeen.empty()) {
1656     // If there are no prior enumerators in C++, check whether we have to
1657     // qualify the names of the enumerators that we suggest, because they
1658     // may not be visible in this scope.
1659     Qualifier = getRequiredQualification(Context, CurContext,
1660                                          Enum->getDeclContext());
1661 
1662     // FIXME: Scoped enums need to start with "EnumDecl" as the context!
1663   }
1664 
1665   // Add any enumerators that have not yet been mentioned.
1666   ResultBuilder Results(*this);
1667   Results.EnterNewScope();
1668   for (EnumDecl::enumerator_iterator E = Enum->enumerator_begin(),
1669                                   EEnd = Enum->enumerator_end();
1670        E != EEnd; ++E) {
1671     if (EnumeratorsSeen.count(*E))
1672       continue;
1673 
1674     Results.MaybeAddResult(CodeCompleteConsumer::Result(*E, 0, Qualifier));
1675   }
1676   Results.ExitScope();
1677 
1678   if (CodeCompleter->includeMacros())
1679     AddMacroResults(PP, 1, Results);
1680   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1681 }
1682 
1683 namespace {
1684   struct IsBetterOverloadCandidate {
1685     Sema &S;
1686 
1687   public:
1688     explicit IsBetterOverloadCandidate(Sema &S) : S(S) { }
1689 
1690     bool
1691     operator()(const OverloadCandidate &X, const OverloadCandidate &Y) const {
1692       return S.isBetterOverloadCandidate(X, Y);
1693     }
1694   };
1695 }
1696 
1697 void Sema::CodeCompleteCall(Scope *S, ExprTy *FnIn,
1698                             ExprTy **ArgsIn, unsigned NumArgs) {
1699   if (!CodeCompleter)
1700     return;
1701 
1702   // When we're code-completing for a call, we fall back to ordinary
1703   // name code-completion whenever we can't produce specific
1704   // results. We may want to revisit this strategy in the future,
1705   // e.g., by merging the two kinds of results.
1706 
1707   Expr *Fn = (Expr *)FnIn;
1708   Expr **Args = (Expr **)ArgsIn;
1709 
1710   // Ignore type-dependent call expressions entirely.
1711   if (Fn->isTypeDependent() ||
1712       Expr::hasAnyTypeDependentArguments(Args, NumArgs)) {
1713     CodeCompleteOrdinaryName(S);
1714     return;
1715   }
1716 
1717   llvm::SmallVector<NamedDecl*,8> Fns;
1718   DeclarationName UnqualifiedName;
1719   NestedNameSpecifier *Qualifier;
1720   SourceRange QualifierRange;
1721   bool ArgumentDependentLookup;
1722   bool Overloaded;
1723   bool HasExplicitTemplateArgs;
1724   TemplateArgumentListInfo ExplicitTemplateArgs;
1725 
1726   DeconstructCallFunction(Fn, Fns, UnqualifiedName, Qualifier, QualifierRange,
1727                           ArgumentDependentLookup, Overloaded,
1728                           HasExplicitTemplateArgs, ExplicitTemplateArgs);
1729 
1730 
1731   // FIXME: What if we're calling something that isn't a function declaration?
1732   // FIXME: What if we're calling a pseudo-destructor?
1733   // FIXME: What if we're calling a member function?
1734 
1735   // Build an overload candidate set based on the functions we find.
1736   OverloadCandidateSet CandidateSet;
1737   AddOverloadedCallCandidates(Fns, UnqualifiedName,
1738                               ArgumentDependentLookup,
1739                        (HasExplicitTemplateArgs ? &ExplicitTemplateArgs : 0),
1740                               Args, NumArgs,
1741                               CandidateSet,
1742                               /*PartialOverloading=*/true);
1743 
1744   // Sort the overload candidate set by placing the best overloads first.
1745   std::stable_sort(CandidateSet.begin(), CandidateSet.end(),
1746                    IsBetterOverloadCandidate(*this));
1747 
1748   // Add the remaining viable overload candidates as code-completion reslults.
1749   typedef CodeCompleteConsumer::OverloadCandidate ResultCandidate;
1750   llvm::SmallVector<ResultCandidate, 8> Results;
1751 
1752   for (OverloadCandidateSet::iterator Cand = CandidateSet.begin(),
1753                                    CandEnd = CandidateSet.end();
1754        Cand != CandEnd; ++Cand) {
1755     if (Cand->Viable)
1756       Results.push_back(ResultCandidate(Cand->Function));
1757   }
1758 
1759   if (Results.empty())
1760     CodeCompleteOrdinaryName(S);
1761   else
1762     CodeCompleter->ProcessOverloadCandidates(*this, NumArgs, Results.data(),
1763                                              Results.size());
1764 }
1765 
1766 void Sema::CodeCompleteQualifiedId(Scope *S, const CXXScopeSpec &SS,
1767                                    bool EnteringContext) {
1768   if (!SS.getScopeRep() || !CodeCompleter)
1769     return;
1770 
1771   DeclContext *Ctx = computeDeclContext(SS, EnteringContext);
1772   if (!Ctx)
1773     return;
1774 
1775   // Try to instantiate any non-dependent declaration contexts before
1776   // we look in them.
1777   if (!isDependentScopeSpecifier(SS) && RequireCompleteDeclContext(SS))
1778     return;
1779 
1780   ResultBuilder Results(*this);
1781   unsigned NextRank = CollectMemberLookupResults(Ctx, 0, Ctx, Results);
1782 
1783   // The "template" keyword can follow "::" in the grammar, but only
1784   // put it into the grammar if the nested-name-specifier is dependent.
1785   NestedNameSpecifier *NNS = (NestedNameSpecifier *)SS.getScopeRep();
1786   if (!Results.empty() && NNS->isDependent())
1787     Results.MaybeAddResult(CodeCompleteConsumer::Result("template", NextRank));
1788 
1789   if (CodeCompleter->includeMacros())
1790     AddMacroResults(PP, NextRank + 1, Results);
1791   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1792 }
1793 
1794 void Sema::CodeCompleteUsing(Scope *S) {
1795   if (!CodeCompleter)
1796     return;
1797 
1798   ResultBuilder Results(*this, &ResultBuilder::IsNestedNameSpecifier);
1799   Results.EnterNewScope();
1800 
1801   // If we aren't in class scope, we could see the "namespace" keyword.
1802   if (!S->isClassScope())
1803     Results.MaybeAddResult(CodeCompleteConsumer::Result("namespace", 0));
1804 
1805   // After "using", we can see anything that would start a
1806   // nested-name-specifier.
1807   unsigned NextRank = CollectLookupResults(S, Context.getTranslationUnitDecl(),
1808                                            0, CurContext, Results);
1809   Results.ExitScope();
1810 
1811   if (CodeCompleter->includeMacros())
1812     AddMacroResults(PP, NextRank, Results);
1813   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1814 }
1815 
1816 void Sema::CodeCompleteUsingDirective(Scope *S) {
1817   if (!CodeCompleter)
1818     return;
1819 
1820   // After "using namespace", we expect to see a namespace name or namespace
1821   // alias.
1822   ResultBuilder Results(*this, &ResultBuilder::IsNamespaceOrAlias);
1823   Results.EnterNewScope();
1824   unsigned NextRank = CollectLookupResults(S, Context.getTranslationUnitDecl(),
1825                                            0, CurContext, Results);
1826   Results.ExitScope();
1827   if (CodeCompleter->includeMacros())
1828     AddMacroResults(PP, NextRank, Results);
1829   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1830 }
1831 
1832 void Sema::CodeCompleteNamespaceDecl(Scope *S)  {
1833   if (!CodeCompleter)
1834     return;
1835 
1836   ResultBuilder Results(*this, &ResultBuilder::IsNamespace);
1837   DeclContext *Ctx = (DeclContext *)S->getEntity();
1838   if (!S->getParent())
1839     Ctx = Context.getTranslationUnitDecl();
1840 
1841   if (Ctx && Ctx->isFileContext()) {
1842     // We only want to see those namespaces that have already been defined
1843     // within this scope, because its likely that the user is creating an
1844     // extended namespace declaration. Keep track of the most recent
1845     // definition of each namespace.
1846     std::map<NamespaceDecl *, NamespaceDecl *> OrigToLatest;
1847     for (DeclContext::specific_decl_iterator<NamespaceDecl>
1848          NS(Ctx->decls_begin()), NSEnd(Ctx->decls_end());
1849          NS != NSEnd; ++NS)
1850       OrigToLatest[NS->getOriginalNamespace()] = *NS;
1851 
1852     // Add the most recent definition (or extended definition) of each
1853     // namespace to the list of results.
1854     Results.EnterNewScope();
1855     for (std::map<NamespaceDecl *, NamespaceDecl *>::iterator
1856          NS = OrigToLatest.begin(), NSEnd = OrigToLatest.end();
1857          NS != NSEnd; ++NS)
1858       Results.MaybeAddResult(CodeCompleteConsumer::Result(NS->second, 0),
1859                              CurContext);
1860     Results.ExitScope();
1861   }
1862 
1863   if (CodeCompleter->includeMacros())
1864     AddMacroResults(PP, 1, Results);
1865   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1866 }
1867 
1868 void Sema::CodeCompleteNamespaceAliasDecl(Scope *S)  {
1869   if (!CodeCompleter)
1870     return;
1871 
1872   // After "namespace", we expect to see a namespace or alias.
1873   ResultBuilder Results(*this, &ResultBuilder::IsNamespaceOrAlias);
1874   unsigned NextRank = CollectLookupResults(S, Context.getTranslationUnitDecl(),
1875                                            0, CurContext, Results);
1876   if (CodeCompleter->includeMacros())
1877     AddMacroResults(PP, NextRank, Results);
1878   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1879 }
1880 
1881 void Sema::CodeCompleteOperatorName(Scope *S) {
1882   if (!CodeCompleter)
1883     return;
1884 
1885   typedef CodeCompleteConsumer::Result Result;
1886   ResultBuilder Results(*this, &ResultBuilder::IsType);
1887   Results.EnterNewScope();
1888 
1889   // Add the names of overloadable operators.
1890 #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly)      \
1891   if (std::strcmp(Spelling, "?"))                                                  \
1892     Results.MaybeAddResult(Result(Spelling, 0));
1893 #include "clang/Basic/OperatorKinds.def"
1894 
1895   // Add any type names visible from the current scope
1896   unsigned NextRank = CollectLookupResults(S, Context.getTranslationUnitDecl(),
1897                                            0, CurContext, Results);
1898 
1899   // Add any type specifiers
1900   AddTypeSpecifierResults(getLangOptions(), 0, Results);
1901 
1902   // Add any nested-name-specifiers
1903   Results.setFilter(&ResultBuilder::IsNestedNameSpecifier);
1904   NextRank = CollectLookupResults(S, Context.getTranslationUnitDecl(),
1905                                   NextRank + 1, CurContext, Results);
1906   Results.ExitScope();
1907 
1908   if (CodeCompleter->includeMacros())
1909     AddMacroResults(PP, NextRank, Results);
1910   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1911 }
1912 
1913 void Sema::CodeCompleteObjCAtDirective(Scope *S, DeclPtrTy ObjCImpDecl,
1914                                        bool InInterface) {
1915   typedef CodeCompleteConsumer::Result Result;
1916   ResultBuilder Results(*this);
1917   Results.EnterNewScope();
1918   if (ObjCImpDecl) {
1919     // Since we have an implementation, we can end it.
1920     Results.MaybeAddResult(Result("end", 0));
1921 
1922     CodeCompletionString *Pattern = 0;
1923     Decl *ImpDecl = ObjCImpDecl.getAs<Decl>();
1924     if (isa<ObjCImplementationDecl>(ImpDecl) ||
1925         isa<ObjCCategoryImplDecl>(ImpDecl)) {
1926       // @dynamic
1927       Pattern = new CodeCompletionString;
1928       Pattern->AddTypedTextChunk("dynamic");
1929       Pattern->AddTextChunk(" ");
1930       Pattern->AddPlaceholderChunk("property");
1931       Results.MaybeAddResult(Result(Pattern, 0));
1932 
1933       // @synthesize
1934       Pattern = new CodeCompletionString;
1935       Pattern->AddTypedTextChunk("synthesize");
1936       Pattern->AddTextChunk(" ");
1937       Pattern->AddPlaceholderChunk("property");
1938       Results.MaybeAddResult(Result(Pattern, 0));
1939     }
1940   } else if (InInterface) {
1941     // Since we have an interface or protocol, we can end it.
1942     Results.MaybeAddResult(Result("end", 0));
1943 
1944     if (LangOpts.ObjC2) {
1945       // @property
1946       Results.MaybeAddResult(Result("property", 0));
1947     }
1948 
1949     // @required
1950     Results.MaybeAddResult(Result("required", 0));
1951 
1952     // @optional
1953     Results.MaybeAddResult(Result("optional", 0));
1954   } else {
1955     CodeCompletionString *Pattern = 0;
1956 
1957     // @class name ;
1958     Pattern = new CodeCompletionString;
1959     Pattern->AddTypedTextChunk("class");
1960     Pattern->AddTextChunk(" ");
1961     Pattern->AddPlaceholderChunk("identifier");
1962     Pattern->AddTextChunk(";"); // add ';' chunk
1963     Results.MaybeAddResult(Result(Pattern, 0));
1964 
1965     // @interface name
1966     // FIXME: Could introduce the whole pattern, including superclasses and
1967     // such.
1968     Pattern = new CodeCompletionString;
1969     Pattern->AddTypedTextChunk("interface");
1970     Pattern->AddTextChunk(" ");
1971     Pattern->AddPlaceholderChunk("class");
1972     Results.MaybeAddResult(Result(Pattern, 0));
1973 
1974     // @protocol name
1975     Pattern = new CodeCompletionString;
1976     Pattern->AddTypedTextChunk("protocol");
1977     Pattern->AddTextChunk(" ");
1978     Pattern->AddPlaceholderChunk("protocol");
1979     Results.MaybeAddResult(Result(Pattern, 0));
1980 
1981     // @implementation name
1982     Pattern = new CodeCompletionString;
1983     Pattern->AddTypedTextChunk("implementation");
1984     Pattern->AddTextChunk(" ");
1985     Pattern->AddPlaceholderChunk("class");
1986     Results.MaybeAddResult(Result(Pattern, 0));
1987 
1988     // @compatibility_alias name
1989     Pattern = new CodeCompletionString;
1990     Pattern->AddTypedTextChunk("compatibility_alias");
1991     Pattern->AddTextChunk(" ");
1992     Pattern->AddPlaceholderChunk("alias");
1993     Pattern->AddTextChunk(" ");
1994     Pattern->AddPlaceholderChunk("class");
1995     Results.MaybeAddResult(Result(Pattern, 0));
1996   }
1997   Results.ExitScope();
1998   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
1999 }
2000 
2001 static void AddObjCExpressionResults(unsigned Rank, ResultBuilder &Results) {
2002   typedef CodeCompleteConsumer::Result Result;
2003   CodeCompletionString *Pattern = 0;
2004 
2005   // @encode ( type-name )
2006   Pattern = new CodeCompletionString;
2007   Pattern->AddTypedTextChunk("encode");
2008   Pattern->AddChunk(CodeCompletionString::CK_LeftParen);
2009   Pattern->AddPlaceholderChunk("type-name");
2010   Pattern->AddChunk(CodeCompletionString::CK_RightParen);
2011   Results.MaybeAddResult(Result(Pattern, Rank));
2012 
2013   // @protocol ( protocol-name )
2014   Pattern = new CodeCompletionString;
2015   Pattern->AddTypedTextChunk("protocol");
2016   Pattern->AddChunk(CodeCompletionString::CK_LeftParen);
2017   Pattern->AddPlaceholderChunk("protocol-name");
2018   Pattern->AddChunk(CodeCompletionString::CK_RightParen);
2019   Results.MaybeAddResult(Result(Pattern, Rank));
2020 
2021   // @selector ( selector )
2022   Pattern = new CodeCompletionString;
2023   Pattern->AddTypedTextChunk("selector");
2024   Pattern->AddChunk(CodeCompletionString::CK_LeftParen);
2025   Pattern->AddPlaceholderChunk("selector");
2026   Pattern->AddChunk(CodeCompletionString::CK_RightParen);
2027   Results.MaybeAddResult(Result(Pattern, Rank));
2028 }
2029 
2030 void Sema::CodeCompleteObjCAtStatement(Scope *S) {
2031   typedef CodeCompleteConsumer::Result Result;
2032   ResultBuilder Results(*this);
2033   Results.EnterNewScope();
2034 
2035   CodeCompletionString *Pattern = 0;
2036 
2037   // @try { statements } @catch ( declaration ) { statements } @finally
2038   //   { statements }
2039   Pattern = new CodeCompletionString;
2040   Pattern->AddTypedTextChunk("try");
2041   Pattern->AddChunk(CodeCompletionString::CK_LeftBrace);
2042   Pattern->AddPlaceholderChunk("statements");
2043   Pattern->AddChunk(CodeCompletionString::CK_RightBrace);
2044   Pattern->AddTextChunk("@catch");
2045   Pattern->AddChunk(CodeCompletionString::CK_LeftParen);
2046   Pattern->AddPlaceholderChunk("parameter");
2047   Pattern->AddChunk(CodeCompletionString::CK_RightParen);
2048   Pattern->AddChunk(CodeCompletionString::CK_LeftBrace);
2049   Pattern->AddPlaceholderChunk("statements");
2050   Pattern->AddChunk(CodeCompletionString::CK_RightBrace);
2051   Pattern->AddTextChunk("@finally");
2052   Pattern->AddChunk(CodeCompletionString::CK_LeftBrace);
2053   Pattern->AddPlaceholderChunk("statements");
2054   Pattern->AddChunk(CodeCompletionString::CK_RightBrace);
2055   Results.MaybeAddResult(Result(Pattern, 0));
2056 
2057   // @throw
2058   Pattern = new CodeCompletionString;
2059   Pattern->AddTypedTextChunk("throw");
2060   Pattern->AddTextChunk(" ");
2061   Pattern->AddPlaceholderChunk("expression");
2062   Pattern->AddTextChunk(";");
2063   Results.MaybeAddResult(Result(Pattern, 0)); // FIXME: add ';' chunk
2064 
2065   // @synchronized ( expression ) { statements }
2066   Pattern = new CodeCompletionString;
2067   Pattern->AddTypedTextChunk("synchronized");
2068   Pattern->AddTextChunk(" ");
2069   Pattern->AddChunk(CodeCompletionString::CK_LeftParen);
2070   Pattern->AddPlaceholderChunk("expression");
2071   Pattern->AddChunk(CodeCompletionString::CK_RightParen);
2072   Pattern->AddChunk(CodeCompletionString::CK_LeftBrace);
2073   Pattern->AddPlaceholderChunk("statements");
2074   Pattern->AddChunk(CodeCompletionString::CK_RightBrace);
2075   Results.MaybeAddResult(Result(Pattern, 0)); // FIXME: add ';' chunk
2076 
2077   AddObjCExpressionResults(0, Results);
2078   Results.ExitScope();
2079   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2080 }
2081 
2082 void Sema::CodeCompleteObjCAtExpression(Scope *S) {
2083   ResultBuilder Results(*this);
2084   Results.EnterNewScope();
2085   AddObjCExpressionResults(0, Results);
2086   Results.ExitScope();
2087   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2088 }
2089 
2090 /// \brief Determine whether the addition of the given flag to an Objective-C
2091 /// property's attributes will cause a conflict.
2092 static bool ObjCPropertyFlagConflicts(unsigned Attributes, unsigned NewFlag) {
2093   // Check if we've already added this flag.
2094   if (Attributes & NewFlag)
2095     return true;
2096 
2097   Attributes |= NewFlag;
2098 
2099   // Check for collisions with "readonly".
2100   if ((Attributes & ObjCDeclSpec::DQ_PR_readonly) &&
2101       (Attributes & (ObjCDeclSpec::DQ_PR_readwrite |
2102                      ObjCDeclSpec::DQ_PR_assign |
2103                      ObjCDeclSpec::DQ_PR_copy |
2104                      ObjCDeclSpec::DQ_PR_retain)))
2105     return true;
2106 
2107   // Check for more than one of { assign, copy, retain }.
2108   unsigned AssignCopyRetMask = Attributes & (ObjCDeclSpec::DQ_PR_assign |
2109                                              ObjCDeclSpec::DQ_PR_copy |
2110                                              ObjCDeclSpec::DQ_PR_retain);
2111   if (AssignCopyRetMask &&
2112       AssignCopyRetMask != ObjCDeclSpec::DQ_PR_assign &&
2113       AssignCopyRetMask != ObjCDeclSpec::DQ_PR_copy &&
2114       AssignCopyRetMask != ObjCDeclSpec::DQ_PR_retain)
2115     return true;
2116 
2117   return false;
2118 }
2119 
2120 void Sema::CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS) {
2121   if (!CodeCompleter)
2122     return;
2123 
2124   unsigned Attributes = ODS.getPropertyAttributes();
2125 
2126   typedef CodeCompleteConsumer::Result Result;
2127   ResultBuilder Results(*this);
2128   Results.EnterNewScope();
2129   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_readonly))
2130     Results.MaybeAddResult(CodeCompleteConsumer::Result("readonly", 0));
2131   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_assign))
2132     Results.MaybeAddResult(CodeCompleteConsumer::Result("assign", 0));
2133   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_readwrite))
2134     Results.MaybeAddResult(CodeCompleteConsumer::Result("readwrite", 0));
2135   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_retain))
2136     Results.MaybeAddResult(CodeCompleteConsumer::Result("retain", 0));
2137   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_copy))
2138     Results.MaybeAddResult(CodeCompleteConsumer::Result("copy", 0));
2139   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_nonatomic))
2140     Results.MaybeAddResult(CodeCompleteConsumer::Result("nonatomic", 0));
2141   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_setter)) {
2142     CodeCompletionString *Setter = new CodeCompletionString;
2143     Setter->AddTypedTextChunk("setter");
2144     Setter->AddTextChunk(" = ");
2145     Setter->AddPlaceholderChunk("method");
2146     Results.MaybeAddResult(CodeCompleteConsumer::Result(Setter, 0));
2147   }
2148   if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_getter)) {
2149     CodeCompletionString *Getter = new CodeCompletionString;
2150     Getter->AddTypedTextChunk("getter");
2151     Getter->AddTextChunk(" = ");
2152     Getter->AddPlaceholderChunk("method");
2153     Results.MaybeAddResult(CodeCompleteConsumer::Result(Getter, 0));
2154   }
2155   Results.ExitScope();
2156   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2157 }
2158 
2159 /// \brief Descripts the kind of Objective-C method that we want to find
2160 /// via code completion.
2161 enum ObjCMethodKind {
2162   MK_Any, //< Any kind of method, provided it means other specified criteria.
2163   MK_ZeroArgSelector, //< Zero-argument (unary) selector.
2164   MK_OneArgSelector //< One-argument selector.
2165 };
2166 
2167 static bool isAcceptableObjCMethod(ObjCMethodDecl *Method,
2168                                    ObjCMethodKind WantKind,
2169                                    IdentifierInfo **SelIdents,
2170                                    unsigned NumSelIdents) {
2171   Selector Sel = Method->getSelector();
2172   if (NumSelIdents > Sel.getNumArgs())
2173     return false;
2174 
2175   switch (WantKind) {
2176   case MK_Any:             break;
2177   case MK_ZeroArgSelector: return Sel.isUnarySelector();
2178   case MK_OneArgSelector:  return Sel.getNumArgs() == 1;
2179   }
2180 
2181   for (unsigned I = 0; I != NumSelIdents; ++I)
2182     if (SelIdents[I] != Sel.getIdentifierInfoForSlot(I))
2183       return false;
2184 
2185   return true;
2186 }
2187 
2188 /// \brief Add all of the Objective-C methods in the given Objective-C
2189 /// container to the set of results.
2190 ///
2191 /// The container will be a class, protocol, category, or implementation of
2192 /// any of the above. This mether will recurse to include methods from
2193 /// the superclasses of classes along with their categories, protocols, and
2194 /// implementations.
2195 ///
2196 /// \param Container the container in which we'll look to find methods.
2197 ///
2198 /// \param WantInstance whether to add instance methods (only); if false, this
2199 /// routine will add factory methods (only).
2200 ///
2201 /// \param CurContext the context in which we're performing the lookup that
2202 /// finds methods.
2203 ///
2204 /// \param Results the structure into which we'll add results.
2205 static void AddObjCMethods(ObjCContainerDecl *Container,
2206                            bool WantInstanceMethods,
2207                            ObjCMethodKind WantKind,
2208                            IdentifierInfo **SelIdents,
2209                            unsigned NumSelIdents,
2210                            DeclContext *CurContext,
2211                            ResultBuilder &Results) {
2212   typedef CodeCompleteConsumer::Result Result;
2213   for (ObjCContainerDecl::method_iterator M = Container->meth_begin(),
2214                                        MEnd = Container->meth_end();
2215        M != MEnd; ++M) {
2216     if ((*M)->isInstanceMethod() == WantInstanceMethods) {
2217       // Check whether the selector identifiers we've been given are a
2218       // subset of the identifiers for this particular method.
2219       if (!isAcceptableObjCMethod(*M, WantKind, SelIdents, NumSelIdents))
2220         continue;
2221 
2222       Result R = Result(*M, 0);
2223       R.StartParameter = NumSelIdents;
2224       R.AllParametersAreInformative = (WantKind != MK_Any);
2225       Results.MaybeAddResult(R, CurContext);
2226     }
2227   }
2228 
2229   ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(Container);
2230   if (!IFace)
2231     return;
2232 
2233   // Add methods in protocols.
2234   const ObjCList<ObjCProtocolDecl> &Protocols= IFace->getReferencedProtocols();
2235   for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
2236                                             E = Protocols.end();
2237        I != E; ++I)
2238     AddObjCMethods(*I, WantInstanceMethods, WantKind, SelIdents, NumSelIdents,
2239                    CurContext, Results);
2240 
2241   // Add methods in categories.
2242   for (ObjCCategoryDecl *CatDecl = IFace->getCategoryList(); CatDecl;
2243        CatDecl = CatDecl->getNextClassCategory()) {
2244     AddObjCMethods(CatDecl, WantInstanceMethods, WantKind, SelIdents,
2245                    NumSelIdents, CurContext, Results);
2246 
2247     // Add a categories protocol methods.
2248     const ObjCList<ObjCProtocolDecl> &Protocols
2249       = CatDecl->getReferencedProtocols();
2250     for (ObjCList<ObjCProtocolDecl>::iterator I = Protocols.begin(),
2251                                               E = Protocols.end();
2252          I != E; ++I)
2253       AddObjCMethods(*I, WantInstanceMethods, WantKind, SelIdents,
2254                      NumSelIdents, CurContext, Results);
2255 
2256     // Add methods in category implementations.
2257     if (ObjCCategoryImplDecl *Impl = CatDecl->getImplementation())
2258       AddObjCMethods(Impl, WantInstanceMethods, WantKind, SelIdents,
2259                      NumSelIdents, CurContext, Results);
2260   }
2261 
2262   // Add methods in superclass.
2263   if (IFace->getSuperClass())
2264     AddObjCMethods(IFace->getSuperClass(), WantInstanceMethods, WantKind,
2265                    SelIdents, NumSelIdents, CurContext, Results);
2266 
2267   // Add methods in our implementation, if any.
2268   if (ObjCImplementationDecl *Impl = IFace->getImplementation())
2269     AddObjCMethods(Impl, WantInstanceMethods, WantKind, SelIdents,
2270                    NumSelIdents, CurContext, Results);
2271 }
2272 
2273 
2274 void Sema::CodeCompleteObjCPropertyGetter(Scope *S, DeclPtrTy ClassDecl,
2275                                           DeclPtrTy *Methods,
2276                                           unsigned NumMethods) {
2277   typedef CodeCompleteConsumer::Result Result;
2278 
2279   // Try to find the interface where getters might live.
2280   ObjCInterfaceDecl *Class
2281     = dyn_cast_or_null<ObjCInterfaceDecl>(ClassDecl.getAs<Decl>());
2282   if (!Class) {
2283     if (ObjCCategoryDecl *Category
2284           = dyn_cast_or_null<ObjCCategoryDecl>(ClassDecl.getAs<Decl>()))
2285       Class = Category->getClassInterface();
2286 
2287     if (!Class)
2288       return;
2289   }
2290 
2291   // Find all of the potential getters.
2292   ResultBuilder Results(*this);
2293   Results.EnterNewScope();
2294 
2295   // FIXME: We need to do this because Objective-C methods don't get
2296   // pushed into DeclContexts early enough. Argh!
2297   for (unsigned I = 0; I != NumMethods; ++I) {
2298     if (ObjCMethodDecl *Method
2299             = dyn_cast_or_null<ObjCMethodDecl>(Methods[I].getAs<Decl>()))
2300       if (Method->isInstanceMethod() &&
2301           isAcceptableObjCMethod(Method, MK_ZeroArgSelector, 0, 0)) {
2302         Result R = Result(Method, 0);
2303         R.AllParametersAreInformative = true;
2304         Results.MaybeAddResult(R, CurContext);
2305       }
2306   }
2307 
2308   AddObjCMethods(Class, true, MK_ZeroArgSelector, 0, 0, CurContext, Results);
2309   Results.ExitScope();
2310   HandleCodeCompleteResults(this, CodeCompleter,Results.data(),Results.size());
2311 }
2312 
2313 void Sema::CodeCompleteObjCPropertySetter(Scope *S, DeclPtrTy ObjCImplDecl,
2314                                           DeclPtrTy *Methods,
2315                                           unsigned NumMethods) {
2316   typedef CodeCompleteConsumer::Result Result;
2317 
2318   // Try to find the interface where setters might live.
2319   ObjCInterfaceDecl *Class
2320     = dyn_cast_or_null<ObjCInterfaceDecl>(ObjCImplDecl.getAs<Decl>());
2321   if (!Class) {
2322     if (ObjCCategoryDecl *Category
2323           = dyn_cast_or_null<ObjCCategoryDecl>(ObjCImplDecl.getAs<Decl>()))
2324       Class = Category->getClassInterface();
2325 
2326     if (!Class)
2327       return;
2328   }
2329 
2330   // Find all of the potential getters.
2331   ResultBuilder Results(*this);
2332   Results.EnterNewScope();
2333 
2334   // FIXME: We need to do this because Objective-C methods don't get
2335   // pushed into DeclContexts early enough. Argh!
2336   for (unsigned I = 0; I != NumMethods; ++I) {
2337     if (ObjCMethodDecl *Method
2338             = dyn_cast_or_null<ObjCMethodDecl>(Methods[I].getAs<Decl>()))
2339       if (Method->isInstanceMethod() &&
2340           isAcceptableObjCMethod(Method, MK_OneArgSelector, 0, 0)) {
2341         Result R = Result(Method, 0);
2342         R.AllParametersAreInformative = true;
2343         Results.MaybeAddResult(R, CurContext);
2344       }
2345   }
2346 
2347   AddObjCMethods(Class, true, MK_OneArgSelector, 0, 0, CurContext, Results);
2348 
2349   Results.ExitScope();
2350   HandleCodeCompleteResults(this, CodeCompleter,Results.data(),Results.size());
2351 }
2352 
2353 void Sema::CodeCompleteObjCClassMessage(Scope *S, IdentifierInfo *FName,
2354                                         SourceLocation FNameLoc,
2355                                         IdentifierInfo **SelIdents,
2356                                         unsigned NumSelIdents) {
2357   typedef CodeCompleteConsumer::Result Result;
2358   ObjCInterfaceDecl *CDecl = 0;
2359 
2360   if (FName->isStr("super")) {
2361     // We're sending a message to "super".
2362     if (ObjCMethodDecl *CurMethod = getCurMethodDecl()) {
2363       // Figure out which interface we're in.
2364       CDecl = CurMethod->getClassInterface();
2365       if (!CDecl)
2366         return;
2367 
2368       // Find the superclass of this class.
2369       CDecl = CDecl->getSuperClass();
2370       if (!CDecl)
2371         return;
2372 
2373       if (CurMethod->isInstanceMethod()) {
2374         // We are inside an instance method, which means that the message
2375         // send [super ...] is actually calling an instance method on the
2376         // current object. Build the super expression and handle this like
2377         // an instance method.
2378         QualType SuperTy = Context.getObjCInterfaceType(CDecl);
2379         SuperTy = Context.getObjCObjectPointerType(SuperTy);
2380         OwningExprResult Super
2381           = Owned(new (Context) ObjCSuperExpr(FNameLoc, SuperTy));
2382         return CodeCompleteObjCInstanceMessage(S, (Expr *)Super.get(),
2383                                                SelIdents, NumSelIdents);
2384       }
2385 
2386       // Okay, we're calling a factory method in our superclass.
2387     }
2388   }
2389 
2390   // If the given name refers to an interface type, retrieve the
2391   // corresponding declaration.
2392   if (!CDecl)
2393     if (TypeTy *Ty = getTypeName(*FName, FNameLoc, S, 0, false)) {
2394       QualType T = GetTypeFromParser(Ty, 0);
2395       if (!T.isNull())
2396         if (const ObjCInterfaceType *Interface = T->getAs<ObjCInterfaceType>())
2397           CDecl = Interface->getDecl();
2398     }
2399 
2400   if (!CDecl && FName->isStr("super")) {
2401     // "super" may be the name of a variable, in which case we are
2402     // probably calling an instance method.
2403     CXXScopeSpec SS;
2404     UnqualifiedId id;
2405     id.setIdentifier(FName, FNameLoc);
2406     OwningExprResult Super = ActOnIdExpression(S, SS, id, false, false);
2407     return CodeCompleteObjCInstanceMessage(S, (Expr *)Super.get(),
2408                                            SelIdents, NumSelIdents);
2409   }
2410 
2411   // Add all of the factory methods in this Objective-C class, its protocols,
2412   // superclasses, categories, implementation, etc.
2413   ResultBuilder Results(*this);
2414   Results.EnterNewScope();
2415   AddObjCMethods(CDecl, false, MK_Any, SelIdents, NumSelIdents, CurContext,
2416                  Results);
2417   Results.ExitScope();
2418 
2419   // This also suppresses remaining diagnostics.
2420   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2421 }
2422 
2423 void Sema::CodeCompleteObjCInstanceMessage(Scope *S, ExprTy *Receiver,
2424                                            IdentifierInfo **SelIdents,
2425                                            unsigned NumSelIdents) {
2426   typedef CodeCompleteConsumer::Result Result;
2427 
2428   Expr *RecExpr = static_cast<Expr *>(Receiver);
2429   QualType RecType = RecExpr->getType();
2430 
2431   // If necessary, apply function/array conversion to the receiver.
2432   // C99 6.7.5.3p[7,8].
2433   DefaultFunctionArrayConversion(RecExpr);
2434   QualType ReceiverType = RecExpr->getType();
2435 
2436   if (ReceiverType->isObjCIdType() || ReceiverType->isBlockPointerType()) {
2437     // FIXME: We're messaging 'id'. Do we actually want to look up every method
2438     // in the universe?
2439     return;
2440   }
2441 
2442   // Build the set of methods we can see.
2443   ResultBuilder Results(*this);
2444   Results.EnterNewScope();
2445 
2446   // Handle messages to Class. This really isn't a message to an instance
2447   // method, so we treat it the same way we would treat a message send to a
2448   // class method.
2449   if (ReceiverType->isObjCClassType() ||
2450       ReceiverType->isObjCQualifiedClassType()) {
2451     if (ObjCMethodDecl *CurMethod = getCurMethodDecl()) {
2452       if (ObjCInterfaceDecl *ClassDecl = CurMethod->getClassInterface())
2453         AddObjCMethods(ClassDecl, false, MK_Any, SelIdents, NumSelIdents,
2454                        CurContext, Results);
2455     }
2456   }
2457   // Handle messages to a qualified ID ("id<foo>").
2458   else if (const ObjCObjectPointerType *QualID
2459              = ReceiverType->getAsObjCQualifiedIdType()) {
2460     // Search protocols for instance methods.
2461     for (ObjCObjectPointerType::qual_iterator I = QualID->qual_begin(),
2462                                               E = QualID->qual_end();
2463          I != E; ++I)
2464       AddObjCMethods(*I, true, MK_Any, SelIdents, NumSelIdents, CurContext,
2465                      Results);
2466   }
2467   // Handle messages to a pointer to interface type.
2468   else if (const ObjCObjectPointerType *IFacePtr
2469                               = ReceiverType->getAsObjCInterfacePointerType()) {
2470     // Search the class, its superclasses, etc., for instance methods.
2471     AddObjCMethods(IFacePtr->getInterfaceDecl(), true, MK_Any, SelIdents,
2472                    NumSelIdents, CurContext, Results);
2473 
2474     // Search protocols for instance methods.
2475     for (ObjCObjectPointerType::qual_iterator I = IFacePtr->qual_begin(),
2476          E = IFacePtr->qual_end();
2477          I != E; ++I)
2478       AddObjCMethods(*I, true, MK_Any, SelIdents, NumSelIdents, CurContext,
2479                      Results);
2480   }
2481 
2482   Results.ExitScope();
2483   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2484 }
2485 
2486 /// \brief Add all of the protocol declarations that we find in the given
2487 /// (translation unit) context.
2488 static void AddProtocolResults(DeclContext *Ctx, DeclContext *CurContext,
2489                                bool OnlyForwardDeclarations,
2490                                ResultBuilder &Results) {
2491   typedef CodeCompleteConsumer::Result Result;
2492 
2493   for (DeclContext::decl_iterator D = Ctx->decls_begin(),
2494                                DEnd = Ctx->decls_end();
2495        D != DEnd; ++D) {
2496     // Record any protocols we find.
2497     if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(*D))
2498       if (!OnlyForwardDeclarations || Proto->isForwardDecl())
2499         Results.MaybeAddResult(Result(Proto, 0), CurContext);
2500 
2501     // Record any forward-declared protocols we find.
2502     if (ObjCForwardProtocolDecl *Forward
2503           = dyn_cast<ObjCForwardProtocolDecl>(*D)) {
2504       for (ObjCForwardProtocolDecl::protocol_iterator
2505              P = Forward->protocol_begin(),
2506              PEnd = Forward->protocol_end();
2507            P != PEnd; ++P)
2508         if (!OnlyForwardDeclarations || (*P)->isForwardDecl())
2509           Results.MaybeAddResult(Result(*P, 0), CurContext);
2510     }
2511   }
2512 }
2513 
2514 void Sema::CodeCompleteObjCProtocolReferences(IdentifierLocPair *Protocols,
2515                                               unsigned NumProtocols) {
2516   ResultBuilder Results(*this);
2517   Results.EnterNewScope();
2518 
2519   // Tell the result set to ignore all of the protocols we have
2520   // already seen.
2521   for (unsigned I = 0; I != NumProtocols; ++I)
2522     if (ObjCProtocolDecl *Protocol = LookupProtocol(Protocols[I].first))
2523       Results.Ignore(Protocol);
2524 
2525   // Add all protocols.
2526   AddProtocolResults(Context.getTranslationUnitDecl(), CurContext, false,
2527                      Results);
2528 
2529   Results.ExitScope();
2530   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2531 }
2532 
2533 void Sema::CodeCompleteObjCProtocolDecl(Scope *) {
2534   ResultBuilder Results(*this);
2535   Results.EnterNewScope();
2536 
2537   // Add all protocols.
2538   AddProtocolResults(Context.getTranslationUnitDecl(), CurContext, true,
2539                      Results);
2540 
2541   Results.ExitScope();
2542   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2543 }
2544 
2545 /// \brief Add all of the Objective-C interface declarations that we find in
2546 /// the given (translation unit) context.
2547 static void AddInterfaceResults(DeclContext *Ctx, DeclContext *CurContext,
2548                                 bool OnlyForwardDeclarations,
2549                                 bool OnlyUnimplemented,
2550                                 ResultBuilder &Results) {
2551   typedef CodeCompleteConsumer::Result Result;
2552 
2553   for (DeclContext::decl_iterator D = Ctx->decls_begin(),
2554                                DEnd = Ctx->decls_end();
2555        D != DEnd; ++D) {
2556     // Record any interfaces we find.
2557     if (ObjCInterfaceDecl *Class = dyn_cast<ObjCInterfaceDecl>(*D))
2558       if ((!OnlyForwardDeclarations || Class->isForwardDecl()) &&
2559           (!OnlyUnimplemented || !Class->getImplementation()))
2560         Results.MaybeAddResult(Result(Class, 0), CurContext);
2561 
2562     // Record any forward-declared interfaces we find.
2563     if (ObjCClassDecl *Forward = dyn_cast<ObjCClassDecl>(*D)) {
2564       for (ObjCClassDecl::iterator C = Forward->begin(), CEnd = Forward->end();
2565            C != CEnd; ++C)
2566         if ((!OnlyForwardDeclarations || C->getInterface()->isForwardDecl()) &&
2567             (!OnlyUnimplemented || !C->getInterface()->getImplementation()))
2568           Results.MaybeAddResult(Result(C->getInterface(), 0), CurContext);
2569     }
2570   }
2571 }
2572 
2573 void Sema::CodeCompleteObjCInterfaceDecl(Scope *S) {
2574   ResultBuilder Results(*this);
2575   Results.EnterNewScope();
2576 
2577   // Add all classes.
2578   AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, true,
2579                       false, Results);
2580 
2581   Results.ExitScope();
2582   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2583 }
2584 
2585 void Sema::CodeCompleteObjCSuperclass(Scope *S, IdentifierInfo *ClassName) {
2586   ResultBuilder Results(*this);
2587   Results.EnterNewScope();
2588 
2589   // Make sure that we ignore the class we're currently defining.
2590   NamedDecl *CurClass
2591     = LookupSingleName(TUScope, ClassName, LookupOrdinaryName);
2592   if (CurClass && isa<ObjCInterfaceDecl>(CurClass))
2593     Results.Ignore(CurClass);
2594 
2595   // Add all classes.
2596   AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
2597                       false, Results);
2598 
2599   Results.ExitScope();
2600   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2601 }
2602 
2603 void Sema::CodeCompleteObjCImplementationDecl(Scope *S) {
2604   ResultBuilder Results(*this);
2605   Results.EnterNewScope();
2606 
2607   // Add all unimplemented classes.
2608   AddInterfaceResults(Context.getTranslationUnitDecl(), CurContext, false,
2609                       true, Results);
2610 
2611   Results.ExitScope();
2612   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2613 }
2614 
2615 void Sema::CodeCompleteObjCInterfaceCategory(Scope *S,
2616                                              IdentifierInfo *ClassName) {
2617   typedef CodeCompleteConsumer::Result Result;
2618 
2619   ResultBuilder Results(*this);
2620 
2621   // Ignore any categories we find that have already been implemented by this
2622   // interface.
2623   llvm::SmallPtrSet<IdentifierInfo *, 16> CategoryNames;
2624   NamedDecl *CurClass
2625     = LookupSingleName(TUScope, ClassName, LookupOrdinaryName);
2626   if (ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurClass))
2627     for (ObjCCategoryDecl *Category = Class->getCategoryList(); Category;
2628          Category = Category->getNextClassCategory())
2629       CategoryNames.insert(Category->getIdentifier());
2630 
2631   // Add all of the categories we know about.
2632   Results.EnterNewScope();
2633   TranslationUnitDecl *TU = Context.getTranslationUnitDecl();
2634   for (DeclContext::decl_iterator D = TU->decls_begin(),
2635                                DEnd = TU->decls_end();
2636        D != DEnd; ++D)
2637     if (ObjCCategoryDecl *Category = dyn_cast<ObjCCategoryDecl>(*D))
2638       if (CategoryNames.insert(Category->getIdentifier()))
2639           Results.MaybeAddResult(Result(Category, 0), CurContext);
2640   Results.ExitScope();
2641 
2642   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2643 }
2644 
2645 void Sema::CodeCompleteObjCImplementationCategory(Scope *S,
2646                                                   IdentifierInfo *ClassName) {
2647   typedef CodeCompleteConsumer::Result Result;
2648 
2649   // Find the corresponding interface. If we couldn't find the interface, the
2650   // program itself is ill-formed. However, we'll try to be helpful still by
2651   // providing the list of all of the categories we know about.
2652   NamedDecl *CurClass
2653     = LookupSingleName(TUScope, ClassName, LookupOrdinaryName);
2654   ObjCInterfaceDecl *Class = dyn_cast_or_null<ObjCInterfaceDecl>(CurClass);
2655   if (!Class)
2656     return CodeCompleteObjCInterfaceCategory(S, ClassName);
2657 
2658   ResultBuilder Results(*this);
2659 
2660   // Add all of the categories that have have corresponding interface
2661   // declarations in this class and any of its superclasses, except for
2662   // already-implemented categories in the class itself.
2663   llvm::SmallPtrSet<IdentifierInfo *, 16> CategoryNames;
2664   Results.EnterNewScope();
2665   bool IgnoreImplemented = true;
2666   while (Class) {
2667     for (ObjCCategoryDecl *Category = Class->getCategoryList(); Category;
2668          Category = Category->getNextClassCategory())
2669       if ((!IgnoreImplemented || !Category->getImplementation()) &&
2670           CategoryNames.insert(Category->getIdentifier()))
2671         Results.MaybeAddResult(Result(Category, 0), CurContext);
2672 
2673     Class = Class->getSuperClass();
2674     IgnoreImplemented = false;
2675   }
2676   Results.ExitScope();
2677 
2678   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2679 }
2680 
2681 void Sema::CodeCompleteObjCPropertyDefinition(Scope *S, DeclPtrTy ObjCImpDecl) {
2682   typedef CodeCompleteConsumer::Result Result;
2683   ResultBuilder Results(*this);
2684 
2685   // Figure out where this @synthesize lives.
2686   ObjCContainerDecl *Container
2687     = dyn_cast_or_null<ObjCContainerDecl>(ObjCImpDecl.getAs<Decl>());
2688   if (!Container ||
2689       (!isa<ObjCImplementationDecl>(Container) &&
2690        !isa<ObjCCategoryImplDecl>(Container)))
2691     return;
2692 
2693   // Ignore any properties that have already been implemented.
2694   for (DeclContext::decl_iterator D = Container->decls_begin(),
2695                                DEnd = Container->decls_end();
2696        D != DEnd; ++D)
2697     if (ObjCPropertyImplDecl *PropertyImpl = dyn_cast<ObjCPropertyImplDecl>(*D))
2698       Results.Ignore(PropertyImpl->getPropertyDecl());
2699 
2700   // Add any properties that we find.
2701   Results.EnterNewScope();
2702   if (ObjCImplementationDecl *ClassImpl
2703         = dyn_cast<ObjCImplementationDecl>(Container))
2704     AddObjCProperties(ClassImpl->getClassInterface(), false, CurContext,
2705                       Results);
2706   else
2707     AddObjCProperties(cast<ObjCCategoryImplDecl>(Container)->getCategoryDecl(),
2708                       false, CurContext, Results);
2709   Results.ExitScope();
2710 
2711   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2712 }
2713 
2714 void Sema::CodeCompleteObjCPropertySynthesizeIvar(Scope *S,
2715                                                   IdentifierInfo *PropertyName,
2716                                                   DeclPtrTy ObjCImpDecl) {
2717   typedef CodeCompleteConsumer::Result Result;
2718   ResultBuilder Results(*this);
2719 
2720   // Figure out where this @synthesize lives.
2721   ObjCContainerDecl *Container
2722     = dyn_cast_or_null<ObjCContainerDecl>(ObjCImpDecl.getAs<Decl>());
2723   if (!Container ||
2724       (!isa<ObjCImplementationDecl>(Container) &&
2725        !isa<ObjCCategoryImplDecl>(Container)))
2726     return;
2727 
2728   // Figure out which interface we're looking into.
2729   ObjCInterfaceDecl *Class = 0;
2730   if (ObjCImplementationDecl *ClassImpl
2731                                  = dyn_cast<ObjCImplementationDecl>(Container))
2732     Class = ClassImpl->getClassInterface();
2733   else
2734     Class = cast<ObjCCategoryImplDecl>(Container)->getCategoryDecl()
2735                                                           ->getClassInterface();
2736 
2737   // Add all of the instance variables in this class and its superclasses.
2738   Results.EnterNewScope();
2739   for(; Class; Class = Class->getSuperClass()) {
2740     // FIXME: We could screen the type of each ivar for compatibility with
2741     // the property, but is that being too paternal?
2742     for (ObjCInterfaceDecl::ivar_iterator IVar = Class->ivar_begin(),
2743                                        IVarEnd = Class->ivar_end();
2744          IVar != IVarEnd; ++IVar)
2745       Results.MaybeAddResult(Result(*IVar, 0), CurContext);
2746   }
2747   Results.ExitScope();
2748 
2749   HandleCodeCompleteResults(this, CodeCompleter, Results.data(),Results.size());
2750 }
2751