diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2019-08-06 14:46:37 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2019-08-09 12:45:29 +0000 |
commit | 09530d6dcc0fdbdf27d04c63149eb285e122d9dc (patch) | |
tree | 5f33e1bd1d04fb258251f74057f24ab96fe6fdd7 /src/plugins/compilationdatabaseprojectmanager | |
parent | 8868989d5c72cd57e5068481198ffa0af4cb4bb0 (diff) |
ProjectExplorer: Use RAII pattern for parsing start/stop signalling
Change-Id: I13de537140f265db3e3d0ab1cd924d6897cd90c8
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/compilationdatabaseprojectmanager')
3 files changed, 32 insertions, 15 deletions
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp index a2d99b276e..a601f3d3a9 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp @@ -450,17 +450,18 @@ void CompilationDatabaseProject::reparseProject() if (m_parser) { QTC_CHECK(isParsing()); m_parser->stop(); - emitParsingFinished(false); } - m_parser = new CompilationDbParser(displayName(), projectFilePath(), rootPathFromSettings(), - m_mimeBinaryCache, this); + m_parser = new CompilationDbParser(displayName(), + projectFilePath(), + rootPathFromSettings(), + m_mimeBinaryCache, + guardParsingRun(), + this); connect(m_parser, &CompilationDbParser::finished, this, [this](bool success) { if (success) buildTreeAndProjectParts(); m_parser = nullptr; - emitParsingFinished(success); }); - emitParsingStarted(); m_parser->start(); } diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp index d75bf7be40..6c91311898 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp @@ -43,14 +43,18 @@ using namespace Utils; namespace CompilationDatabaseProjectManager { namespace Internal { -CompilationDbParser::CompilationDbParser(const QString &projectName, const FilePath &projectPath, - const FilePath &rootPath, MimeBinaryCache &mimeBinaryCache, +CompilationDbParser::CompilationDbParser(const QString &projectName, + const FilePath &projectPath, + const FilePath &rootPath, + MimeBinaryCache &mimeBinaryCache, + ProjectExplorer::Project::ParseGuard &&guard, QObject *parent) - : QObject(parent), - m_projectName(projectName), - m_projectFilePath(projectPath), - m_rootPath(rootPath), - m_mimeBinaryCache(mimeBinaryCache) + : QObject(parent) + , m_projectName(projectName) + , m_projectFilePath(projectPath) + , m_rootPath(rootPath) + , m_mimeBinaryCache(mimeBinaryCache) + , m_guard(std::move(guard)) { connect(&m_parserWatcher, &QFutureWatcher<void>::finished, this, [this] { m_dbContents = m_parserWatcher.result(); @@ -112,6 +116,7 @@ void CompilationDbParser::stop() m_treeScanner->disconnect(); m_treeScanner->future().cancel(); } + m_guard = {}; deleteLater(); } diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.h b/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.h index ded713d590..fe3e319076 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.h +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.h @@ -27,6 +27,8 @@ #include "compilationdatabaseutils.h" +#include <projectexplorer/project.h> + #include <utils/fileutils.h> #include <QFutureWatcher> @@ -48,15 +50,22 @@ class CompilationDbParser : public QObject { Q_OBJECT public: - explicit CompilationDbParser(const QString &projectName, const Utils::FilePath &projectPath, - const Utils::FilePath &rootPath, MimeBinaryCache &mimeBinaryCache, + explicit CompilationDbParser(const QString &projectName, + const Utils::FilePath &projectPath, + const Utils::FilePath &rootPath, + MimeBinaryCache &mimeBinaryCache, + ProjectExplorer::Project::ParseGuard &&guard, QObject *parent = nullptr); void start(); void stop(); QList<ProjectExplorer::FileNode *> scannedFiles() const; - DbContents dbContents() const { return m_dbContents; } + DbContents dbContents() const + { + m_guard.markAsSuccess(); + return m_dbContents; + } signals: void finished(bool success); @@ -72,6 +81,8 @@ private: ProjectExplorer::TreeScanner *m_treeScanner = nullptr; QFutureWatcher<DbContents> m_parserWatcher; DbContents m_dbContents; + + ProjectExplorer::Project::ParseGuard m_guard; }; } // namespace Internal |