aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/compilationdatabaseprojectmanager
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2019-08-06 14:46:37 +0200
committerTobias Hunger <tobias.hunger@qt.io>2019-08-09 12:45:29 +0000
commit09530d6dcc0fdbdf27d04c63149eb285e122d9dc (patch)
tree5f33e1bd1d04fb258251f74057f24ab96fe6fdd7 /src/plugins/compilationdatabaseprojectmanager
parent8868989d5c72cd57e5068481198ffa0af4cb4bb0 (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')
-rw-r--r--src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp11
-rw-r--r--src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp19
-rw-r--r--src/plugins/compilationdatabaseprojectmanager/compilationdbparser.h17
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