aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clangtools/clangtoolrunner.cpp
diff options
context:
space:
mode:
authorDavid Schulz <[email protected]>2023-06-19 10:11:45 +0200
committerDavid Schulz <[email protected]>2023-06-20 08:26:14 +0000
commitdeaef7da335469b8762174bd47c77c665a8fe8eb (patch)
treecbb1080160491cc2e95066654e3a3d6ceb6527b9 /src/plugins/clangtools/clangtoolrunner.cpp
parentf97d9e51c083814a8b6d5e9574daafabb2890f81 (diff)
ClangTools: make parsing diagnostics cancelable
Change-Id: Ia5b4bd6f5fbb9a81888b1eaf11b956617e4b740c Reviewed-by: Jarek Kobus <[email protected]>
Diffstat (limited to 'src/plugins/clangtools/clangtoolrunner.cpp')
-rw-r--r--src/plugins/clangtools/clangtoolrunner.cpp33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/plugins/clangtools/clangtoolrunner.cpp b/src/plugins/clangtools/clangtoolrunner.cpp
index 01b71fefe2f..bfbc9b3957f 100644
--- a/src/plugins/clangtools/clangtoolrunner.cpp
+++ b/src/plugins/clangtools/clangtoolrunner.cpp
@@ -114,7 +114,6 @@ GroupItem clangToolTask(const AnalyzeInputData &input,
QString name;
FilePath executable;
FilePath outputFilePath;
- QString errorMessage;
};
const TreeStorage<ClangToolStorage> storage;
@@ -186,24 +185,36 @@ GroupItem clangToolTask(const AnalyzeInputData &input,
{false, input.unit.file, data.outputFilePath, {}, input.tool, message, details});
};
- const auto onReadSetup = [=](Async<Diagnostics> &data) {
- data.setConcurrentCallData(&readExportedDiagnostics,
+ const auto onReadSetup = [=](Async<expected_str<Diagnostics>> &data) {
+ data.setConcurrentCallData(&parseDiagnostics,
storage->outputFilePath,
- input.diagnosticsFilter,
- &storage->errorMessage);
+ input.diagnosticsFilter);
data.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer());
};
- const auto onReadDone = [=](const Async<Diagnostics> &data) {
+ const auto onReadDone = [=](const Async<expected_str<Diagnostics>> &data) {
if (!outputHandler)
return;
- outputHandler(
- {true, input.unit.file, storage->outputFilePath, data.result(), input.tool});
+ const expected_str<Diagnostics> result = data.result();
+ const bool success = result.has_value();
+ Diagnostics diagnostics;
+ QString error;
+ if (success)
+ diagnostics = *result;
+ else
+ error = result.error();
+ outputHandler({success,
+ input.unit.file,
+ storage->outputFilePath,
+ diagnostics,
+ input.tool,
+ error});
};
- const auto onReadError = [=](const Async<Diagnostics> &) {
+ const auto onReadError = [=](const Async<expected_str<Diagnostics>> &data) {
if (!outputHandler)
return;
+ const expected_str<Diagnostics> result = data.result();
outputHandler(
- {false, input.unit.file, storage->outputFilePath, {}, input.tool, storage->errorMessage});
+ {false, input.unit.file, storage->outputFilePath, {}, input.tool, result.error()});
};
const Group group {
@@ -213,7 +224,7 @@ GroupItem clangToolTask(const AnalyzeInputData &input,
sequential,
finishAllAndDone,
ProcessTask(onProcessSetup, onProcessDone, onProcessError),
- AsyncTask<Diagnostics>(onReadSetup, onReadDone, onReadError)
+ AsyncTask<expected_str<Diagnostics>>(onReadSetup, onReadDone, onReadError)
}
};
return group;