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);
|
table.addColumn("projectPartId", Sqlite::ColumnType::Integer, Sqlite::Contraint::PrimaryKey);
|
||||||
const Sqlite::Column &projectPartNameColumn = table.addColumn("projectPartName", Sqlite::ColumnType::Text);
|
const Sqlite::Column &projectPartNameColumn = table.addColumn("projectPartName", Sqlite::ColumnType::Text);
|
||||||
table.addColumn("compilerArguments", Sqlite::ColumnType::Text);
|
table.addColumn("compilerArguments", Sqlite::ColumnType::Text);
|
||||||
|
table.addColumn("macroNames", Sqlite::ColumnType::Text);
|
||||||
table.addIndex({projectPartNameColumn});
|
table.addIndex({projectPartNameColumn});
|
||||||
|
|
||||||
table.initialize(database);
|
table.initialize(database);
|
||||||
|
|||||||
@@ -143,11 +143,11 @@ public:
|
|||||||
database
|
database
|
||||||
};
|
};
|
||||||
WriteStatement insertProjectPartStatement{
|
WriteStatement insertProjectPartStatement{
|
||||||
"INSERT OR IGNORE INTO projectParts(projectPartName, compilerArguments) VALUES (?,?)",
|
"INSERT OR IGNORE INTO projectParts(projectPartName, compilerArguments, macroNames) VALUES (?,?,?)",
|
||||||
database
|
database
|
||||||
};
|
};
|
||||||
WriteStatement updateProjectPartStatement{
|
WriteStatement updateProjectPartStatement{
|
||||||
"UPDATE projectParts SET compilerArguments = ? WHERE projectPartName = ?",
|
"UPDATE projectParts SET compilerArguments = ?, macroNames = ? WHERE projectPartName = ?",
|
||||||
database
|
database
|
||||||
};
|
};
|
||||||
ReadStatement getProjectPartIdStatement{
|
ReadStatement getProjectPartIdStatement{
|
||||||
|
|||||||
@@ -64,7 +64,8 @@ void SymbolIndexer::updateProjectPart(V2::ProjectPartContainer &&projectPart,
|
|||||||
m_symbolsCollector.sourceLocations());
|
m_symbolsCollector.sourceLocations());
|
||||||
|
|
||||||
m_symbolStorage.insertOrUpdateProjectPart(projectPart.projectPartId(),
|
m_symbolStorage.insertOrUpdateProjectPart(projectPart.projectPartId(),
|
||||||
projectPart.arguments());
|
projectPart.arguments(),
|
||||||
|
projectPart.macroNames());
|
||||||
m_symbolStorage.updateProjectPartSources(projectPart.projectPartId(),
|
m_symbolStorage.updateProjectPartSources(projectPart.projectPartId(),
|
||||||
m_symbolsCollector.sourceFiles());
|
m_symbolsCollector.sourceFiles());
|
||||||
|
|
||||||
|
|||||||
@@ -66,18 +66,20 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void insertOrUpdateProjectPart(Utils::SmallStringView projectPartName,
|
void insertOrUpdateProjectPart(Utils::SmallStringView projectPartName,
|
||||||
const Utils::SmallStringVector &commandLineArguments) override
|
const Utils::SmallStringVector &commandLineArguments,
|
||||||
|
const Utils::SmallStringVector ¯oNames) override
|
||||||
{
|
{
|
||||||
m_statementFactory.database.setLastInsertedRowId(-1);
|
m_statementFactory.database.setLastInsertedRowId(-1);
|
||||||
|
|
||||||
Utils::SmallString compilerArguementsAsJson = toJson(commandLineArguments);
|
Utils::SmallString compilerArguementsAsJson = toJson(commandLineArguments);
|
||||||
|
Utils::SmallString macroNamesAsJson = toJson(macroNames);
|
||||||
|
|
||||||
WriteStatement &insertStatement = m_statementFactory.insertProjectPartStatement;
|
WriteStatement &insertStatement = m_statementFactory.insertProjectPartStatement;
|
||||||
insertStatement.write(projectPartName, compilerArguementsAsJson);
|
insertStatement.write(projectPartName, compilerArguementsAsJson, macroNamesAsJson);
|
||||||
|
|
||||||
if (m_statementFactory.database.lastInsertedRowId() == -1) {
|
if (m_statementFactory.database.lastInsertedRowId() == -1) {
|
||||||
WriteStatement &updateStatement = m_statementFactory.updateProjectPartStatement;
|
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,
|
virtual void addSymbolsAndSourceLocations(const SymbolEntries &symbolEntries,
|
||||||
const SourceLocationEntries &sourceLocations) = 0;
|
const SourceLocationEntries &sourceLocations) = 0;
|
||||||
virtual void insertOrUpdateProjectPart(Utils::SmallStringView projectPartName,
|
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,
|
virtual void updateProjectPartSources(Utils::SmallStringView projectPartName,
|
||||||
const FilePathIds &sourceFilePathIds) = 0;
|
const FilePathIds &sourceFilePathIds) = 0;
|
||||||
virtual void insertOrUpdateUsedMacros(const UsedMacros &usedMacros) = 0;
|
virtual void insertOrUpdateUsedMacros(const UsedMacros &usedMacros) = 0;
|
||||||
|
|||||||
@@ -58,6 +58,9 @@ public:
|
|||||||
MOCK_METHOD2(write,
|
MOCK_METHOD2(write,
|
||||||
void (Utils::SmallStringView, Utils::SmallStringView));
|
void (Utils::SmallStringView, Utils::SmallStringView));
|
||||||
|
|
||||||
|
MOCK_METHOD3(write,
|
||||||
|
void (Utils::SmallStringView, Utils::SmallStringView, Utils::SmallStringView));
|
||||||
|
|
||||||
MOCK_METHOD1(write,
|
MOCK_METHOD1(write,
|
||||||
void (Utils::SmallStringView));
|
void (Utils::SmallStringView));
|
||||||
|
|
||||||
|
|||||||
@@ -37,9 +37,10 @@ public:
|
|||||||
MOCK_METHOD2(addSymbolsAndSourceLocations,
|
MOCK_METHOD2(addSymbolsAndSourceLocations,
|
||||||
void(const ClangBackEnd::SymbolEntries &symbolEentries,
|
void(const ClangBackEnd::SymbolEntries &symbolEentries,
|
||||||
const ClangBackEnd::SourceLocationEntries &sourceLocations));
|
const ClangBackEnd::SourceLocationEntries &sourceLocations));
|
||||||
MOCK_METHOD2(insertOrUpdateProjectPart,
|
MOCK_METHOD3(insertOrUpdateProjectPart,
|
||||||
void(Utils::SmallStringView projectPartName,
|
void(Utils::SmallStringView projectPartName,
|
||||||
const Utils::SmallStringVector &commandLineArgument));
|
const Utils::SmallStringVector &commandLineArgument,
|
||||||
|
const Utils::SmallStringVector ¯oNames));
|
||||||
MOCK_METHOD2(updateProjectPartSources,
|
MOCK_METHOD2(updateProjectPartSources,
|
||||||
void(Utils::SmallStringView projectPartName,
|
void(Utils::SmallStringView projectPartName,
|
||||||
const ClangBackEnd::FilePathIds &sourceFilePathIds));
|
const ClangBackEnd::FilePathIds &sourceFilePathIds));
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ TEST_F(RefactoringDatabaseInitializer, AddProjectPartsTable)
|
|||||||
{
|
{
|
||||||
InSequence s;
|
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)")));
|
EXPECT_CALL(mockDatabase, execute(Eq("CREATE INDEX IF NOT EXISTS index_projectParts_projectPartName ON projectParts(projectPartName)")));
|
||||||
|
|
||||||
initializer.createProjectPartsTable();
|
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 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 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 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 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 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)")));
|
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)
|
TEST_F(StorageSqliteStatementFactory, InsertProjectPart)
|
||||||
{
|
{
|
||||||
ASSERT_THAT(factory.insertProjectPartStatement.sqlStatement,
|
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)
|
TEST_F(StorageSqliteStatementFactory, UpdateProjectPart)
|
||||||
{
|
{
|
||||||
ASSERT_THAT(factory.updateProjectPartStatement.sqlStatement,
|
ASSERT_THAT(factory.updateProjectPartStatement.sqlStatement,
|
||||||
Eq("UPDATE projectParts SET compilerArguments = ? WHERE projectPartName = ?"));
|
Eq("UPDATE projectParts SET compilerArguments = ?, macroNames = ? WHERE projectPartName = ?"));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(StorageSqliteStatementFactory, GetProjectPartIdForProjectPartName)
|
TEST_F(StorageSqliteStatementFactory, GetProjectPartIdForProjectPartName)
|
||||||
|
|||||||
@@ -167,8 +167,12 @@ TEST_F(SymbolIndexer, UpdateProjectPartsCallsAddSymbolsAndSourceLocationsInStora
|
|||||||
|
|
||||||
TEST_F(SymbolIndexer, UpdateProjectPartsCallsUpdateProjectPartsInStorage)
|
TEST_F(SymbolIndexer, UpdateProjectPartsCallsUpdateProjectPartsInStorage)
|
||||||
{
|
{
|
||||||
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(Eq("project1"), ElementsAre("-I", TESTDATA_DIR, "-Wno-pragma-once-outside-header")));
|
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(Eq("project1"),
|
||||||
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(Eq("project2"), ElementsAre("-I", TESTDATA_DIR, "-x", "c++-header", "-Wno-pragma-once-outside-header")));
|
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));
|
indexer.updateProjectParts({projectPart1, projectPart2}, Utils::clone(unsaved));
|
||||||
}
|
}
|
||||||
@@ -199,7 +203,7 @@ TEST_F(SymbolIndexer, UpdateProjectPartsCallsInOrder)
|
|||||||
EXPECT_CALL(mockCollector, collectSymbols());
|
EXPECT_CALL(mockCollector, collectSymbols());
|
||||||
EXPECT_CALL(mockSqliteTransactionBackend, immediateBegin());
|
EXPECT_CALL(mockSqliteTransactionBackend, immediateBegin());
|
||||||
EXPECT_CALL(mockStorage, addSymbolsAndSourceLocations(symbolEntries, sourceLocations));
|
EXPECT_CALL(mockStorage, addSymbolsAndSourceLocations(symbolEntries, sourceLocations));
|
||||||
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(_, _));
|
EXPECT_CALL(mockStorage, insertOrUpdateProjectPart(_, _, _));
|
||||||
EXPECT_CALL(mockStorage, updateProjectPartSources(_, _));
|
EXPECT_CALL(mockStorage, updateProjectPartSources(_, _));
|
||||||
EXPECT_CALL(mockStorage, insertOrUpdateUsedMacros(Eq(usedMacros)));
|
EXPECT_CALL(mockStorage, insertOrUpdateUsedMacros(Eq(usedMacros)));
|
||||||
EXPECT_CALL(mockSqliteTransactionBackend, commit());
|
EXPECT_CALL(mockSqliteTransactionBackend, commit());
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ TEST_F(SymbolStorage, AddSymbolsAndSourceLocationsCallsWrite)
|
|||||||
{
|
{
|
||||||
InSequence sequence;
|
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(1, 42, 23, 3));
|
||||||
EXPECT_CALL(insertLocationsToNewLocationsStatement, write(2, 7, 11, 4));
|
EXPECT_CALL(insertLocationsToNewLocationsStatement, write(2, 7, 11, 4));
|
||||||
EXPECT_CALL(addNewSymbolsToSymbolsStatement, execute());
|
EXPECT_CALL(addNewSymbolsToSymbolsStatement, execute());
|
||||||
@@ -177,10 +177,13 @@ TEST_F(SymbolStorage, InsertProjectPart)
|
|||||||
ON_CALL(mockDatabase, lastInsertedRowId()).WillByDefault(Return(1));
|
ON_CALL(mockDatabase, lastInsertedRowId()).WillByDefault(Return(1));
|
||||||
|
|
||||||
EXPECT_CALL(mockDatabase, setLastInsertedRowId(-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(mockDatabase, lastInsertedRowId());
|
||||||
|
|
||||||
storage.insertOrUpdateProjectPart("project", {"foo"});
|
storage.insertOrUpdateProjectPart("project", {"foo"}, {"FOO"});
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SymbolStorage, UpdateProjectPart)
|
TEST_F(SymbolStorage, UpdateProjectPart)
|
||||||
@@ -189,11 +192,17 @@ TEST_F(SymbolStorage, UpdateProjectPart)
|
|||||||
ON_CALL(mockDatabase, lastInsertedRowId()).WillByDefault(Return(-1));
|
ON_CALL(mockDatabase, lastInsertedRowId()).WillByDefault(Return(-1));
|
||||||
|
|
||||||
EXPECT_CALL(mockDatabase, setLastInsertedRowId(-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(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)
|
TEST_F(SymbolStorage, UpdateProjectPartSources)
|
||||||
|
|||||||
Reference in New Issue
Block a user