diff options
Diffstat (limited to 'src/plugins/clangtools/clangtoolruncontrol.h')
-rw-r--r-- | src/plugins/clangtools/clangtoolruncontrol.h | 54 |
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; }; |