From b2d3951bde80a611928b8d4ffe52a476ed25f5c6 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 31 Jan 2018 12:32:14 +0100 Subject: [PATCH] Clang: Clear used macros and file information for symbol collection We have to clear them too otherwise we will collect them which can lead to wrong data in the symbol database. Change-Id: Iad7b87344caec0f27a5f8f24c214573a274db911 Reviewed-by: Ivan Donchevskii --- .../source/collectmacrossourcefilecallbacks.h | 4 +- .../source/symbolscollector.cpp | 2 +- tests/unit/unittest/symbolscollector-test.cpp | 40 +++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.h b/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.h index c3a582d1673..b824f157d78 100644 --- a/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.h +++ b/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.h @@ -60,9 +60,11 @@ public: m_sourceFiles = filePathIds; } - void clearSourceFiles() + void clear() { m_sourceFiles.clear(); + m_usedMacros.clear(); + m_fileInformations.clear(); } const UsedMacros &usedMacros() const diff --git a/src/tools/clangrefactoringbackend/source/symbolscollector.cpp b/src/tools/clangrefactoringbackend/source/symbolscollector.cpp index fbf75a66c8b..789bd3c743d 100644 --- a/src/tools/clangrefactoringbackend/source/symbolscollector.cpp +++ b/src/tools/clangrefactoringbackend/source/symbolscollector.cpp @@ -48,7 +48,7 @@ void SymbolsCollector::addUnsavedFiles(const V2::FileContainers &unsavedFiles) void SymbolsCollector::clear() { - m_collectMacrosSourceFileCallbacks.clearSourceFiles(); + m_collectMacrosSourceFileCallbacks.clear(); m_symbolEntries.clear(); m_sourceLocationEntries.clear(); m_clangTool = ClangTool(); diff --git a/tests/unit/unittest/symbolscollector-test.cpp b/tests/unit/unittest/symbolscollector-test.cpp index 0f43249bf24..fb545d2411a 100644 --- a/tests/unit/unittest/symbolscollector-test.cpp +++ b/tests/unit/unittest/symbolscollector-test.cpp @@ -303,6 +303,26 @@ TEST_F(SymbolsCollector, ClearSourceLocations) ASSERT_THAT(collector.sourceLocations(), IsEmpty()); } +TEST_F(SymbolsCollector, ClearFileInformation) +{ + collector.addFiles({filePathId(TESTDATA_DIR "/symbolscollector_main.cpp")}, {"cc"}); + collector.collectSymbols(); + + collector.clear(); + + ASSERT_THAT(collector.fileInformations(), IsEmpty()); +} + +TEST_F(SymbolsCollector, ClearUsedMacros) +{ + collector.addFiles({filePathId(TESTDATA_DIR "/symbolscollector_defines.h")}, {"cc"}); + collector.collectSymbols(); + + collector.clear(); + + ASSERT_THAT(collector.usedMacros(), IsEmpty()); +} + TEST_F(SymbolsCollector, DontCollectSymbolsAfterFilesAreCleared) { collector.addFiles({filePathId(TESTDATA_DIR "/symbolscollector_main.cpp")}, {"cc"}); @@ -323,6 +343,26 @@ TEST_F(SymbolsCollector, DontCollectSourceFilesAfterFilesAreCleared) ASSERT_THAT(collector.sourceFiles(), IsEmpty()); } +TEST_F(SymbolsCollector, DontCollectFileInformationAfterFilesAreCleared) +{ + collector.addFiles({filePathId(TESTDATA_DIR "/symbolscollector_main.cpp")}, {"cc"}); + + collector.clear(); + collector.collectSymbols(); + + ASSERT_THAT(collector.fileInformations(), IsEmpty()); +} + +TEST_F(SymbolsCollector, DontCollectUsedMacrosAfterFilesAreCleared) +{ + collector.addFiles({filePathId(TESTDATA_DIR "/symbolscollector_main.cpp")}, {"cc"}); + + collector.clear(); + collector.collectSymbols(); + + ASSERT_THAT(collector.usedMacros(), IsEmpty()); +} + TEST_F(SymbolsCollector, CollectUsedMacrosWithExternalDefine) { auto fileId = filePathId(TESTDATA_DIR "/symbolscollector_defines.h");