diff --git a/src/tools/clangbackend/ipcsource/clangcompletecodejob.cpp b/src/tools/clangbackend/ipcsource/clangcompletecodejob.cpp index 2b767604121..433923b3387 100644 --- a/src/tools/clangbackend/ipcsource/clangcompletecodejob.cpp +++ b/src/tools/clangbackend/ipcsource/clangcompletecodejob.cpp @@ -57,28 +57,21 @@ IAsyncJob::AsyncPrepareResult CompleteCodeJob::prepareAsyncRun() { const JobRequest jobRequest = context().jobRequest; QTC_ASSERT(jobRequest.type == JobRequest::Type::CompleteCode, return AsyncPrepareResult()); + QTC_ASSERT(acquireDocument(), return AsyncPrepareResult()); - try { - m_pinnedDocument = context().documentForJobRequest(); + const TranslationUnit translationUnit = *m_translationUnit; + const UnsavedFiles unsavedFiles = *context().unsavedFiles; + const quint32 line = jobRequest.line; + const quint32 column = jobRequest.column; + const qint32 funcNameStartLine = jobRequest.funcNameStartLine; + const qint32 funcNameStartColumn = jobRequest.funcNameStartColumn; + setRunner([translationUnit, unsavedFiles, line, column, + funcNameStartLine, funcNameStartColumn]() { + return runAsyncHelper(translationUnit, unsavedFiles, line, column, + funcNameStartLine, funcNameStartColumn); + }); - const TranslationUnit translationUnit - = m_pinnedDocument.translationUnit(jobRequest.preferredTranslationUnit); - const UnsavedFiles unsavedFiles = *context().unsavedFiles; - const quint32 line = jobRequest.line; - const quint32 column = jobRequest.column; - const qint32 funcNameStartLine = jobRequest.funcNameStartLine; - const qint32 funcNameStartColumn = jobRequest.funcNameStartColumn; - setRunner([translationUnit, unsavedFiles, line, column, - funcNameStartLine, funcNameStartColumn]() { - return runAsyncHelper(translationUnit, unsavedFiles, line, column, - funcNameStartLine, funcNameStartColumn); - }); - return AsyncPrepareResult{translationUnit.id()}; - - } catch (const std::exception &exception) { - qWarning() << "Error in CompleteCodeJob::prepareAsyncRun:" << exception.what(); - return AsyncPrepareResult(); - } + return AsyncPrepareResult{translationUnit.id()}; } void CompleteCodeJob::finalizeAsyncRun() diff --git a/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.cpp b/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.cpp index 62ae318f61d..2d623e25187 100644 --- a/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.cpp +++ b/src/tools/clangbackend/ipcsource/clangcreateinitialdocumentpreamblejob.cpp @@ -43,24 +43,15 @@ IAsyncJob::AsyncPrepareResult CreateInitialDocumentPreambleJob::prepareAsyncRun( { const JobRequest jobRequest = context().jobRequest; QTC_ASSERT(jobRequest.type == JobRequest::Type::CreateInitialDocumentPreamble, return AsyncPrepareResult()); + QTC_ASSERT(acquireDocument(), return AsyncPrepareResult()); - try { - m_pinnedDocument = context().documentForJobRequest(); - m_pinnedFileContainer = m_pinnedDocument.fileContainer(); + const TranslationUnit translationUnit = *m_translationUnit; + const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput(); + setRunner([translationUnit, updateInput]() { + return runAsyncHelper(translationUnit, updateInput); + }); - const TranslationUnit translationUnit - = m_pinnedDocument.translationUnit(jobRequest.preferredTranslationUnit); - const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput(); - setRunner([translationUnit, updateInput]() { - return runAsyncHelper(translationUnit, updateInput); - }); - return AsyncPrepareResult{translationUnit.id()}; - - } catch (const std::exception &exception) { - qWarning() << "Error in CreateInitialDocumentPreambleJob::prepareAsyncRun:" - << exception.what(); - return AsyncPrepareResult(); - } + return AsyncPrepareResult{translationUnit.id()}; } void CreateInitialDocumentPreambleJob::finalizeAsyncRun() diff --git a/src/tools/clangbackend/ipcsource/clangdocumentjob.h b/src/tools/clangbackend/ipcsource/clangdocumentjob.h index caa2eb6f0f5..7808286ce0b 100644 --- a/src/tools/clangbackend/ipcsource/clangdocumentjob.h +++ b/src/tools/clangbackend/ipcsource/clangdocumentjob.h @@ -30,14 +30,35 @@ #include +#include + namespace ClangBackEnd { template class DocumentJob : public AsyncJob { +protected: + bool acquireDocument() + { + try { + m_pinnedDocument = IAsyncJob::context().documentForJobRequest(); + m_pinnedFileContainer = m_pinnedDocument.fileContainer(); + + const PreferredTranslationUnit preferredTranslationUnit + = IAsyncJob::context().jobRequest.preferredTranslationUnit; + m_translationUnit.reset( + new TranslationUnit(m_pinnedDocument.translationUnit(preferredTranslationUnit))); + return true; + } catch (const std::exception &) { + return false; + } + } + protected: Document m_pinnedDocument; FileContainer m_pinnedFileContainer; + + std::unique_ptr m_translationUnit; }; } // namespace ClangBackEnd diff --git a/src/tools/clangbackend/ipcsource/clangfollowsymboljob.cpp b/src/tools/clangbackend/ipcsource/clangfollowsymboljob.cpp index 2a04be1b0e7..c93b83d6480 100644 --- a/src/tools/clangbackend/ipcsource/clangfollowsymboljob.cpp +++ b/src/tools/clangbackend/ipcsource/clangfollowsymboljob.cpp @@ -51,32 +51,23 @@ IAsyncJob::AsyncPrepareResult FollowSymbolJob::prepareAsyncRun() return AsyncPrepareResult()); // Is too slow because of IPC timings, no implementation for now QTC_ASSERT(jobRequest.resolveTarget, return AsyncPrepareResult()); + QTC_ASSERT(acquireDocument(), return AsyncPrepareResult()); - try { - m_pinnedDocument = context().documentForJobRequest(); - m_pinnedFileContainer = m_pinnedDocument.fileContainer(); + const TranslationUnit translationUnit = *m_translationUnit; + const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput(); + const CommandLineArguments currentArgs(updateInput.filePath.constData(), + updateInput.projectArguments, + updateInput.fileArguments, + false); - const TranslationUnit translationUnit - = m_pinnedDocument.translationUnit(jobRequest.preferredTranslationUnit); + const quint32 line = jobRequest.line; + const quint32 column = jobRequest.column; + const QVector &dependentFiles = jobRequest.dependentFiles; + setRunner([translationUnit, line, column, dependentFiles, currentArgs]() { + return runAsyncHelperFollow(translationUnit, line, column, dependentFiles, currentArgs); + }); - const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput(); - const CommandLineArguments currentArgs(updateInput.filePath.constData(), - updateInput.projectArguments, - updateInput.fileArguments, - false); - - const quint32 line = jobRequest.line; - const quint32 column = jobRequest.column; - const QVector &dependentFiles = jobRequest.dependentFiles; - setRunner([translationUnit, line, column, dependentFiles, currentArgs]() { - return runAsyncHelperFollow(translationUnit, line, column, dependentFiles, currentArgs); - }); - return AsyncPrepareResult{translationUnit.id()}; - - } catch (const std::exception &exception) { - qWarning() << "Error in FollowSymbolJob::prepareAsyncRun:" << exception.what(); - return AsyncPrepareResult(); - } + return AsyncPrepareResult{translationUnit.id()}; } void FollowSymbolJob::finalizeAsyncRun() diff --git a/src/tools/clangbackend/ipcsource/clangparsesupportivetranslationunitjob.cpp b/src/tools/clangbackend/ipcsource/clangparsesupportivetranslationunitjob.cpp index c7646f5834b..02cf524da49 100644 --- a/src/tools/clangbackend/ipcsource/clangparsesupportivetranslationunitjob.cpp +++ b/src/tools/clangbackend/ipcsource/clangparsesupportivetranslationunitjob.cpp @@ -50,24 +50,15 @@ IAsyncJob::AsyncPrepareResult ParseSupportiveTranslationUnitJob::prepareAsyncRun { const JobRequest jobRequest = context().jobRequest; QTC_ASSERT(jobRequest.type == JobRequest::Type::ParseSupportiveTranslationUnit, return AsyncPrepareResult()); + QTC_ASSERT(acquireDocument(), return AsyncPrepareResult()); - try { - m_pinnedDocument = context().documentForJobRequest(); - m_pinnedFileContainer = m_pinnedDocument.fileContainer(); + const TranslationUnit translationUnit = *m_translationUnit; + const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput(); + setRunner([translationUnit, updateInput]() { + return runAsyncHelper(translationUnit, updateInput); + }); - const TranslationUnit translationUnit - = m_pinnedDocument.translationUnit(jobRequest.preferredTranslationUnit); - const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput(); - setRunner([translationUnit, updateInput]() { - return runAsyncHelper(translationUnit, updateInput); - }); - return AsyncPrepareResult{translationUnit.id()}; - - } catch (const std::exception &exception) { - qWarning() << "Error in ParseForSupportiveTranslationUnitJob::prepareAsyncRun:" - << exception.what(); - return AsyncPrepareResult(); - } + return AsyncPrepareResult{translationUnit.id()}; } void ParseSupportiveTranslationUnitJob::finalizeAsyncRun() diff --git a/src/tools/clangbackend/ipcsource/clangreparsesupportivetranslationunitjob.cpp b/src/tools/clangbackend/ipcsource/clangreparsesupportivetranslationunitjob.cpp index 833b8fe2b9d..680693514b9 100644 --- a/src/tools/clangbackend/ipcsource/clangreparsesupportivetranslationunitjob.cpp +++ b/src/tools/clangbackend/ipcsource/clangreparsesupportivetranslationunitjob.cpp @@ -50,24 +50,15 @@ IAsyncJob::AsyncPrepareResult ReparseSupportiveTranslationUnitJob::prepareAsyncR { const JobRequest jobRequest = context().jobRequest; QTC_ASSERT(jobRequest.type == JobRequest::Type::ReparseSupportiveTranslationUnit, return AsyncPrepareResult()); + QTC_ASSERT(acquireDocument(), return AsyncPrepareResult()); - try { - m_pinnedDocument = context().documentForJobRequest(); - m_pinnedFileContainer = m_pinnedDocument.fileContainer(); + const TranslationUnit translationUnit = *m_translationUnit; + const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput(); + setRunner([translationUnit, updateInput]() { + return runAsyncHelper(translationUnit, updateInput); + }); - const TranslationUnit translationUnit - = m_pinnedDocument.translationUnit(jobRequest.preferredTranslationUnit); - const TranslationUnitUpdateInput updateInput = m_pinnedDocument.createUpdateInput(); - setRunner([translationUnit, updateInput]() { - return runAsyncHelper(translationUnit, updateInput); - }); - return AsyncPrepareResult{translationUnit.id()}; - - } catch (const std::exception &exception) { - qWarning() << "Error in ReparseSupportiveTranslationUnitJob::prepareAsyncRun:" - << exception.what(); - return AsyncPrepareResult(); - } + return AsyncPrepareResult{translationUnit.id()}; } void ReparseSupportiveTranslationUnitJob::finalizeAsyncRun() diff --git a/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.cpp b/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.cpp index f0f7f78210c..6f8e3eecb3f 100644 --- a/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.cpp +++ b/src/tools/clangbackend/ipcsource/clangrequestdocumentannotationsjob.cpp @@ -53,22 +53,14 @@ IAsyncJob::AsyncPrepareResult RequestDocumentAnnotationsJob::prepareAsyncRun() const JobRequest jobRequest = context().jobRequest; QTC_ASSERT(jobRequest.type == JobRequest::Type::RequestDocumentAnnotations, return AsyncPrepareResult()); + QTC_ASSERT(acquireDocument(), return AsyncPrepareResult()); - try { - m_pinnedDocument = context().documentForJobRequest(); - m_pinnedFileContainer = m_pinnedDocument.fileContainer(); + const TranslationUnit translationUnit = *m_translationUnit; + setRunner([translationUnit]() { + return runAsyncHelper(translationUnit); + }); - const TranslationUnit translationUnit - = m_pinnedDocument.translationUnit(jobRequest.preferredTranslationUnit); - setRunner([translationUnit]() { - return runAsyncHelper(translationUnit); - }); - return AsyncPrepareResult{translationUnit.id()}; - - } catch (const std::exception &exception) { - qWarning() << "Error in RequestDocumentAnnotationsJob::prepareAsyncRun:" << exception.what(); - return AsyncPrepareResult(); - } + return AsyncPrepareResult{translationUnit.id()}; } void RequestDocumentAnnotationsJob::finalizeAsyncRun() diff --git a/src/tools/clangbackend/ipcsource/clangrequestreferencesjob.cpp b/src/tools/clangbackend/ipcsource/clangrequestreferencesjob.cpp index 1ebc22c9713..b7e60aa19db 100644 --- a/src/tools/clangbackend/ipcsource/clangrequestreferencesjob.cpp +++ b/src/tools/clangbackend/ipcsource/clangrequestreferencesjob.cpp @@ -47,24 +47,16 @@ IAsyncJob::AsyncPrepareResult RequestReferencesJob::prepareAsyncRun() const JobRequest jobRequest = context().jobRequest; QTC_ASSERT(jobRequest.type == JobRequest::Type::RequestReferences, return AsyncPrepareResult()); + QTC_ASSERT(acquireDocument(), return AsyncPrepareResult()); - try { - m_pinnedDocument = context().documentForJobRequest(); - m_pinnedFileContainer = m_pinnedDocument.fileContainer(); + const TranslationUnit translationUnit = *m_translationUnit; + const quint32 line = jobRequest.line; + const quint32 column = jobRequest.column; + setRunner([translationUnit, line, column]() { + return runAsyncHelper(translationUnit, line, column); + }); - const TranslationUnit translationUnit - = m_pinnedDocument.translationUnit(jobRequest.preferredTranslationUnit); - const quint32 line = jobRequest.line; - const quint32 column = jobRequest.column; - setRunner([translationUnit, line, column]() { - return runAsyncHelper(translationUnit, line, column); - }); - return AsyncPrepareResult{translationUnit.id()}; - - } catch (const std::exception &exception) { - qWarning() << "Error in RequestReferencesJob::prepareAsyncRun:" << exception.what(); - return AsyncPrepareResult(); - } + return AsyncPrepareResult{translationUnit.id()}; } void RequestReferencesJob::finalizeAsyncRun() diff --git a/src/tools/clangbackend/ipcsource/clangsuspenddocumentjob.cpp b/src/tools/clangbackend/ipcsource/clangsuspenddocumentjob.cpp index 0e71813ba20..27b204cc77f 100644 --- a/src/tools/clangbackend/ipcsource/clangsuspenddocumentjob.cpp +++ b/src/tools/clangbackend/ipcsource/clangsuspenddocumentjob.cpp @@ -42,22 +42,14 @@ IAsyncJob::AsyncPrepareResult SuspendDocumentJob::prepareAsyncRun() { const JobRequest jobRequest = context().jobRequest; QTC_ASSERT(jobRequest.type == JobRequest::Type::SuspendDocument, return AsyncPrepareResult()); + QTC_ASSERT(acquireDocument(), return AsyncPrepareResult()); - try { - m_pinnedDocument = context().documentForJobRequest(); - m_pinnedFileContainer = m_pinnedDocument.fileContainer(); + TranslationUnit translationUnit = *m_translationUnit; + setRunner([translationUnit]() { + return runAsyncHelper(translationUnit); + }); - TranslationUnit translationUnit - = m_pinnedDocument.translationUnit(jobRequest.preferredTranslationUnit); - setRunner([translationUnit]() { - return runAsyncHelper(translationUnit); - }); - return AsyncPrepareResult{translationUnit.id()}; - - } catch (const std::exception &exception) { - qWarning() << "Error in SuspendDocumentJob::prepareAsyncRun:" << exception.what(); - return AsyncPrepareResult(); - } + return AsyncPrepareResult{translationUnit.id()}; } void SuspendDocumentJob::finalizeAsyncRun() diff --git a/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.cpp b/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.cpp index 3698d1c40c8..835377f73ac 100644 --- a/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.cpp +++ b/src/tools/clangbackend/ipcsource/clangupdatedocumentannotationsjob.cpp @@ -57,23 +57,15 @@ IAsyncJob::AsyncPrepareResult UpdateDocumentAnnotationsJob::prepareAsyncRun() { const JobRequest jobRequest = context().jobRequest; QTC_ASSERT(isExpectedJobRequestType(jobRequest), return AsyncPrepareResult()); + QTC_ASSERT(acquireDocument(), return AsyncPrepareResult()); - try { - m_pinnedDocument = context().documentForJobRequest(); - m_pinnedFileContainer = m_pinnedDocument.fileContainer(); + const TranslationUnit translationUnit = *m_translationUnit; + const TranslationUnitUpdateInput updateInput = createUpdateInput(m_pinnedDocument); + setRunner([translationUnit, updateInput]() { + return runAsyncHelper(translationUnit, updateInput); + }); - const TranslationUnit translationUnit - = m_pinnedDocument.translationUnit(jobRequest.preferredTranslationUnit); - const TranslationUnitUpdateInput updateInput = createUpdateInput(m_pinnedDocument); - setRunner([translationUnit, updateInput]() { - return runAsyncHelper(translationUnit, updateInput); - }); - return AsyncPrepareResult{translationUnit.id()}; - - } catch (const std::exception &exception) { - qWarning() << "Error in UpdateDocumentAnnotationsJob::prepareAsyncRun:" << exception.what(); - return AsyncPrepareResult(); - } + return AsyncPrepareResult{translationUnit.id()}; } void UpdateDocumentAnnotationsJob::finalizeAsyncRun()