aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-04-03 16:57:18 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2019-04-04 08:32:49 +0000
commit7e3356c324ef5f3eb2c58392847ca319c712eb82 (patch)
treeb1706d684374d4fdaabd4ee89ed2083819841c4f
parentefb074dd3910ff76bb5f368e36af5c25813eb809 (diff)
QbsProjectManager: Fix infinite loop when "force probes" is checked
This happened for all projects with a Qt dependency, because the module provider kept recreating the Qt modules, which in turn caused Qt Creator to re-parse the project. Change-Id: I77c5c8723c1d0bcd477db648692ddaf9e060ce99 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 0ea82d6f40..521b210852 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -756,10 +756,16 @@ void QbsProject::updateDocuments(const QSet<QString> &files)
}
}
QSet<IDocument *> toAdd;
- foreach (const QString &f, filesToAdd)
- toAdd.insert(new ProjectDocument(Constants::MIME_TYPE, FileName::fromString(f),
- [this]() { delayParsing(); }));
-
+ const FileName buildDir = FileName::fromString(m_projectData.buildDirectory());
+ for (const QString &f : qAsConst(filesToAdd)) {
+ // A changed qbs file (project, module etc) should trigger a re-parse, but not if
+ // the file was generated by qbs itself, in which case that might cause an infinite loop.
+ const FileName fp = FileName::fromString(f);
+ static const ProjectDocument::ProjectCallback noOpCallback = []{};
+ const ProjectDocument::ProjectCallback reparseCallback = [this]() { delayParsing(); };
+ toAdd.insert(new ProjectDocument(Constants::MIME_TYPE, fp, fp.isChildOf(buildDir)
+ ? noOpCallback : reparseCallback));
+ }
m_qbsDocuments.unite(toAdd);
}