diff options
author | David Schulz <[email protected]> | 2023-06-19 10:11:45 +0200 |
---|---|---|
committer | David Schulz <[email protected]> | 2023-06-20 08:26:14 +0000 |
commit | deaef7da335469b8762174bd47c77c665a8fe8eb (patch) | |
tree | cbb1080160491cc2e95066654e3a3d6ceb6527b9 /src/plugins/clangtools/clangtoolrunner.cpp | |
parent | f97d9e51c083814a8b6d5e9574daafabb2890f81 (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.cpp | 33 |
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; |