From 98d7b502caf8d0976a116c5d798be00cfb95e373 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 6 May 2019 15:37:55 +0200 Subject: ClangRefactoring: Clear input files after collecting symbols Change-Id: Ic4fbaac7ad3b3f80223d6cbb84a34dffa741fc4f Reviewed-by: Tim Jenssen --- .../source/symbolscollector.cpp | 6 +++++- .../source/symbolscollector.h | 2 ++ tests/unit/unittest/symbolscollector-test.cpp | 23 ++++++++++++++++++---- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/tools/clangrefactoringbackend/source/symbolscollector.cpp b/src/tools/clangrefactoringbackend/source/symbolscollector.cpp index 071837ac52..ab5a00fc6b 100644 --- a/src/tools/clangrefactoringbackend/source/symbolscollector.cpp +++ b/src/tools/clangrefactoringbackend/source/symbolscollector.cpp @@ -129,7 +129,11 @@ bool SymbolsCollector::collectSymbols() auto actionFactory = ClangBackEnd::newFrontendActionFactory(&m_collectSymbolsAction); - return tool.run(actionFactory.get()) != 1; + bool noErrors = tool.run(actionFactory.get()) != 1; + + m_clangTool = ClangTool(); + + return noErrors; } void SymbolsCollector::doInMainThreadAfterFinished() diff --git a/src/tools/clangrefactoringbackend/source/symbolscollector.h b/src/tools/clangrefactoringbackend/source/symbolscollector.h index cc7ca4396c..e103471372 100644 --- a/src/tools/clangrefactoringbackend/source/symbolscollector.h +++ b/src/tools/clangrefactoringbackend/source/symbolscollector.h @@ -63,6 +63,8 @@ public: bool isUsed() const override; void setIsUsed(bool isUsed) override; + bool isClean() const { return m_clangTool.isClean(); } + private: FilePathCaching m_filePathCache; ClangTool m_clangTool; diff --git a/tests/unit/unittest/symbolscollector-test.cpp b/tests/unit/unittest/symbolscollector-test.cpp index f0080a5d2c..a766b70fa4 100644 --- a/tests/unit/unittest/symbolscollector-test.cpp +++ b/tests/unit/unittest/symbolscollector-test.cpp @@ -53,17 +53,18 @@ using testing::Value; using testing::_; using ClangBackEnd::FilePath; -using ClangBackEnd::FilePathId; using ClangBackEnd::FilePathCaching; -using ClangBackEnd::V2::FileContainers; +using ClangBackEnd::FilePathId; +using ClangBackEnd::FileStatus; using ClangBackEnd::SourceDependency; using ClangBackEnd::SourceLocationEntry; +using ClangBackEnd::SourceLocationKind; using ClangBackEnd::SymbolEntry; +using ClangBackEnd::SymbolIndex; using ClangBackEnd::SymbolKind; using ClangBackEnd::SymbolTag; -using ClangBackEnd::SourceLocationKind; -using ClangBackEnd::SymbolIndex; using ClangBackEnd::UsedMacro; +using ClangBackEnd::V2::FileContainers; using Sqlite::Database; @@ -130,6 +131,9 @@ MATCHER_P(HasSymbolTag, symbolTag, class SymbolsCollector : public testing::Test { protected: + SymbolsCollector() { setFilePathCache(&filePathCache); } + ~SymbolsCollector() { setFilePathCache({}); } + FilePathId filePathId(Utils::SmallStringView filePath) const { return filePathCache.filePathId(ClangBackEnd::FilePathView{filePath}); @@ -664,4 +668,15 @@ TEST_F(SymbolsCollector, CollectReturnsFalseIfThereIsNoError) ASSERT_TRUE(success); } + +TEST_F(SymbolsCollector, ClearInputFilesAfterCollectingSymbols) +{ + collector.setFile(filePathId(TESTDATA_DIR "/symbolscollector/main2.cpp"), {"cc"}); + collector.collectSymbols(); + collector.setFile(filePathId(TESTDATA_DIR "/symbolscollector/main.cpp"), {"cc"}); + + collector.collectSymbols(); + + ASSERT_TRUE(collector.isClean()); +} } // namespace -- cgit v1.2.3