1//===--- IndexDataConsumer.h - Abstract index data consumer -----*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef LLVM_CLANG_INDEX_INDEXDATACONSUMER_H 10#define LLVM_CLANG_INDEX_INDEXDATACONSUMER_H 11 12#include "clang/Index/IndexSymbol.h" 13#include "clang/Lex/Preprocessor.h" 14 15namespace clang { 16 class ASTContext; 17 class DeclContext; 18 class Expr; 19 class FileID; 20 class IdentifierInfo; 21 class ImportDecl; 22 class MacroInfo; 23 24namespace index { 25 26class IndexDataConsumer { 27public: 28 struct ASTNodeInfo { 29 const Expr *OrigE; 30 const Decl *OrigD; 31 const Decl *Parent; 32 const DeclContext *ContainerDC; 33 }; 34 35 virtual ~IndexDataConsumer() = default; 36 37 virtual void initialize(ASTContext &Ctx) {} 38 39 virtual void setPreprocessor(std::shared_ptr<Preprocessor> PP) {} 40 41 /// \returns true to continue indexing, or false to abort. 42 virtual bool handleDeclOccurrence(const Decl *D, SymbolRoleSet Roles, 43 ArrayRef<SymbolRelation> Relations, 44 SourceLocation Loc, ASTNodeInfo ASTNode) { 45 return true; 46 } 47 48 /// \returns true to continue indexing, or false to abort. 49 virtual bool handleMacroOccurrence(const IdentifierInfo *Name, 50 const MacroInfo *MI, SymbolRoleSet Roles, 51 SourceLocation Loc) { 52 return true; 53 } 54 55 /// \returns true to continue indexing, or false to abort. 56 /// 57 /// This will be called for each module reference in an import decl. 58 /// For "@import MyMod.SubMod", there will be a call for 'MyMod' with the 59 /// 'reference' role, and a call for 'SubMod' with the 'declaration' role. 60 virtual bool handleModuleOccurrence(const ImportDecl *ImportD, 61 const Module *Mod, SymbolRoleSet Roles, 62 SourceLocation Loc) { 63 return true; 64 } 65 66 virtual void finish() {} 67}; 68 69} // namespace index 70} // namespace clang 71 72#endif 73