diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2020-11-30 17:02:33 +0100 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2020-12-07 14:04:50 +0000 |
commit | c400923308f5c4df4e8d96a04d12dc54322f7ade (patch) | |
tree | 472da8291ca7f8bd697f77012b65fb4a7f74b64e /src/plugins/cpptools/cppelementevaluator.h | |
parent | f2dd45d8ce93c858b2bc4afccdbf61adadcdc64f (diff) | |
download | qt-creator-c400923308f5c4df4e8d96a04d12dc54322f7ade.tar.gz |
Modernize Type Hierarchy
Don't freeze UI on request for show Type Hierarchy.
Move the lookup code into a separate thread.
Don't clear tree hierarchy when waiting for new one.
Show progress indicator on top of old hierarchy instead.
Add a task to ProgressManager when working on a new hierarchy.
Handle canceling the process of showing Type Hierarchy.
Implement simple progress reporting for this process.
Optimize a bit DerivedHierarchyVisitor.
Change-Id: I3894ac6ed3f4834831831f083f718f8385ca346f
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppelementevaluator.h')
-rw-r--r-- | src/plugins/cpptools/cppelementevaluator.h | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/plugins/cpptools/cppelementevaluator.h b/src/plugins/cpptools/cppelementevaluator.h index 6ce518a2e1..08ded2c6cb 100644 --- a/src/plugins/cpptools/cppelementevaluator.h +++ b/src/plugins/cpptools/cppelementevaluator.h @@ -32,11 +32,12 @@ #include <cplusplus/CppDocument.h> +#include <QFuture> +#include <QIcon> +#include <QSharedPointer> #include <QString> #include <QStringList> -#include <QSharedPointer> #include <QTextCursor> -#include <QIcon> namespace CPlusPlus { class LookupItem; @@ -57,6 +58,7 @@ public: void setLookupDerivedClasses(const bool lookup); void execute(); + QFuture<QSharedPointer<CppElement>> asyncExecute(); bool identifiedCppElement() const; const QSharedPointer<CppElement> &cppElement() const; bool hasDiagnosis() const; @@ -64,13 +66,18 @@ public: private: void clear(); + using ExecFunction = QFuture<QSharedPointer<CppElement>>(CppElementEvaluator::*) + (const CPlusPlus::Snapshot &, const CPlusPlus::LookupItem &, + const CPlusPlus::LookupContext &); + + QFuture<QSharedPointer<CppElement>> execute(ExecFunction execFuntion); + QFuture<QSharedPointer<CppElement>> syncExec(const CPlusPlus::Snapshot &, + const CPlusPlus::LookupItem &, const CPlusPlus::LookupContext &); + QFuture<QSharedPointer<CppElement>> asyncExec(const CPlusPlus::Snapshot &, + const CPlusPlus::LookupItem &, const CPlusPlus::LookupContext &); void checkDiagnosticMessage(int pos); bool matchIncludeFile(const CPlusPlus::Document::Ptr &document, int line); bool matchMacroInUse(const CPlusPlus::Document::Ptr &document, int pos); - void handleLookupItemMatch(const CPlusPlus::Snapshot &snapshot, - const CPlusPlus::LookupItem &lookupItem, - const CPlusPlus::LookupContext &lookupContext, - const CPlusPlus::Scope *scope); TextEditor::TextEditorWidget *m_editor; CppTools::CppModelManager *m_modelManager; @@ -123,8 +130,10 @@ public: CppClass *toCppClass() final; - void lookupBases(CPlusPlus::Symbol *declaration, const CPlusPlus::LookupContext &context); - void lookupDerived(CPlusPlus::Symbol *declaration, const CPlusPlus::Snapshot &snapshot); + void lookupBases(QFutureInterfaceBase &futureInterface, + CPlusPlus::Symbol *declaration, const CPlusPlus::LookupContext &context); + void lookupDerived(QFutureInterfaceBase &futureInterface, + CPlusPlus::Symbol *declaration, const CPlusPlus::Snapshot &snapshot); public: QList<CppClass> bases; |