summaryrefslogtreecommitdiff
path: root/src/plugins/clangtools/clangtoolruncontrol.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/clangtools/clangtoolruncontrol.h')
-rw-r--r--src/plugins/clangtools/clangtoolruncontrol.h54
1 files changed, 30 insertions, 24 deletions
diff --git a/src/plugins/clangtools/clangtoolruncontrol.h b/src/plugins/clangtools/clangtoolruncontrol.h
index 2027d9513b..bfada9e502 100644
--- a/src/plugins/clangtools/clangtoolruncontrol.h
+++ b/src/plugins/clangtools/clangtoolruncontrol.h
@@ -26,21 +26,22 @@
#pragma once
#include "clangfileinfo.h"
+#include "clangtoolssettings.h"
-#include <projectexplorer/runcontrol.h>
+#include <cpptools/clangdiagnosticconfig.h>
#include <cpptools/projectinfo.h>
+#include <projectexplorer/runcontrol.h>
#include <utils/environment.h>
#include <utils/temporarydirectory.h>
#include <QFutureInterface>
+#include <QSet>
#include <QStringList>
namespace ClangTools {
namespace Internal {
-class ClangTool;
class ClangToolRunner;
-class Diagnostic;
class ProjectBuilder;
struct AnalyzeUnit {
@@ -52,24 +53,27 @@ struct AnalyzeUnit {
};
using AnalyzeUnits = QList<AnalyzeUnit>;
-class ClangToolRunControl : public ProjectExplorer::RunWorker
+using RunnerCreator = std::function<ClangToolRunner*()>;
+
+struct QueueItem {
+ AnalyzeUnit unit;
+ RunnerCreator runnerCreator;
+};
+using QueueItems = QList<QueueItem>;
+
+class ClangToolRunWorker : public ProjectExplorer::RunWorker
{
Q_OBJECT
public:
- ClangToolRunControl(ProjectExplorer::RunControl *runControl,
- ProjectExplorer::Target *target,
- const FileInfos &fileInfos);
+ ClangToolRunWorker(ProjectExplorer::RunControl *runControl,
+ const RunSettings &runSettings,
+ const FileInfos &fileInfos,
+ bool preventBuild);
bool success() const { return m_success; } // For testing.
- virtual ClangTool *tool() = 0;
-
protected:
- void init();
-
- virtual ClangToolRunner *createRunner() = 0;
-
void onRunnerFinishedWithSuccess(const QString &filePath);
void onRunnerFinishedWithFailure(const QString &errorMessage, const QString &errorDetails);
@@ -77,6 +81,9 @@ private:
void start() final;
void stop() final;
+ QList<RunnerCreator> runnerCreators();
+ template <class T> ClangToolRunner *createRunner();
+
AnalyzeUnits unitsToAnalyze();
void analyzeNextFile();
@@ -87,28 +94,27 @@ private:
void finalize();
-protected:
- ProjectBuilder *m_projectBuilder;
- Utils::Environment m_environment;
- QString m_clangExecutable;
- Utils::TemporaryDirectory m_temporaryDir;
-
private:
- QPointer<ProjectExplorer::Target> m_target;
+ RunSettings m_runSettings;
+ CppTools::ClangDiagnosticConfig m_diagnosticConfig;
FileInfos m_fileInfos;
+ ProjectBuilder *m_projectBuilder = nullptr;
+ Utils::Environment m_environment;
+ Utils::TemporaryDirectory m_temporaryDir;
+
CppTools::ProjectInfo m_projectInfoBeforeBuild;
CppTools::ProjectInfo m_projectInfo;
QString m_targetTriple;
Core::Id m_toolChainType;
QFutureInterface<void> m_progress;
- AnalyzeUnits m_unitsToProcess;
+ QueueItems m_queue;
QSet<Utils::FilePath> m_projectFiles;
QSet<ClangToolRunner *> m_runners;
- int m_initialFilesToProcessSize = 0;
- int m_filesAnalyzed = 0;
- int m_filesNotAnalyzed = 0;
+ int m_initialQueueSize = 0;
+ QSet<QString> m_filesAnalyzed;
+ QSet<QString> m_filesNotAnalyzed;
bool m_success = false;
};