forked from qt-creator/qt-creator
Clang: Add macro names the to project part
So we can compare later if the macro names have changed. Change-Id: I65c5f76e07fced8df6cc7282c03430adffcf5fa8 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
@@ -113,6 +113,7 @@ public:
|
||||
table.addColumn("projectPartId", Sqlite::ColumnType::Integer, Sqlite::Contraint::PrimaryKey);
|
||||
const Sqlite::Column &projectPartNameColumn = table.addColumn("projectPartName", Sqlite::ColumnType::Text);
|
||||
table.addColumn("compilerArguments", Sqlite::ColumnType::Text);
|
||||
table.addColumn("macroNames", Sqlite::ColumnType::Text);
|
||||
table.addIndex({projectPartNameColumn});
|
||||
|
||||
table.initialize(database);
|
||||
|
||||
@@ -143,11 +143,11 @@ public:
|
||||
database
|
||||
};
|
||||
WriteStatement insertProjectPartStatement{
|
||||
"INSERT OR IGNORE INTO projectParts(projectPartName, compilerArguments) VALUES (?,?)",
|
||||
"INSERT OR IGNORE INTO projectParts(projectPartName, compilerArguments, macroNames) VALUES (?,?,?)",
|
||||
database
|
||||
};
|
||||
WriteStatement updateProjectPartStatement{
|
||||
"UPDATE projectParts SET compilerArguments = ? WHERE projectPartName = ?",
|
||||
"UPDATE projectParts SET compilerArguments = ?, macroNames = ? WHERE projectPartName = ?",
|
||||
database
|
||||
};
|
||||
ReadStatement getProjectPartIdStatement{
|
||||
|
||||
@@ -64,7 +64,8 @@ void SymbolIndexer::updateProjectPart(V2::ProjectPartContainer &&projectPart,
|
||||
m_symbolsCollector.sourceLocations());
|
||||
|
||||
m_symbolStorage.insertOrUpdateProjectPart(projectPart.projectPartId(),
|
||||
projectPart.arguments());
|
||||
projectPart.arguments(),
|
||||
projectPart.macroNames());
|
||||
m_symbolStorage.updateProjectPartSources(projectPart.projectPartId(),
|
||||
m_symbolsCollector.sourceFiles());
|
||||
|
||||
|
||||
@@ -66,18 +66,20 @@ public:
|
||||
}
|
||||
|
||||
void insertOrUpdateProjectPart(Utils::SmallStringView projectPartName,
|
||||
const Utils::SmallStringVector &commandLineArguments) override
|
||||
const Utils::SmallStringVector &commandLineArguments,
|
||||
const Utils::SmallStringVector ¯oNames) override
|
||||
{
|
||||
m_statementFactory.database.setLastInsertedRowId(-1);
|
||||
|
||||
Utils::SmallString compilerArguementsAsJson = toJson(commandLineArguments);
|
||||
Utils::SmallString macroNamesAsJson = toJson(macroNames);
|
||||
|
||||
WriteStatement &insertStatement = m_statementFactory.insertProjectPartStatement;
|
||||
insertStatement.write(projectPartName, compilerArguementsAsJson);
|
||||
insertStatement.write(projectPartName, compilerArguementsAsJson, macroNamesAsJson);
|
||||
|
||||
if (m_statementFactory.database.lastInsertedRowId() == -1) {
|
||||
WriteStatement &updateStatement = m_statementFactory.updateProjectPartStatement;
|
||||
updateStatement.write(compilerArguementsAsJson, projectPartName);
|
||||
updateStatement.write(compilerArguementsAsJson, macroNamesAsJson, projectPartName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +45,8 @@ public:
|
||||
virtual void addSymbolsAndSourceLocations(const SymbolEntries &symbolEntries,
|
||||
const SourceLocationEntries &sourceLocations) = 0;
|
||||
virtual void insertOrUpdateProjectPart(Utils::SmallStringView projectPartName,
|
||||
const Utils::SmallStringVector &commandLineArguments) = 0;
|
||||
const Utils::SmallStringVector &commandLineArguments,
|
||||
const Utils::SmallStringVector ¯oNames) = 0;
|
||||
virtual void updateProjectPartSources(Utils::SmallStringView projectPartName,
|
||||
const FilePathIds &sourceFilePathIds) = 0;
|
||||
virtual void insertOrUpdateUsedMacros(const UsedMacros &usedMacros) = 0;
|
||||
|
||||
@@ -58,6 +58,9 @@ public:
|
||||
MOCK_METHOD2(write,
|
||||
void (Utils::SmallStringView, Utils::SmallStringView));
|
||||
|
||||
MOCK_METHOD3(write,
|
||||
void (Utils::SmallStringView, Utils::SmallStringView, Utils::SmallStringView));
|
||||
|
||||
MOCK_METHOD1(write,
|
||||
void (Utils::SmallStringView));
|
||||
|
||||
|
||||
@@ -37,9 +37,10 @@ public:
|
||||
MOCK_METHOD2(addSymbolsAndSourceLocations,
|
||||
void(const ClangBackEnd::SymbolEntries &symbolEentries,
|
||||
const ClangBackEnd::SourceLocationEntries &sourceLocations));
|
||||
MOCK_METHOD2(insertOrUpdateProjectPart,
|
||||
MOCK_METHOD3(insertOrUpdateProjectPart,
|
||||
void(Utils::SmallStringView projectPartName,
|
||||
const Utils::SmallStringVector &commandLineArgument));
|
||||
const Utils::SmallStringVector &commandLineArgument,
|
||||
const Utils::SmallStringVector ¯oNames));
|
||||
MOCK_METHOD2(updateProjectPartSources,
|
||||
void(Utils::SmallStringView projectPartName,
|
||||
const ClangBackEnd::FilePathIds &sourceFilePathIds));
|
||||
|
||||
@@ -86,7 +86,7 @@ TEST_F(RefactoringDatabaseInitializer, AddProjectPartsTable)
|
||||
{
|
||||
InSequence s;
|
||||
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS projectParts(projectPartId INTEGER PRIMARY KEY, projectPartName TEXT, compilerArguments TEXT)")));
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS projectParts(projectPartId INTEGER PRIMARY KEY, projectPartName TEXT, compilerArguments TEXT, macroNames TEXT)")));
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_projectParts_projectPartName ON projectParts(projectPartName)")));
|
||||
|
||||
initializer.createProjectPartsTable();
|
||||
@@ -127,7 +127,7 @@ TEST_F(RefactoringDatabaseInitializer, CreateInTheContructor)
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_sources_directoryId_sourceName ON sources(directoryId, sourceName)")));
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS directories(directoryId INTEGER PRIMARY KEY, directoryPath TEXT)")));
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_directories_directoryPath ON directories(directoryPath)")));
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS projectParts(projectPartId INTEGER PRIMARY KEY, projectPartName TEXT, compilerArguments TEXT)")));
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE TABLE IF NOT EXISTS projectParts(projectPartId INTEGER PRIMARY KEY, projectPartName TEXT, compilerArguments TEXT, macroNames TEXT)")));
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE 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)")));
|
||||
EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_projectPartsSources_sourceId_projectPartId ON projectPartsSources(sourceId, projectPartId)")));
|
||||
|
||||
@@ -157,13 +157,13 @@ TEST_F(StorageSqliteStatementFactory, DeleteNewLocationsTableStatement)
|
||||
TEST_F(StorageSqliteStatementFactory, InsertProjectPart)
|
||||
{
|
||||
ASSERT_THAT(factory.insertProjectPartStatement.sqlStatement,
|
||||
Eq("INSERT OR IGNORE INTO projectParts(projectPartName, compilerArguments) VALUES (?,?)"));
|
||||
Eq("INSERT OR IGNORE INTO projectParts(projectPartName, compilerArguments, macroNames) VALUES (?,?,?)"));
|
||||
}
|
||||
|
||||
TEST_F(StorageSqliteStatementFactory, UpdateProjectPart)
|
||||
{
|
||||
ASSERT_THAT(factory.updateProjectPartStatement.sqlStatement,
|
||||
Eq("UPDATE projectParts SET compilerArguments = ? WHERE projectPartName = ?"));
|
||||
Eq("UPDATE projectParts SET compilerArguments = ?, macroNames = ? WHERE projectPartName = ?"));
|
||||
}
|
||||
|
||||
TEST_F(StorageSqliteStatementFactory, GetProjectPartIdForProjectPartName)
|
||||
|
||||
@@ -167,8 +167,12 @@ TEST_F(SymbolIndexer, UpdateProjectPartsCallsAddSymbolsAndSourceLocationsInStora
|
||||
|
||||
TEST_F(SymbolIndexer, UpdateProjectPartsCallsUpdateProjectPartsInStorage)
|
||||
{
|
||||
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(Eq("project1"), ElementsAre("-I", TESTDATA_DIR, "-Wno-pragma-once-outside-header")));
|
||||
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(Eq("project2"), ElementsAre("-I", TESTDATA_DIR, "-x", "c++-header", "-Wno-pragma-once-outside-header")));
|
||||
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(Eq("project1"),
|
||||
ElementsAre("-I", TESTDATA_DIR, "-Wno-pragma-once-outside-header"),
|
||||
ElementsAre("DEFINE")));
|
||||
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(Eq("project2"),
|
||||
ElementsAre("-I", TESTDATA_DIR, "-x", "c++-header", "-Wno-pragma-once-outside-header"),
|
||||
ElementsAre("DEFINE")));
|
||||
|
||||
indexer.updateProjectParts({projectPart1, projectPart2}, Utils::clone(unsaved));
|
||||
}
|
||||
@@ -199,7 +203,7 @@ TEST_F(SymbolIndexer, UpdateProjectPartsCallsInOrder)
|
||||
EXPECT_CALL(mockCollector, collectSymbols());
|
||||
EXPECT_CALL(mockSqliteTransactionBackend, immediateBegin());
|
||||
EXPECT_CALL(mockStorage, addSymbolsAndSourceLocations(symbolEntries, sourceLocations));
|
||||
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(_, _));
|
||||
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(_, _, _));
|
||||
EXPECT_CALL(mockStorage, updateProjectPartSources(_, _));
|
||||
EXPECT_CALL(mockStorage, insertOrUpdateUsedMacros(Eq(usedMacros)));
|
||||
EXPECT_CALL(mockSqliteTransactionBackend, commit());
|
||||
|
||||
@@ -148,7 +148,7 @@ TEST_F(SymbolStorage, AddSymbolsAndSourceLocationsCallsWrite)
|
||||
{
|
||||
InSequence sequence;
|
||||
|
||||
EXPECT_CALL(insertSymbolsToNewSymbolsStatement, write(_, _, _)).Times(2);
|
||||
EXPECT_CALL(insertSymbolsToNewSymbolsStatement, write(An<uint>(), _, _)).Times(2);
|
||||
EXPECT_CALL(insertLocationsToNewLocationsStatement, write(1, 42, 23, 3));
|
||||
EXPECT_CALL(insertLocationsToNewLocationsStatement, write(2, 7, 11, 4));
|
||||
EXPECT_CALL(addNewSymbolsToSymbolsStatement, execute());
|
||||
@@ -177,10 +177,13 @@ TEST_F(SymbolStorage, InsertProjectPart)
|
||||
ON_CALL(mockDatabase, lastInsertedRowId()).WillByDefault(Return(1));
|
||||
|
||||
EXPECT_CALL(mockDatabase, setLastInsertedRowId(-1));
|
||||
EXPECT_CALL(insertProjectPartStatement, write(TypedEq<Utils::SmallStringView>("project"), TypedEq<Utils::SmallStringView>("[\"foo\"]")));
|
||||
EXPECT_CALL(insertProjectPartStatement,
|
||||
write(TypedEq<Utils::SmallStringView>("project"),
|
||||
TypedEq<Utils::SmallStringView>("[\"foo\"]"),
|
||||
TypedEq<Utils::SmallStringView>("[\"FOO\"]")));
|
||||
EXPECT_CALL(mockDatabase, lastInsertedRowId());
|
||||
|
||||
storage.insertOrUpdateProjectPart("project", {"foo"});
|
||||
storage.insertOrUpdateProjectPart("project", {"foo"}, {"FOO"});
|
||||
}
|
||||
|
||||
TEST_F(SymbolStorage, UpdateProjectPart)
|
||||
@@ -189,11 +192,17 @@ TEST_F(SymbolStorage, UpdateProjectPart)
|
||||
ON_CALL(mockDatabase, lastInsertedRowId()).WillByDefault(Return(-1));
|
||||
|
||||
EXPECT_CALL(mockDatabase, setLastInsertedRowId(-1));
|
||||
EXPECT_CALL(insertProjectPartStatement, write(TypedEq<Utils::SmallStringView>("project"), TypedEq<Utils::SmallStringView>("[\"foo\"]")));
|
||||
EXPECT_CALL(insertProjectPartStatement,
|
||||
write(TypedEq<Utils::SmallStringView>("project"),
|
||||
TypedEq<Utils::SmallStringView>("[\"foo\"]"),
|
||||
TypedEq<Utils::SmallStringView>("[\"FOO\"]")));
|
||||
EXPECT_CALL(mockDatabase, lastInsertedRowId());
|
||||
EXPECT_CALL(updateProjectPartStatement, write(TypedEq<Utils::SmallStringView>("[\"foo\"]"), TypedEq<Utils::SmallStringView>("project")));
|
||||
EXPECT_CALL(updateProjectPartStatement,
|
||||
write(TypedEq<Utils::SmallStringView>("[\"foo\"]"),
|
||||
TypedEq<Utils::SmallStringView>("[\"FOO\"]"),
|
||||
TypedEq<Utils::SmallStringView>("project")));
|
||||
|
||||
storage.insertOrUpdateProjectPart("project", {"foo"});
|
||||
storage.insertOrUpdateProjectPart("project", {"foo"}, {"FOO"});
|
||||
}
|
||||
|
||||
TEST_F(SymbolStorage, UpdateProjectPartSources)
|
||||
|
||||
Reference in New Issue
Block a user