diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2019-04-03 16:57:18 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-04-04 08:32:49 +0000 |
commit | 7e3356c324ef5f3eb2c58392847ca319c712eb82 (patch) | |
tree | b1706d684374d4fdaabd4ee89ed2083819841c4f | |
parent | efb074dd3910ff76bb5f368e36af5c25813eb809 (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.cpp | 14 |
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); } |