summaryrefslogtreecommitdiff
path: root/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-07-11 12:44:12 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-07-11 15:05:32 +0200
commit473692aa234b48e14a29d430aa8733c1db66198f (patch)
tree9ff1ebd3d001bc49159c860172ad1166ef6b81bb /src/plugins/qbsprojectmanager/qbsbuildstep.cpp
parent7e9489db3726a85c4da5ac3b80a46e266cf42aff (diff)
downloadqt-creator-473692aa234b48e14a29d430aa8733c1db66198f.tar.gz
QbsProjectManager: Do not reparse the project after every build.
While it is true that additional information about target artifacts can appear during a build, this data is already present in the qbs::Project object and can simply be retrieved. No reparsing is necessary. The exception is when reparsing was requested while the build was going on. In that case, we really need to do it after the build has finished. Change-Id: Ief3797782ad0ca5651974d4b5d3d64e1199ca9a5 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/plugins/qbsprojectmanager/qbsbuildstep.cpp')
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.cpp32
1 files changed, 22 insertions, 10 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
index a67e7a5418..24c03a94ec 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
@@ -243,24 +243,25 @@ void QbsBuildStep::buildingDone(bool success)
item.codeLocation().fileName(), item.codeLocation().line());
QbsProject *pro = static_cast<QbsProject *>(project());
- connect(pro, SIGNAL(projectParsingDone(bool)), this, SLOT(reparsingDone()));
// Building can uncover additional target artifacts.
- // Wait for reparsing to finish, since before that our run configurations may not be valid.
- pro->parseCurrentBuildConfiguration(true);
+ pro->updateAfterBuild();
+
+ // The reparsing, if it is necessary, has to be done before finished() is emitted, as
+ // otherwise a potential additional build step could conflict with the parsing step.
+ if (pro->parsingScheduled()) {
+ connect(pro, SIGNAL(projectParsingDone(bool)), this, SLOT(reparsingDone()));
+ pro->parseCurrentBuildConfiguration(true);
+ } else {
+ finish();
+ }
}
void QbsBuildStep::reparsingDone()
{
disconnect(static_cast<QbsProject *>(project()), SIGNAL(projectParsingDone(bool)),
this, SLOT(reparsingDone()));
- QTC_ASSERT(m_fi, return);
- m_fi->reportResult(m_lastWasSuccess);
- m_fi = 0; // do not delete, it is not ours
- m_job->deleteLater();
- m_job = 0;
-
- emit finished();
+ finish();
}
void QbsBuildStep::handleTaskStarted(const QString &desciption, int max)
@@ -374,6 +375,17 @@ void QbsBuildStep::setMaxJobs(int jobcount)
emit qbsBuildOptionsChanged();
}
+void QbsBuildStep::finish()
+{
+ QTC_ASSERT(m_fi, return);
+ m_fi->reportResult(m_lastWasSuccess);
+ m_fi = 0; // do not delete, it is not ours
+ m_job->deleteLater();
+ m_job = 0;
+
+ emit finished();
+}
+
// --------------------------------------------------------------------
// QbsBuildStepConfigWidget:
// --------------------------------------------------------------------