|  | //===--- EntityImpl.h - Internal Entity implementation---------*- C++ -*-=====// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | //  Internal implementation for the Entity class | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_CLANG_INDEX_ENTITYIMPL_H | 
|  | #define LLVM_CLANG_INDEX_ENTITYIMPL_H | 
|  |  | 
|  | #include "clang/Index/Entity.h" | 
|  | #include "clang/AST/DeclarationName.h" | 
|  | #include "llvm/ADT/FoldingSet.h" | 
|  | #include "llvm/ADT/StringSet.h" | 
|  |  | 
|  | namespace clang { | 
|  |  | 
|  | namespace idx { | 
|  | class ProgramImpl; | 
|  |  | 
|  | class EntityImpl : public llvm::FoldingSetNode { | 
|  | Entity Parent; | 
|  | DeclarationName Name; | 
|  |  | 
|  | /// \brief Identifier namespace. | 
|  | unsigned IdNS; | 
|  |  | 
|  | /// \brief If Name is a selector, this keeps track whether it's for an | 
|  | /// instance method. | 
|  | bool IsObjCInstanceMethod; | 
|  |  | 
|  | public: | 
|  | EntityImpl(Entity parent, DeclarationName name, unsigned idNS, | 
|  | bool isObjCInstanceMethod) | 
|  | : Parent(parent), Name(name), IdNS(idNS), | 
|  | IsObjCInstanceMethod(isObjCInstanceMethod) { } | 
|  |  | 
|  | /// \brief Find the Decl that can be referred to by this entity. | 
|  | Decl *getDecl(ASTContext &AST); | 
|  |  | 
|  | /// \brief Get an Entity associated with the given Decl. | 
|  | /// \returns Null if an Entity cannot refer to this Decl. | 
|  | static Entity get(Decl *D, Program &Prog, ProgramImpl &ProgImpl); | 
|  | static Entity get(StringRef Name, Program &Prog, ProgramImpl &ProgImpl); | 
|  |  | 
|  | std::string getPrintableName(); | 
|  |  | 
|  | void Profile(llvm::FoldingSetNodeID &ID) const { | 
|  | Profile(ID, Parent, Name, IdNS, IsObjCInstanceMethod); | 
|  | } | 
|  | static void Profile(llvm::FoldingSetNodeID &ID, Entity Parent, | 
|  | DeclarationName Name, unsigned IdNS, | 
|  | bool isObjCInstanceMethod) { | 
|  | ID.AddPointer(Parent.getAsOpaquePtr()); | 
|  | ID.AddPointer(Name.getAsOpaquePtr()); | 
|  | ID.AddInteger(IdNS); | 
|  | ID.AddBoolean(isObjCInstanceMethod); | 
|  | } | 
|  | }; | 
|  |  | 
|  | } // namespace idx | 
|  |  | 
|  | } // namespace clang | 
|  |  | 
|  | #endif |