diff --git a/src/libs/clangsupport/refactoringdatabaseinitializer.h b/src/libs/clangsupport/refactoringdatabaseinitializer.h index 6bbb650af7f..f6d64a81d31 100644 --- a/src/libs/clangsupport/refactoringdatabaseinitializer.h +++ b/src/libs/clangsupport/refactoringdatabaseinitializer.h @@ -144,6 +144,7 @@ public: const Sqlite::Column &sourceIdColumn = table.addColumn("sourceId", Sqlite::ColumnType::Integer); table.addColumn("sourceType", Sqlite::ColumnType::Integer); table.addColumn("pchCreationTimeStamp", Sqlite::ColumnType::Integer); + table.addColumn("hasMissingIncludes", Sqlite::ColumnType::Integer); table.addUniqueIndex({sourceIdColumn, projectPartIdColumn}); table.addIndex({projectPartIdColumn}); diff --git a/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h b/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h index c164e7a727f..3e6d00da3f6 100644 --- a/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h +++ b/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h @@ -59,9 +59,11 @@ public: projectPartId); for (const SourceEntry &entry : sourceEntries) { - insertOrUpdateSourceTypeStatement.write(entry.sourceId.filePathId, - projectPartId, - static_cast(entry.sourceType)); + insertOrUpdateProjectPartsSourcesStatement.write( + entry.sourceId.filePathId, + projectPartId, + static_cast(entry.sourceType), + static_cast(entry.hasMissingIncludes)); } } @@ -120,9 +122,8 @@ public: SourceEntries fetchDependSources(FilePathId sourceId, int projectPartId) const override { - return fetchSourceDependenciesStatement.template values(300, - sourceId.filePathId, - projectPartId); + return fetchSourceDependenciesStatement.template values( + 300, sourceId.filePathId, projectPartId); } UsedMacros fetchUsedMacros(FilePathId sourceId) const override @@ -242,20 +243,20 @@ public: "DELETE FROM newSourceDependencies", database }; - WriteStatement insertOrUpdateSourceTypeStatement{ + WriteStatement insertOrUpdateProjectPartsSourcesStatement{ "INSERT INTO projectPartsSources(sourceId, projectPartId, " - "sourceType) VALUES (?001, ?002, ?003) ON CONFLICT(sourceId, " - "projectPartId) DO UPDATE SET sourceType = ?003", + "sourceType, hasMissingIncludes) VALUES (?001, ?002, ?003, ?004) ON " + "CONFLICT(sourceId, projectPartId) DO UPDATE SET sourceType = ?003, " + "hasMissingIncludes = ?004", database}; mutable ReadStatement fetchSourceDependenciesStatement{ "WITH RECURSIVE collectedDependencies(sourceId) AS (VALUES(?) UNION " "SELECT dependencySourceId FROM sourceDependencies, " "collectedDependencies WHERE sourceDependencies.sourceId == " "collectedDependencies.sourceId) SELECT sourceId, " - "pchCreationTimeStamp, sourceType FROM " + "pchCreationTimeStamp, sourceType, hasMissingIncludes FROM " "collectedDependencies NATURAL JOIN projectPartsSources WHERE " - "projectPartId = ? ORDER BY " - "sourceId", + "projectPartId = ? ORDER BY sourceId", database}; mutable ReadStatement fetchProjectPartIdStatement{ "SELECT projectPartId FROM projectParts WHERE projectPartName = ?", diff --git a/src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h b/src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h index 658c51cb1a3..f3b365d8d54 100644 --- a/src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h +++ b/src/tools/clangpchmanagerbackend/source/collectbuilddependencypreprocessorcallbacks.h @@ -204,10 +204,10 @@ public: void appendContainsMissingIncludes(const FilePathIds &dependentSourceFilesWithMissingIncludes) { - auto split = m_containsMissingIncludes - .insert(m_containsMissingIncludes.end(), - dependentSourceFilesWithMissingIncludes.begin(), - dependentSourceFilesWithMissingIncludes.end()); + auto split = m_containsMissingIncludes.insert( + m_containsMissingIncludes.end(), + dependentSourceFilesWithMissingIncludes.begin(), + dependentSourceFilesWithMissingIncludes.end()); std::inplace_merge(m_containsMissingIncludes.begin(), split, m_containsMissingIncludes.end()); @@ -217,11 +217,13 @@ public: { FilePathIds filteredDependentSourceFilesWithMissingIncludes; filteredDependentSourceFilesWithMissingIncludes.reserve(dependentSourceFilesWithMissingIncludes.size()); - std::set_difference(dependentSourceFilesWithMissingIncludes.begin(), - dependentSourceFilesWithMissingIncludes.end(), - m_containsMissingIncludes.begin(), - m_containsMissingIncludes.end(), - std::back_inserter(filteredDependentSourceFilesWithMissingIncludes)); + std::set_difference( + dependentSourceFilesWithMissingIncludes.begin(), + dependentSourceFilesWithMissingIncludes.end(), + m_containsMissingIncludes.begin(), + m_containsMissingIncludes.end(), + std::back_inserter( + filteredDependentSourceFilesWithMissingIncludes)); dependentSourceFilesWithMissingIncludes = filteredDependentSourceFilesWithMissingIncludes; } @@ -265,8 +267,7 @@ public: sourceDependencies); } - void removeSourceWithMissingIncludesFromIncludes() - { + void removeSourceWithMissingIncludesFromSources() { class Compare { public: @@ -280,17 +281,16 @@ public: } }; - auto &includes = m_buildDependency.sources; - SourceEntries newIncludes; - newIncludes.reserve(includes.size()); - std::set_difference(includes.begin(), - includes.end(), - m_containsMissingIncludes.begin(), - m_containsMissingIncludes.end(), - std::back_inserter(newIncludes), - Compare{}); - - m_buildDependency.sources = newIncludes; + SourceEntryReferences sourcesWithMissingIncludes; + sourcesWithMissingIncludes.reserve(m_containsMissingIncludes.size()); + std::set_intersection(m_buildDependency.sources.begin(), + m_buildDependency.sources.end(), + m_containsMissingIncludes.begin(), + m_containsMissingIncludes.end(), + std::back_inserter(sourcesWithMissingIncludes), + Compare{}); + for (SourceEntryReference entry : sourcesWithMissingIncludes) + entry.get().hasMissingIncludes = HasMissingIncludes::Yes; } SourceDependencies sourceDependenciesSortedByDependendFilePathId() const @@ -311,7 +311,7 @@ public: collectSourceWithMissingIncludes(m_containsMissingIncludes, sourceDependenciesSortedByDependendFilePathId()); - removeSourceWithMissingIncludesFromIncludes(); + removeSourceWithMissingIncludesFromSources(); } void ensureDirectory(const QString &directory, const QString &fileName) diff --git a/src/tools/clangpchmanagerbackend/source/sourceentry.h b/src/tools/clangpchmanagerbackend/source/sourceentry.h index d5bb28d904f..5c45db6bde9 100644 --- a/src/tools/clangpchmanagerbackend/source/sourceentry.h +++ b/src/tools/clangpchmanagerbackend/source/sourceentry.h @@ -40,6 +40,8 @@ enum class SourceType : unsigned char { Source }; +enum class HasMissingIncludes : unsigned char { No, Yes }; + class TimeStamp { using int64 = long long; @@ -108,20 +110,23 @@ class SourceEntry using int64 = long long; public: - SourceEntry(int sourceId, int64 pchCreationTimeStamp, int sourceType) - : pchCreationTimeStamp(pchCreationTimeStamp) - , sourceId(sourceId) - , sourceType(static_cast(sourceType)) - {} + SourceEntry(int sourceId, + int64 pchCreationTimeStamp, + int sourceType, + int hasMissingIncludes) + : pchCreationTimeStamp(pchCreationTimeStamp), sourceId(sourceId), + sourceType(static_cast(sourceType)), + hasMissingIncludes( + static_cast(hasMissingIncludes)) {} - SourceEntry(FilePathId sourceId, SourceType sourceType, TimeStamp pchCreationTimeStamp) - : pchCreationTimeStamp(pchCreationTimeStamp) - , sourceId(sourceId) - , sourceType(sourceType) - {} + SourceEntry(FilePathId sourceId, + SourceType sourceType, + TimeStamp pchCreationTimeStamp, + HasMissingIncludes hasMissingIncludes = HasMissingIncludes::No) + : pchCreationTimeStamp(pchCreationTimeStamp), sourceId(sourceId), + sourceType(sourceType), hasMissingIncludes(hasMissingIncludes) {} - friend bool operator<(SourceEntry first, SourceEntry second) - { + friend bool operator<(SourceEntry first, SourceEntry second) { return first.sourceId < second.sourceId; } @@ -137,8 +142,10 @@ public: TimeStamp pchCreationTimeStamp; FilePathId sourceId; SourceType sourceType = SourceType::UserInclude; + HasMissingIncludes hasMissingIncludes = HasMissingIncludes::No; }; using SourceEntries = std::vector; - -} +using SourceEntryReference = std::reference_wrapper; +using SourceEntryReferences = std::vector; +} // namespace ClangBackEnd diff --git a/src/tools/clangpchmanagerbackend/source/usedmacrofilter.h b/src/tools/clangpchmanagerbackend/source/usedmacrofilter.h index bd9788e61cb..9db3c683b90 100644 --- a/src/tools/clangpchmanagerbackend/source/usedmacrofilter.h +++ b/src/tools/clangpchmanagerbackend/source/usedmacrofilter.h @@ -87,23 +87,22 @@ public: UsedMacroFilter(const SourceEntries &includes, const UsedMacros &usedMacros, - const CompilerMacros &compilerMacros) - { - filterIncludes(includes); + const CompilerMacros &compilerMacros) { + filterSources(includes); systemUsedMacros = filterUsedMarcos(usedMacros, systemIncludes); projectUsedMacros = filterUsedMarcos(usedMacros, projectIncludes); filter(compilerMacros); } - void filterIncludes(const SourceEntries &includes) - { - systemIncludes.reserve(includes.size()); - projectIncludes.reserve(includes.size()); - topSystemIncludes.reserve(includes.size() / 10); - topProjectIncludes.reserve(includes.size() / 10); + void filterSources(const SourceEntries &sources) { + systemIncludes.reserve(sources.size()); + projectIncludes.reserve(sources.size()); + topSystemIncludes.reserve(sources.size() / 10); + topProjectIncludes.reserve(sources.size() / 10); + this->sources.reserve(sources.size()); - for (SourceEntry include : includes) - filterInclude(include); + for (SourceEntry source : sources) + filterSource(source); } void filter(const CompilerMacros &compilerMacros) @@ -121,29 +120,31 @@ public: } private: - void filterInclude(SourceEntry include) - { - switch (include.sourceType) { - case SourceType::TopSystemInclude: - topSystemIncludes.emplace_back(include.sourceId); - systemIncludes.emplace_back(include.sourceId); - break; - case SourceType::SystemInclude: - systemIncludes.emplace_back(include.sourceId); - break; - case SourceType::TopProjectInclude: - topProjectIncludes.emplace_back(include.sourceId); - projectIncludes.emplace_back(include.sourceId); - break; - case SourceType::ProjectInclude: - projectIncludes.emplace_back(include.sourceId); - break; - case SourceType::UserInclude: - case SourceType::Source: - break; + void filterSource(SourceEntry source) { + if (source.hasMissingIncludes == HasMissingIncludes::Yes) + return; + + switch (source.sourceType) { + case SourceType::TopSystemInclude: + topSystemIncludes.emplace_back(source.sourceId); + systemIncludes.emplace_back(source.sourceId); + break; + case SourceType::SystemInclude: + systemIncludes.emplace_back(source.sourceId); + break; + case SourceType::TopProjectInclude: + topProjectIncludes.emplace_back(source.sourceId); + projectIncludes.emplace_back(source.sourceId); + break; + case SourceType::ProjectInclude: + projectIncludes.emplace_back(source.sourceId); + break; + case SourceType::UserInclude: + case SourceType::Source: + break; } - sources.emplace_back(include.sourceId); + sources.emplace_back(source.sourceId); } static Utils::SmallStringVector filterUsedMarcos(const UsedMacros &usedMacros, diff --git a/tests/unit/unittest/builddependenciesstorage-test.cpp b/tests/unit/unittest/builddependenciesstorage-test.cpp index 8112107e2b5..30db7ea408a 100644 --- a/tests/unit/unittest/builddependenciesstorage-test.cpp +++ b/tests/unit/unittest/builddependenciesstorage-test.cpp @@ -61,7 +61,7 @@ protected: MockSqliteWriteStatement &deleteOutdatedSourceDependenciesStatement = storage.deleteOutdatedSourceDependenciesStatement; MockSqliteWriteStatement &deleteNewSourceDependenciesStatement = storage.deleteNewSourceDependenciesStatement; MockSqliteReadStatement &getLowestLastModifiedTimeOfDependencies = storage.getLowestLastModifiedTimeOfDependencies; - MockSqliteWriteStatement &insertOrUpdateSourceTypeStatement = storage.insertOrUpdateSourceTypeStatement; + MockSqliteWriteStatement &insertOrUpdateProjectPartsSourcesStatement = storage.insertOrUpdateProjectPartsSourcesStatement; MockSqliteReadStatement &fetchSourceDependenciesStatement = storage.fetchSourceDependenciesStatement; MockSqliteReadStatement &fetchProjectPartIdStatement = storage.fetchProjectPartIdStatement; MockSqliteReadStatement &fetchUsedMacrosStatement = storage.fetchUsedMacrosStatement; @@ -174,14 +174,14 @@ TEST_F(BuildDependenciesStorage, AddNewSourceDependenciesTable) TEST_F(BuildDependenciesStorage, UpdateSources) { InSequence s; - SourceEntries entries{{1, SourceType::TopProjectInclude, 10}, + SourceEntries entries{{1, SourceType::TopProjectInclude, 10, ClangBackEnd::HasMissingIncludes::Yes}, {2, SourceType::TopSystemInclude, 20}}; EXPECT_CALL(deleteAllProjectPartsSourcesWithProjectPartNameStatement, write(TypedEq(22))); - EXPECT_CALL(insertOrUpdateSourceTypeStatement, - write(TypedEq(1), TypedEq(22), TypedEq(0))); - EXPECT_CALL(insertOrUpdateSourceTypeStatement, - write(TypedEq(2), TypedEq(22), TypedEq(1))); + EXPECT_CALL(insertOrUpdateProjectPartsSourcesStatement, + write(TypedEq(1), TypedEq(22), TypedEq(0), TypedEq(1))); + EXPECT_CALL(insertOrUpdateProjectPartsSourcesStatement, + write(TypedEq(2), TypedEq(22), TypedEq(1), TypedEq(0))); storage.insertOrUpdateSources(entries, 22); } diff --git a/tests/unit/unittest/builddependencycollector-test.cpp b/tests/unit/unittest/builddependencycollector-test.cpp index d8965c0a9f8..58506662322 100644 --- a/tests/unit/unittest/builddependencycollector-test.cpp +++ b/tests/unit/unittest/builddependencycollector-test.cpp @@ -47,6 +47,7 @@ using ClangBackEnd::BuildDependency; using ClangBackEnd::FilePathId; using ClangBackEnd::FilePathIds; using ClangBackEnd::FilePathView; +using ClangBackEnd::HasMissingIncludes; using ClangBackEnd::SourceDependency; using ClangBackEnd::SourceType; using ClangBackEnd::UsedMacro; @@ -57,11 +58,26 @@ MATCHER_P2(HasSource, sourceId, sourceType, std::string(negation ? "hasn't " : "has ") - + PrintToString(ClangBackEnd::SourceEntry(sourceId, sourceType, -1))) + + PrintToString(ClangBackEnd::SourceEntry( + sourceId, sourceType, -1, ClangBackEnd::HasMissingIncludes::No))) { const ClangBackEnd::SourceEntry &entry = arg; - return entry.sourceId == sourceId && entry.sourceType == sourceType; + return entry.sourceId == sourceId && entry.sourceType == sourceType + && entry.hasMissingIncludes == ClangBackEnd::HasMissingIncludes::No; +} + +MATCHER_P3(HasSource, + sourceId, + sourceType, + hasMissingIncludes, + std::string(negation ? "hasn't " : "has ") + + PrintToString(ClangBackEnd::SourceEntry(sourceId, sourceType, -1, hasMissingIncludes))) +{ + const ClangBackEnd::SourceEntry &entry = arg; + + return entry.sourceId == sourceId && entry.sourceType == sourceType + && entry.hasMissingIncludes == hasMissingIncludes; } class BuildDependencyCollector : public ::testing::Test @@ -199,6 +215,7 @@ TEST_F(BuildDependencyCollector, NoDuplicate) ASSERT_THAT(sources(collector.sourceEntries()), UnorderedElementsAre( id(TESTDATA_DIR "/builddependencycollector/project/main.cpp"), + id(TESTDATA_DIR "/builddependencycollector/project/main2.cpp"), id(TESTDATA_DIR "/builddependencycollector/project/header1.h"), id(TESTDATA_DIR "/builddependencycollector/project/header2.h"), id(TESTDATA_DIR "/builddependencycollector/external/external1.h"), @@ -214,6 +231,7 @@ TEST_F(BuildDependencyCollector, IncludesAreSorted) ASSERT_THAT(sources(collector.sourceEntries()), ElementsAre(id(TESTDATA_DIR "/builddependencycollector/project/main.cpp"), + id(TESTDATA_DIR "/builddependencycollector/project/main2.cpp"), id(TESTDATA_DIR "/builddependencycollector/project/header1.h"), id(TESTDATA_DIR "/builddependencycollector/project/header2.h"), id(TESTDATA_DIR "/builddependencycollector/external/external3.h"), @@ -262,6 +280,7 @@ TEST_F(BuildDependencyCollector, IgnoreMissingFile) ASSERT_THAT(sources(emptyCollector.sourceEntries()), UnorderedElementsAre( + id(TESTDATA_DIR "/builddependencycollector/project/missingfile.cpp"), id(TESTDATA_DIR "/builddependencycollector/external/external1.h"), id(TESTDATA_DIR "/builddependencycollector/external/indirect_external.h"), id(TESTDATA_DIR "/builddependencycollector/external/indirect_external2.h"))); @@ -634,10 +653,37 @@ TEST_F(BuildDependencyCollector, MissingInclude) emptyCollector.collect(); - ASSERT_THAT(emptyCollector.sourceEntries(), - ElementsAre( - HasSource(id(TESTDATA_DIR "/builddependencycollector/project/header1.h"), - SourceType::UserInclude))); + ASSERT_THAT( + emptyCollector.sourceEntries(), + UnorderedElementsAre( + HasSource(id(TESTDATA_DIR "/builddependencycollector/project/main5.cpp"), + SourceType::Source, + HasMissingIncludes::Yes), + HasSource(id(TESTDATA_DIR "/builddependencycollector/project/missinginclude2.h"), + SourceType::ProjectInclude, + HasMissingIncludes::Yes), + HasSource(id(TESTDATA_DIR + "/builddependencycollector/project/indirect_missinginclude.h"), + SourceType::ProjectInclude, + HasMissingIncludes::Yes), + HasSource(id(TESTDATA_DIR + "/builddependencycollector/project/indirect_missinginclude3.h"), + SourceType::ProjectInclude, + HasMissingIncludes::Yes), + HasSource(id(TESTDATA_DIR + "/builddependencycollector/project/indirect_missinginclude4.h"), + SourceType::ProjectInclude, + HasMissingIncludes::Yes), + HasSource(id(TESTDATA_DIR "/builddependencycollector/project/missinginclude3.h"), + SourceType::ProjectInclude, + HasMissingIncludes::Yes), + HasSource(id(TESTDATA_DIR + "/builddependencycollector/project/indirect_missinginclude2.h"), + SourceType::ProjectInclude, + HasMissingIncludes::Yes), + HasSource(id(TESTDATA_DIR "/builddependencycollector/project/header1.h"), + SourceType::UserInclude, + HasMissingIncludes::No))); } @@ -735,6 +781,12 @@ TEST_F(BuildDependencyCollector, Create) Field( &BuildDependency::sources, UnorderedElementsAre( + HasSource(id(TESTDATA_DIR "/builddependencycollector/project/main4.cpp"), + SourceType::Source, + HasMissingIncludes::Yes), + HasSource(id(TESTDATA_DIR "/builddependencycollector/project/missingfile.h"), + SourceType::UserInclude, + HasMissingIncludes::Yes), HasSource(id(TESTDATA_DIR "/builddependencycollector/project/header1.h"), SourceType::UserInclude), HasSource(id(TESTDATA_DIR "/builddependencycollector/project/header2.h"), diff --git a/tests/unit/unittest/gtest-creator-printing.cpp b/tests/unit/unittest/gtest-creator-printing.cpp index 63dde52dc21..2befb52417c 100644 --- a/tests/unit/unittest/gtest-creator-printing.cpp +++ b/tests/unit/unittest/gtest-creator-printing.cpp @@ -1179,7 +1179,7 @@ std::ostream &operator<<(std::ostream &out, const SlotUsage &slotUsage) return out << "(" << slotUsage.free << ", " << slotUsage.used << ")"; } -const char *sourceTypeString(SourceType sourceType) +const char *typeToString(SourceType sourceType) { using ClangBackEnd::SymbolTag; @@ -1201,9 +1201,24 @@ const char *sourceTypeString(SourceType sourceType) return ""; } +const char *typeToString(HasMissingIncludes hasMissingIncludes) +{ + using ClangBackEnd::SymbolTag; + + switch (hasMissingIncludes) { + case HasMissingIncludes::No: + return "HasMissingIncludes::No"; + case HasMissingIncludes::Yes: + return "HasMissingIncludes::Yes"; + } + + return ""; +} + std::ostream &operator<<(std::ostream &out, const SourceEntry &entry) { - return out << "(" << entry.sourceId << ", " << sourceTypeString(entry.sourceType) << ")"; + return out << "(" << entry.sourceId << ", " << typeToString(entry.sourceType) << ", " + << typeToString(entry.hasMissingIncludes) << ")"; } const char *typeToString(IncludeSearchPathType type) diff --git a/tests/unit/unittest/mocksqlitereadstatement.cpp b/tests/unit/unittest/mocksqlitereadstatement.cpp index b9cecd4d1aa..04d2a07c142 100644 --- a/tests/unit/unittest/mocksqlitereadstatement.cpp +++ b/tests/unit/unittest/mocksqlitereadstatement.cpp @@ -186,9 +186,10 @@ MockSqliteReadStatement::value(const long long &symbolId, con return valueReturnSourceLocation(symbolId, locationKind); } -template <> -SourceEntries -MockSqliteReadStatement::values(std::size_t reserveSize, const int &filePathId, const int &projectPartId) +template<> +SourceEntries MockSqliteReadStatement::values(std::size_t reserveSize, + const int &filePathId, + const int &projectPartId) { return valuesReturnSourceEntries(reserveSize, filePathId, projectPartId); } diff --git a/tests/unit/unittest/mocksqlitereadstatement.h b/tests/unit/unittest/mocksqlitereadstatement.h index 43c88eb0441..5c6fbdef772 100644 --- a/tests/unit/unittest/mocksqlitereadstatement.h +++ b/tests/unit/unittest/mocksqlitereadstatement.h @@ -255,9 +255,10 @@ template <> Utils::optional MockSqliteReadStatement::value(const long long &symbolId, const int &locationKind); -template <> -SourceEntries -MockSqliteReadStatement::values(std::size_t reserveSize, const int&, const int&); +template<> +SourceEntries MockSqliteReadStatement::values(std::size_t reserveSize, + const int &, + const int &); template <> Utils::optional diff --git a/tests/unit/unittest/mocksqlitewritestatement.h b/tests/unit/unittest/mocksqlitewritestatement.h index edaea7d7e18..4b369845aa6 100644 --- a/tests/unit/unittest/mocksqlitewritestatement.h +++ b/tests/unit/unittest/mocksqlitewritestatement.h @@ -109,7 +109,7 @@ public: MOCK_METHOD2(write, void (uchar, int)); - MOCK_METHOD3(write, void(int, int, uchar)); + MOCK_METHOD4(write, void(int, int, uchar, uchar)); MOCK_METHOD2(write, void (long long, int)); MOCK_METHOD2(write, void(long long, Utils::SmallStringView)); diff --git a/tests/unit/unittest/refactoringdatabaseinitializer-test.cpp b/tests/unit/unittest/refactoringdatabaseinitializer-test.cpp index 34eaec10bdd..ebd67dccba0 100644 --- a/tests/unit/unittest/refactoringdatabaseinitializer-test.cpp +++ b/tests/unit/unittest/refactoringdatabaseinitializer-test.cpp @@ -104,7 +104,8 @@ TEST_F(RefactoringDatabaseInitializer, AddProjectPartsSourcesTable) EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsSources(projectPartId INTEGER, " - "sourceId INTEGER, sourceType INTEGER, pchCreationTimeStamp INTEGER)"))); + "sourceId INTEGER, sourceType INTEGER, pchCreationTimeStamp INTEGER, " + "hasMissingIncludes INTEGER)"))); EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectPartsSources_sourceId_projectPartId ON projectPartsSources(sourceId, projectPartId)"))); EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsSources_projectPartId ON projectPartsSources(projectPartId)"))); @@ -179,7 +180,8 @@ TEST_F(RefactoringDatabaseInitializer, CreateInTheContructor) EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectParts_projectPartName ON projectParts(projectPartName)"))); EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS projectPartsSources(projectPartId INTEGER, " - "sourceId INTEGER, sourceType INTEGER, pchCreationTimeStamp INTEGER)"))); + "sourceId INTEGER, sourceType INTEGER, pchCreationTimeStamp INTEGER, " + "hasMissingIncludes INTEGER)"))); EXPECT_CALL(mockDatabase, execute(Eq("CREATE UNIQUE INDEX IF NOT EXISTS index_projectPartsSources_sourceId_projectPartId ON projectPartsSources(sourceId, projectPartId)"))); EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsSources_projectPartId ON projectPartsSources(projectPartId)"))); EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS usedMacros(usedMacroId INTEGER PRIMARY KEY, sourceId INTEGER, macroName TEXT)"))); diff --git a/tests/unit/unittest/usedmacrofilter-test.cpp b/tests/unit/unittest/usedmacrofilter-test.cpp index bfbbd7adb70..788a443eee2 100644 --- a/tests/unit/unittest/usedmacrofilter-test.cpp +++ b/tests/unit/unittest/usedmacrofilter-test.cpp @@ -46,7 +46,8 @@ protected: {3, SourceType::ProjectInclude, 0}, {4, SourceType::TopSystemInclude, 0}, {5, SourceType::TopProjectInclude, 0}, - {6, SourceType::Source, 0}}; + {6, SourceType::Source, 0}, + {7, SourceType::TopProjectInclude, 0, ClangBackEnd::HasMissingIncludes::Yes}}; UsedMacros usedMacros{{"YI", 1}, {"ER", 2}, {"SE", 2},