summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libs/clangsupport/clangsupport-lib.pri3
-rw-r--r--src/libs/clangsupport/compilermacro.h78
-rw-r--r--src/libs/clangsupport/projectpartcontainerv2.h23
-rw-r--r--src/libs/clangsupport/refactoringdatabaseinitializer.h2
-rw-r--r--src/plugins/clangpchmanager/projectupdater.cpp10
-rw-r--r--src/plugins/clangpchmanager/projectupdater.h3
-rw-r--r--src/tools/clangrefactoringbackend/source/projectpartartefacts.h30
-rw-r--r--src/tools/clangrefactoringbackend/source/storagesqlitestatementfactory.h8
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolindexer.cpp2
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolstorage.h26
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolstorageinterface.h4
11 files changed, 152 insertions, 37 deletions
diff --git a/src/libs/clangsupport/clangsupport-lib.pri b/src/libs/clangsupport/clangsupport-lib.pri
index 952fd72a10..16aa926a51 100644
--- a/src/libs/clangsupport/clangsupport-lib.pri
+++ b/src/libs/clangsupport/clangsupport-lib.pri
@@ -205,6 +205,7 @@ HEADERS += \
$$PWD/baseserverproxy.h \
$$PWD/filepath.h \
$$PWD/nativefilepath.h \
- $$PWD/filepathview.h
+ $$PWD/filepathview.h \
+ $$PWD/compilermacro.h
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
diff --git a/src/libs/clangsupport/compilermacro.h b/src/libs/clangsupport/compilermacro.h
new file mode 100644
index 0000000000..bfd993bd77
--- /dev/null
+++ b/src/libs/clangsupport/compilermacro.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <utils/smallstringio.h>
+
+#include <vector>
+
+namespace ClangBackEnd {
+
+class CompilerMacro
+{
+public:
+ constexpr CompilerMacro() = default;
+
+ CompilerMacro(Utils::SmallString &&key,
+ Utils::SmallString &&value)
+ : key(std::move(key)),
+ value(std::move(value))
+ {}
+
+ friend QDataStream &operator<<(QDataStream &out, const CompilerMacro &compilerMacro)
+ {
+ out << compilerMacro.key;
+ out << compilerMacro.value;
+
+ return out;
+ }
+
+ friend QDataStream &operator>>(QDataStream &in, CompilerMacro &compilerMacro)
+ {
+ in >> compilerMacro.key;
+ in >> compilerMacro.value;
+
+ return in;
+ }
+
+ friend bool operator==(const CompilerMacro &first, const CompilerMacro &second)
+ {
+ return first.key == second.key
+ && first.value == second.value;
+ }
+
+ friend bool operator<(const CompilerMacro &first, const CompilerMacro &second)
+ {
+ return std::tie(first.key, first.value) < std::tie(second.key, second.value);
+ }
+
+public:
+ Utils::SmallString key;
+ Utils::SmallString value;
+};
+
+using CompilerMacros = std::vector<CompilerMacro>;
+}
diff --git a/src/libs/clangsupport/projectpartcontainerv2.h b/src/libs/clangsupport/projectpartcontainerv2.h
index 14b1e1a815..0ee860344b 100644
--- a/src/libs/clangsupport/projectpartcontainerv2.h
+++ b/src/libs/clangsupport/projectpartcontainerv2.h
@@ -27,7 +27,8 @@
#include "clangsupport_global.h"
-#include <filepathid.h>
+#include "compilermacro.h"
+#include "filepathid.h"
#include <utils/smallstringio.h>
@@ -40,12 +41,12 @@ public:
ProjectPartContainer() = default;
ProjectPartContainer(Utils::SmallString &&projectPartId,
Utils::SmallStringVector &&arguments,
- Utils::SmallStringVector &&macroNames,
+ CompilerMacros &&compilerMacros,
FilePathIds &&headerPathIds,
FilePathIds &&sourcePathIds)
: m_projectPartId(std::move(projectPartId)),
m_arguments(std::move(arguments)),
- m_macroNames(std::move(macroNames)),
+ m_compilerMacros(std::move(compilerMacros)),
m_headerPathIds(std::move(headerPathIds)),
m_sourcePathIds(std::move(sourcePathIds))
{
@@ -66,9 +67,9 @@ public:
return std::move(m_arguments);
}
- const Utils::SmallStringVector &macroNames() const
+ const CompilerMacros &compilerMacros() const
{
- return m_macroNames;
+ return m_compilerMacros;
}
const FilePathIds &sourcePathIds() const
@@ -85,7 +86,7 @@ public:
{
out << container.m_projectPartId;
out << container.m_arguments;
- out << container.m_macroNames;
+ out << container.m_compilerMacros;
out << container.m_headerPathIds;
out << container.m_sourcePathIds;
@@ -96,7 +97,7 @@ public:
{
in >> container.m_projectPartId;
in >> container.m_arguments;
- in >> container.m_macroNames;
+ in >> container.m_compilerMacros;
in >> container.m_headerPathIds;
in >> container.m_sourcePathIds;
@@ -107,7 +108,7 @@ public:
{
return first.m_projectPartId == second.m_projectPartId
&& first.m_arguments == second.m_arguments
- && first.m_macroNames == second.m_macroNames
+ && first.m_compilerMacros == second.m_compilerMacros
&& first.m_headerPathIds == second.m_headerPathIds
&& first.m_sourcePathIds == second.m_sourcePathIds;
}
@@ -116,12 +117,12 @@ public:
{
return std::tie(first.m_projectPartId,
first.m_arguments,
- first.m_macroNames,
+ first.m_compilerMacros,
first.m_headerPathIds,
first.m_sourcePathIds)
< std::tie(second.m_projectPartId,
second.m_arguments,
- second.m_macroNames,
+ second.m_compilerMacros,
second.m_headerPathIds,
second.m_sourcePathIds);
}
@@ -134,7 +135,7 @@ public:
private:
Utils::SmallString m_projectPartId;
Utils::SmallStringVector m_arguments;
- Utils::SmallStringVector m_macroNames;
+ CompilerMacros m_compilerMacros;
FilePathIds m_headerPathIds;
FilePathIds m_sourcePathIds;
};
diff --git a/src/libs/clangsupport/refactoringdatabaseinitializer.h b/src/libs/clangsupport/refactoringdatabaseinitializer.h
index fdddc63d8a..1f47dfba70 100644
--- a/src/libs/clangsupport/refactoringdatabaseinitializer.h
+++ b/src/libs/clangsupport/refactoringdatabaseinitializer.h
@@ -115,7 +115,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.addColumn("compilerMacros", Sqlite::ColumnType::Text);
table.addIndex({projectPartNameColumn});
table.initialize(database);
diff --git a/src/plugins/clangpchmanager/projectupdater.cpp b/src/plugins/clangpchmanager/projectupdater.cpp
index 7681025ca9..c76fbf2e63 100644
--- a/src/plugins/clangpchmanager/projectupdater.cpp
+++ b/src/plugins/clangpchmanager/projectupdater.cpp
@@ -121,11 +121,11 @@ QStringList ProjectUpdater::compilerArguments(CppTools::ProjectPart *projectPart
return builder.build(CppTools::ProjectFile::CXXHeader, CompilerOptionsBuilder::PchUsage::None);
}
-Utils::SmallStringVector ProjectUpdater::createMacroNames(CppTools::ProjectPart *projectPart)
+ClangBackEnd::CompilerMacros ProjectUpdater::createCompilerMacros(CppTools::ProjectPart *projectPart)
{
- return Utils::transform<Utils::SmallStringVector>(projectPart->projectMacros,
- [] (const ProjectExplorer::Macro &macro) {
- return macro.key;
+ return Utils::transform<ClangBackEnd::CompilerMacros>(projectPart->projectMacros,
+ [] (const ProjectExplorer::Macro &macro) {
+ return ClangBackEnd::CompilerMacro{macro.key, macro.value};
});
}
@@ -139,7 +139,7 @@ ClangBackEnd::V2::ProjectPartContainer ProjectUpdater::toProjectPartContainer(
return ClangBackEnd::V2::ProjectPartContainer(projectPart->displayName,
Utils::SmallStringVector(arguments),
- createMacroNames(projectPart),
+ createCompilerMacros(projectPart),
std::move(headerAndSources.headers),
std::move(headerAndSources.sources));
}
diff --git a/src/plugins/clangpchmanager/projectupdater.h b/src/plugins/clangpchmanager/projectupdater.h
index 2e2561fcb1..c58d0ed8e3 100644
--- a/src/plugins/clangpchmanager/projectupdater.h
+++ b/src/plugins/clangpchmanager/projectupdater.h
@@ -27,6 +27,7 @@
#include "clangpchmanager_global.h"
+#include <compilermacro.h>
#include <filecontainerv2.h>
#include <filepathcachinginterface.h>
@@ -73,7 +74,7 @@ unittest_public:
void addToHeaderAndSources(HeaderAndSources &headerAndSources,
const CppTools::ProjectFile &projectFile) const;
static QStringList compilerArguments(CppTools::ProjectPart *projectPart);
- static Utils::SmallStringVector createMacroNames(CppTools::ProjectPart *projectPart);
+ static ClangBackEnd::CompilerMacros createCompilerMacros(CppTools::ProjectPart *projectPart);
static Utils::PathStringVector createExcludedPaths(
const ClangBackEnd::V2::FileContainers &generatedFiles);
diff --git a/src/tools/clangrefactoringbackend/source/projectpartartefacts.h b/src/tools/clangrefactoringbackend/source/projectpartartefacts.h
index 31c191e415..646a87e790 100644
--- a/src/tools/clangrefactoringbackend/source/projectpartartefacts.h
+++ b/src/tools/clangrefactoringbackend/source/projectpartartefacts.h
@@ -28,8 +28,11 @@
#include <utils/algorithm.h>
#include <utils/smallstringvector.h>
+#include <compilermacro.h>
+
#include <QJsonArray>
#include <QJsonDocument>
+#include <QJsonObject>
namespace ClangBackEnd {
@@ -37,16 +40,16 @@ class ProjectPartArtefact
{
public:
ProjectPartArtefact(Utils::SmallStringView compilerArgumentsText,
- Utils::SmallStringView macroNamesText,
+ Utils::SmallStringView compilerMacrosText,
int projectPartId)
- : compilerArguments(toVector(compilerArgumentsText)),
- macroNames(toVector(macroNamesText)),
+ : compilerArguments(toStringVector(compilerArgumentsText)),
+ compilerMacros(toCompilerMacros(compilerMacrosText)),
projectPartId(projectPartId)
{
}
static
- Utils::SmallStringVector toVector(Utils::SmallStringView jsonText)
+ Utils::SmallStringVector toStringVector(Utils::SmallStringView jsonText)
{
QJsonDocument document = QJsonDocument::fromJson(QByteArray::fromRawData(jsonText.data(),
jsonText.size()));
@@ -56,16 +59,31 @@ public:
});
}
+ static
+ CompilerMacros toCompilerMacros(Utils::SmallStringView jsonText)
+ {
+ QJsonDocument document = QJsonDocument::fromJson(QByteArray::fromRawData(jsonText.data(),
+ jsonText.size()));
+ QJsonObject object = document.object();
+ CompilerMacros macros;
+ macros.reserve(object.size());
+
+ for (auto current = object.constBegin(); current != object.constEnd(); ++current)
+ macros.emplace_back(current.key(), current.value().toString());
+
+ return macros;
+ }
+
friend
bool operator==(const ProjectPartArtefact &first, const ProjectPartArtefact &second)
{
return first.compilerArguments == second.compilerArguments
- && first.macroNames == second.macroNames;
+ && first.compilerMacros == second.compilerMacros;
}
public:
Utils::SmallStringVector compilerArguments;
- Utils::SmallStringVector macroNames;
+ CompilerMacros compilerMacros;
int projectPartId = -1;
};
diff --git a/src/tools/clangrefactoringbackend/source/storagesqlitestatementfactory.h b/src/tools/clangrefactoringbackend/source/storagesqlitestatementfactory.h
index 0ecb55b25b..d17d0c9712 100644
--- a/src/tools/clangrefactoringbackend/source/storagesqlitestatementfactory.h
+++ b/src/tools/clangrefactoringbackend/source/storagesqlitestatementfactory.h
@@ -158,11 +158,11 @@ public:
database
};
WriteStatement insertProjectPartStatement{
- "INSERT OR IGNORE INTO projectParts(projectPartName, compilerArguments, macroNames) VALUES (?,?,?)",
+ "INSERT OR IGNORE INTO projectParts(projectPartName, compilerArguments, compilerMacros) VALUES (?,?,?)",
database
};
WriteStatement updateProjectPartStatement{
- "UPDATE projectParts SET compilerArguments = ?, macroNames = ? WHERE projectPartName = ?",
+ "UPDATE projectParts SET compilerArguments = ?, compilerMacros = ? WHERE projectPartName = ?",
database
};
ReadStatement getProjectPartIdStatement{
@@ -217,8 +217,8 @@ public:
"DELETE FROM newSourceDependencies",
database
};
- ReadStatement getProjectPartCompilerArgumentsAndMacroNames{
- "SELECT compilerArguments, macroNames, projectPartId FROM projectParts WHERE projectPartId = (SELECT projectPartId FROM projectPartsSources WHERE sourceId = ?)",
+ ReadStatement getProjectPartCompilerArgumentsAndCompilerMacrosBySourceId{
+ "SELECT compilerArguments, compilerMacros, projectPartId FROM projectParts WHERE projectPartId = (SELECT projectPartId FROM projectPartsSources WHERE sourceId = ?)",
database
};
};
diff --git a/src/tools/clangrefactoringbackend/source/symbolindexer.cpp b/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
index 9c8c871cfa..2d617961fa 100644
--- a/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
+++ b/src/tools/clangrefactoringbackend/source/symbolindexer.cpp
@@ -65,7 +65,7 @@ void SymbolIndexer::updateProjectPart(V2::ProjectPartContainer &&projectPart,
m_symbolStorage.insertOrUpdateProjectPart(projectPart.projectPartId(),
projectPart.arguments(),
- projectPart.macroNames());
+ projectPart.compilerMacros());
m_symbolStorage.updateProjectPartSources(projectPart.projectPartId(),
m_symbolsCollector.sourceFiles());
diff --git a/src/tools/clangrefactoringbackend/source/symbolstorage.h b/src/tools/clangrefactoringbackend/source/symbolstorage.h
index adf2afdef9..5445a82f80 100644
--- a/src/tools/clangrefactoringbackend/source/symbolstorage.h
+++ b/src/tools/clangrefactoringbackend/source/symbolstorage.h
@@ -31,8 +31,9 @@
#include <sqlitetransaction.h>
#include <filepathcachingfwd.h>
-#include <QJsonDocument>
#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
namespace ClangBackEnd {
@@ -67,25 +68,25 @@ public:
void insertOrUpdateProjectPart(Utils::SmallStringView projectPartName,
const Utils::SmallStringVector &commandLineArguments,
- const Utils::SmallStringVector &macroNames) override
+ const CompilerMacros &compilerMacros) override
{
m_statementFactory.database.setLastInsertedRowId(-1);
Utils::SmallString compilerArguementsAsJson = toJson(commandLineArguments);
- Utils::SmallString macroNamesAsJson = toJson(macroNames);
+ Utils::SmallString compilerMacrosAsJson = toJson(compilerMacros);
WriteStatement &insertStatement = m_statementFactory.insertProjectPartStatement;
- insertStatement.write(projectPartName, compilerArguementsAsJson, macroNamesAsJson);
+ insertStatement.write(projectPartName, compilerArguementsAsJson, compilerMacrosAsJson);
if (m_statementFactory.database.lastInsertedRowId() == -1) {
WriteStatement &updateStatement = m_statementFactory.updateProjectPartStatement;
- updateStatement.write(compilerArguementsAsJson, macroNamesAsJson, projectPartName);
+ updateStatement.write(compilerArguementsAsJson, compilerMacrosAsJson, projectPartName);
}
}
Utils::optional<ProjectPartArtefact> fetchProjectPartArtefact(FilePathId sourceId) const override
{
- ReadStatement &statement = m_statementFactory.getProjectPartCompilerArgumentsAndMacroNames;
+ ReadStatement &statement = m_statementFactory.getProjectPartCompilerArgumentsAndCompilerMacrosBySourceId;
return statement.template value<ProjectPartArtefact, 3>(sourceId.filePathId);
}
@@ -157,6 +158,19 @@ public:
return document.toJson(QJsonDocument::Compact);
}
+ static Utils::SmallString toJson(const CompilerMacros &compilerMacros)
+ {
+ QJsonDocument document;
+ QJsonObject object;
+
+ for (const CompilerMacro &macro : compilerMacros)
+ object.insert(QString(macro.key), QString(macro.value));
+
+ document.setObject(object);
+
+ return document.toJson(QJsonDocument::Compact);
+ }
+
void fillTemporarySymbolsTable(const SymbolEntries &symbolEntries)
{
WriteStatement &statement = m_statementFactory.insertSymbolsToNewSymbolsStatement;
diff --git a/src/tools/clangrefactoringbackend/source/symbolstorageinterface.h b/src/tools/clangrefactoringbackend/source/symbolstorageinterface.h
index 91296b9926..cd77704328 100644
--- a/src/tools/clangrefactoringbackend/source/symbolstorageinterface.h
+++ b/src/tools/clangrefactoringbackend/source/symbolstorageinterface.h
@@ -35,6 +35,8 @@
#include <sqlitetransaction.h>
+#include <compilermacro.h>
+
namespace ClangBackEnd {
class SymbolStorageInterface
@@ -49,7 +51,7 @@ public:
const SourceLocationEntries &sourceLocations) = 0;
virtual void insertOrUpdateProjectPart(Utils::SmallStringView projectPartName,
const Utils::SmallStringVector &commandLineArguments,
- const Utils::SmallStringVector &macroNames) = 0;
+ const CompilerMacros &compilerMacros) = 0;
virtual void updateProjectPartSources(Utils::SmallStringView projectPartName,
const FilePathIds &sourceFilePathIds) = 0;
virtual void updateProjectPartSources(int projectPartId,