summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppelementevaluator.h
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2020-11-30 17:02:33 +0100
committerJarek Kobus <jaroslaw.kobus@qt.io>2020-12-07 14:04:50 +0000
commitc400923308f5c4df4e8d96a04d12dc54322f7ade (patch)
tree472da8291ca7f8bd697f77012b65fb4a7f74b64e /src/plugins/cpptools/cppelementevaluator.h
parentf2dd45d8ce93c858b2bc4afccdbf61adadcdc64f (diff)
downloadqt-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.h25
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;