From cbe186c3f129d6fc6f989cec1c9960d6b3d0b914 Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Thu, 7 Dec 2017 11:04:24 +0000 Subject: [PATCH] [Index] Add setPreprocessor member to IndexDataConsumer. Summary: This enables us to use information in Preprocessor when handling symbol occurrences. Reviewers: arphaman, hokein Reviewed By: hokein Subscribers: malaperle, cfe-commits Differential Revision: https://reviews.llvm.org/D40884 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@320030 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Index/IndexDataConsumer.h | 3 +++ lib/Index/IndexingAction.cpp | 22 ++++++++++++++-------- tools/libclang/CXIndexDataConsumer.h | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/include/clang/Index/IndexDataConsumer.h b/include/clang/Index/IndexDataConsumer.h index 3154370483..080f4cb4d0 100644 --- a/include/clang/Index/IndexDataConsumer.h +++ b/include/clang/Index/IndexDataConsumer.h @@ -11,6 +11,7 @@ #define LLVM_CLANG_INDEX_INDEXDATACONSUMER_H #include "clang/Index/IndexSymbol.h" +#include "clang/Lex/Preprocessor.h" namespace clang { class ASTContext; @@ -36,6 +37,8 @@ public: virtual void initialize(ASTContext &Ctx) {} + virtual void setPreprocessor(std::shared_ptr PP) {} + /// \returns true to continue indexing, or false to abort. virtual bool handleDeclOccurence(const Decl *D, SymbolRoleSet Roles, ArrayRef Relations, diff --git a/lib/Index/IndexingAction.cpp b/lib/Index/IndexingAction.cpp index 84d31200ba..411657bf3d 100644 --- a/lib/Index/IndexingAction.cpp +++ b/lib/Index/IndexingAction.cpp @@ -8,10 +8,11 @@ //===----------------------------------------------------------------------===// #include "clang/Index/IndexingAction.h" -#include "clang/Index/IndexDataConsumer.h" #include "IndexingContext.h" +#include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/FrontendAction.h" #include "clang/Frontend/MultiplexConsumer.h" +#include "clang/Index/IndexDataConsumer.h" #include "clang/Lex/Preprocessor.h" #include "clang/Serialization/ASTReader.h" @@ -42,16 +43,18 @@ bool IndexDataConsumer::handleModuleOccurence(const ImportDecl *ImportD, namespace { class IndexASTConsumer : public ASTConsumer { + std::shared_ptr PP; IndexingContext &IndexCtx; public: - IndexASTConsumer(IndexingContext &IndexCtx) - : IndexCtx(IndexCtx) {} + IndexASTConsumer(std::shared_ptr PP, IndexingContext &IndexCtx) + : PP(std::move(PP)), IndexCtx(IndexCtx) {} protected: void Initialize(ASTContext &Context) override { IndexCtx.setASTContext(Context); IndexCtx.getDataConsumer().initialize(Context); + IndexCtx.getDataConsumer().setPreprocessor(PP); } bool HandleTopLevelDecl(DeclGroupRef DG) override { @@ -80,8 +83,10 @@ protected: : DataConsumer(std::move(dataConsumer)), IndexCtx(Opts, *DataConsumer) {} - std::unique_ptr createIndexASTConsumer() { - return llvm::make_unique(IndexCtx); + std::unique_ptr + createIndexASTConsumer(CompilerInstance &CI) { + return llvm::make_unique(CI.getPreprocessorPtr(), + IndexCtx); } void finish() { @@ -98,7 +103,7 @@ public: protected: std::unique_ptr CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override { - return createIndexASTConsumer(); + return createIndexASTConsumer(CI); } void EndSourceFileAction() override { @@ -142,7 +147,7 @@ WrappingIndexAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { std::vector> Consumers; Consumers.push_back(std::move(OtherConsumer)); - Consumers.push_back(createIndexASTConsumer()); + Consumers.push_back(createIndexASTConsumer(CI)); return llvm::make_unique(std::move(Consumers)); } @@ -173,6 +178,7 @@ void index::indexASTUnit(ASTUnit &Unit, IndexingContext IndexCtx(Opts, *DataConsumer); IndexCtx.setASTContext(Unit.getASTContext()); DataConsumer->initialize(Unit.getASTContext()); + DataConsumer->setPreprocessor(Unit.getPreprocessorPtr()); indexTranslationUnit(Unit, IndexCtx); DataConsumer->finish(); } @@ -198,7 +204,7 @@ void index::indexModuleFile(serialization::ModuleFile &Mod, IndexCtx.setASTContext(Ctx); DataConsumer->initialize(Ctx); - for (const Decl *D :Reader.getModuleFileLevelDecls(Mod)) { + for (const Decl *D : Reader.getModuleFileLevelDecls(Mod)) { IndexCtx.indexTopLevelDecl(D); } DataConsumer->finish(); diff --git a/tools/libclang/CXIndexDataConsumer.h b/tools/libclang/CXIndexDataConsumer.h index 16162cb83f..a54baadd07 100644 --- a/tools/libclang/CXIndexDataConsumer.h +++ b/tools/libclang/CXIndexDataConsumer.h @@ -342,7 +342,7 @@ public: CXTranslationUnit getCXTU() const { return CXTU; } void setASTContext(ASTContext &ctx); - void setPreprocessor(std::shared_ptr PP); + void setPreprocessor(std::shared_ptr PP) override; bool shouldSuppressRefs() const { return IndexOptions & CXIndexOpt_SuppressRedundantRefs; -- 2.40.0