From f2dd7c98997c776fe1ce7ae651cb437379e405fd Mon Sep 17 00:00:00 2001 From: Dmitri Gribenko Date: Thu, 29 Aug 2019 11:47:34 +0000 Subject: [Index] Added a ShouldSkipFunctionBody callback to libIndex, and refactored clients to use it instead of inventing their own solution Subscribers: jkorous, arphaman, kadircet, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D66879 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@370338 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Index/IndexingAction.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'lib/Index') diff --git a/lib/Index/IndexingAction.cpp b/lib/Index/IndexingAction.cpp index e707972014..6d6133e89d 100644 --- a/lib/Index/IndexingAction.cpp +++ b/lib/Index/IndexingAction.cpp @@ -57,14 +57,17 @@ class IndexASTConsumer final : public ASTConsumer { std::shared_ptr DataConsumer; std::shared_ptr IndexCtx; std::shared_ptr PP; + std::function ShouldSkipFunctionBody; public: IndexASTConsumer(std::shared_ptr DataConsumer, const IndexingOptions &Opts, - std::shared_ptr PP) + std::shared_ptr PP, + std::function ShouldSkipFunctionBody) : DataConsumer(std::move(DataConsumer)), IndexCtx(new IndexingContext(Opts, *this->DataConsumer)), - PP(std::move(PP)) { + PP(std::move(PP)), + ShouldSkipFunctionBody(std::move(ShouldSkipFunctionBody)) { assert(this->DataConsumer != nullptr); assert(this->PP != nullptr); } @@ -92,6 +95,10 @@ protected: void HandleTranslationUnit(ASTContext &Ctx) override { DataConsumer->finish(); } + + bool shouldSkipFunctionBody(Decl *D) override { + return ShouldSkipFunctionBody(D); + } }; class IndexAction final : public ASTFrontendAction { @@ -108,18 +115,20 @@ public: protected: std::unique_ptr CreateASTConsumer(CompilerInstance &CI, StringRef InFile) override { - return std::make_unique(DataConsumer, Opts, - CI.getPreprocessorPtr()); + return std::make_unique( + DataConsumer, Opts, CI.getPreprocessorPtr(), + /*ShouldSkipFunctionBody=*/[](const Decl *) { return false; }); } }; } // anonymous namespace -std::unique_ptr -index::createIndexingASTConsumer(std::shared_ptr DataConsumer, - const IndexingOptions &Opts, - std::shared_ptr PP) { - return std::make_unique(DataConsumer, Opts, PP); +std::unique_ptr index::createIndexingASTConsumer( + std::shared_ptr DataConsumer, + const IndexingOptions &Opts, std::shared_ptr PP, + std::function ShouldSkipFunctionBody) { + return std::make_unique(DataConsumer, Opts, PP, + ShouldSkipFunctionBody); } std::unique_ptr -- cgit v1.2.1