diff options
author | Marco Bubke <marco.bubke@qt.io> | 2017-02-07 15:00:38 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2017-09-14 15:23:56 +0000 |
commit | b6e12f4a1c2a8dbc7a672f0cf42ea76ece71b10d (patch) | |
tree | 81550e7fce5053ecb1ead60ddf59534d44517a87 /src/plugins/cpptools/cppmodelmanager.cpp | |
parent | 3adb71d45ebebd8c8fc2ec6beeb7a5ee67d64e4e (diff) | |
download | qt-creator-b6e12f4a1c2a8dbc7a672f0cf42ea76ece71b10d.tar.gz |
Convert macros from plain QByteArray to a vector of structs
The old code model expected the macros as C++ formatted text
("#define Foo 42) but newer targets like the Clang codemodel expect key
value arguments like "-DFoo=42". So instead of parsing the text again and
again we use an abstract data description.
Task-number: QTCREATORBUG-17915
Change-Id: I0179fd13c48a581e91ee79bba9d42d501c26f19f
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
-rw-r--r-- | src/plugins/cpptools/cppmodelmanager.cpp | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index d2493e2e45..08799709b1 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -47,6 +47,7 @@ #include <texteditor/textdocument.h> #include <projectexplorer/project.h> #include <projectexplorer/projectexplorer.h> +#include <projectexplorer/projectmacro.h> #include <projectexplorer/session.h> #include <extensionsystem/pluginmanager.h> #include <utils/fileutils.h> @@ -138,7 +139,7 @@ public: bool m_dirty; QStringList m_projectFiles; ProjectPartHeaderPaths m_headerPaths; - QByteArray m_definedMacros; + ProjectExplorer::Macros m_definedMacros; // Editor integration mutable QMutex m_cppEditorDocumentsMutex; @@ -446,35 +447,31 @@ ProjectPartHeaderPaths CppModelManager::internalHeaderPaths() const return headerPaths; } -static void addUnique(const QList<QByteArray> &defs, QByteArray *macros, QSet<QByteArray> *alreadyIn) +static void addUnique(const ProjectExplorer::Macros &newMacros, + ProjectExplorer::Macros ¯os, + QSet<ProjectExplorer::Macro> &alreadyIn) { - Q_ASSERT(macros); - Q_ASSERT(alreadyIn); - - foreach (const QByteArray &def, defs) { - if (def.trimmed().isEmpty()) - continue; - if (!alreadyIn->contains(def)) { - macros->append(def); - macros->append('\n'); - alreadyIn->insert(def); + for (const ProjectExplorer::Macro ¯o : newMacros) { + if (!alreadyIn.contains(macro)) { + macros += macro; + alreadyIn.insert(macro); } } } -QByteArray CppModelManager::internalDefinedMacros() const +ProjectExplorer::Macros CppModelManager::internalDefinedMacros() const { - QByteArray macros; - QSet<QByteArray> alreadyIn; + ProjectExplorer::Macros macros; + QSet<ProjectExplorer::Macro> alreadyIn; QMapIterator<ProjectExplorer::Project *, ProjectInfo> it(d->m_projectToProjectsInfo); while (it.hasNext()) { it.next(); const ProjectInfo pinfo = it.value(); - foreach (const ProjectPart::Ptr &part, pinfo.projectParts()) { - addUnique(part->toolchainDefines.split('\n'), ¯os, &alreadyIn); - addUnique(part->projectDefines.split('\n'), ¯os, &alreadyIn); + for (const ProjectPart::Ptr &part : pinfo.projectParts()) { + addUnique(part->toolChainMacros, macros, alreadyIn); + addUnique(part->projectMacros, macros, alreadyIn); if (!part->projectConfigFile.isEmpty()) - macros += ProjectPart::readProjectConfigFile(part); + macros += ProjectExplorer::Macro::toMacros(ProjectPart::readProjectConfigFile(part)); } } return macros; @@ -491,7 +488,8 @@ void CppModelManager::dumpModelManagerConfiguration(const QString &logFileId) dumper.dumpProjectInfos(projectInfos()); dumper.dumpSnapshot(globalSnapshot, globalSnapshotTitle, /*isGlobalSnapshot=*/ true); dumper.dumpWorkingCopy(workingCopy()); - dumper.dumpMergedEntities(headerPaths(), definedMacros()); + dumper.dumpMergedEntities(headerPaths(), + ProjectExplorer:: Macro::toByteArray(definedMacros())); } QSet<AbstractEditorSupport *> CppModelManager::abstractEditorSupports() const @@ -569,12 +567,12 @@ void CppModelManager::renameUsages(Symbol *symbol, d->m_findReferences->renameUsages(symbol, context, replacement); } -void CppModelManager::findMacroUsages(const Macro ¯o) +void CppModelManager::findMacroUsages(const CPlusPlus::Macro ¯o) { d->m_findReferences->findMacroUses(macro); } -void CppModelManager::renameMacroUsages(const Macro ¯o, const QString &replacement) +void CppModelManager::renameMacroUsages(const CPlusPlus::Macro ¯o, const QString &replacement) { d->m_findReferences->renameMacroUses(macro, replacement); } @@ -603,7 +601,7 @@ WorkingCopy CppModelManager::buildWorkingCopyList() // Add the project configuration file QByteArray conf = codeModelConfiguration(); - conf += definedMacros(); + conf += ProjectExplorer::Macro::toByteArray(definedMacros()); workingCopy.insert(configurationFileName(), conf); return workingCopy; @@ -991,7 +989,7 @@ ProjectPart::Ptr CppModelManager::fallbackProjectPart() { ProjectPart::Ptr part(new ProjectPart); - part->projectDefines = definedMacros(); + part->projectMacros = definedMacros(); part->headerPaths = headerPaths(); // Do not activate ObjectiveCExtensions since this will lead to the @@ -1270,7 +1268,7 @@ void CppModelManager::setHeaderPaths(const ProjectPartHeaderPaths &headerPaths) d->m_headerPaths = headerPaths; } -QByteArray CppModelManager::definedMacros() +ProjectExplorer::Macros CppModelManager::definedMacros() { QMutexLocker locker(&d->m_projectMutex); ensureUpdated(); |