From 2b3d4685dbb08106dba05d3261533fde8a9706d2 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 15 Jul 2016 11:02:10 +0200 Subject: [PATCH] QbsProjectManager: Have one qbs::Project per target The class qbs::Project corresponds to a Qt Creator target, not to a Qt Creator project. It represents a project set up for a particular configuration. Task-number: QTCREATORBUG-16545 Change-Id: I9e4fa6a4bf763e49335f294609d7465545df4559 Reviewed-by: Tobias Hunger --- src/plugins/qbsprojectmanager/qbsproject.cpp | 17 +++++++++++++++-- src/plugins/qbsprojectmanager/qbsproject.h | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 822001a4e6..10cda59ea7 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -119,6 +119,7 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) : connect(this, &Project::activeTargetChanged, this, &QbsProject::changeActiveTarget); connect(this, &Project::addedTarget, this, &QbsProject::targetWasAdded); + connect(this, &Project::removedTarget, this, &QbsProject::targetWasRemoved); connect(this, &Project::environmentChanged, this, &QbsProject::delayParsing); connect(&m_parsingDelay, &QTimer::timeout, this, &QbsProject::startParsing); @@ -469,6 +470,7 @@ void QbsProject::handleQbsParsingDone(bool success) generateErrors(m_qbsProjectParser->error()); m_qbsProject = m_qbsProjectParser->qbsProject(); + m_qbsProjects.insert(activeTarget(), m_qbsProject); bool dataChanged = false; if (success) { QTC_ASSERT(m_qbsProject.isValid(), return); @@ -529,15 +531,26 @@ void QbsProject::handleRuleExecutionDone() void QbsProject::targetWasAdded(Target *t) { + m_qbsProjects.insert(t, qbs::Project()); connect(t, &Target::activeBuildConfigurationChanged, this, &QbsProject::delayParsing); connect(t, &Target::buildDirectoryChanged, this, &QbsProject::delayParsing); } +void QbsProject::targetWasRemoved(Target *t) +{ + m_qbsProjects.remove(t); +} + void QbsProject::changeActiveTarget(Target *t) { BuildConfiguration *bc = 0; - if (t && t->kit()) - bc = t->activeBuildConfiguration(); + if (t) { + m_qbsProject = m_qbsProjects.value(t); + if (m_qbsProject.isValid()) + m_projectData = m_qbsProject.projectData(); + if (t->kit()) + bc = t->activeBuildConfiguration(); + } buildConfigurationChanged(bc); } diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index 7edbd73cbb..a7b6dc77bd 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -41,6 +41,7 @@ #include #include +#include #include namespace Core { class IDocument; } @@ -118,6 +119,7 @@ private: void handleQbsParsingDone(bool success); void targetWasAdded(ProjectExplorer::Target *t); + void targetWasRemoved(ProjectExplorer::Target *t); void changeActiveTarget(ProjectExplorer::Target *t); void buildConfigurationChanged(ProjectExplorer::BuildConfiguration *bc); void startParsing(); @@ -145,6 +147,7 @@ private: const qbs::GroupData &oldGroup); const QString m_projectName; + QHash m_qbsProjects; qbs::Project m_qbsProject; qbs::ProjectData m_projectData; QSet m_qbsDocuments; -- GitLab