summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/clangcodemodel/clanghoverhandler.cpp11
-rw-r--r--src/plugins/clangcodemodel/clanghoverhandler.h8
-rw-r--r--src/plugins/clangrefactoring/clangqueryhoverhandler.cpp7
-rw-r--r--src/plugins/clangrefactoring/clangqueryhoverhandler.h4
-rw-r--r--src/plugins/cppeditor/resourcepreviewhoverhandler.cpp7
-rw-r--r--src/plugins/cppeditor/resourcepreviewhoverhandler.h4
-rw-r--r--src/plugins/cpptools/cpphoverhandler.cpp5
-rw-r--r--src/plugins/cpptools/cpphoverhandler.h4
-rw-r--r--src/plugins/qmakeprojectmanager/profilehoverhandler.cpp7
-rw-r--r--src/plugins/qmakeprojectmanager/profilehoverhandler.h4
-rw-r--r--src/plugins/qmljseditor/qmljshoverhandler.cpp5
-rw-r--r--src/plugins/qmljseditor/qmljshoverhandler.h4
-rw-r--r--src/plugins/texteditor/basehoverhandler.cpp30
-rw-r--r--src/plugins/texteditor/basehoverhandler.h14
-rw-r--r--src/plugins/texteditor/colorpreviewhoverhandler.cpp7
-rw-r--r--src/plugins/texteditor/colorpreviewhoverhandler.h2
-rw-r--r--src/plugins/texteditor/texteditor.cpp6
17 files changed, 69 insertions, 60 deletions
diff --git a/src/plugins/clangcodemodel/clanghoverhandler.cpp b/src/plugins/clangcodemodel/clanghoverhandler.cpp
index 6610b555c2..2281b5d304 100644
--- a/src/plugins/clangcodemodel/clanghoverhandler.cpp
+++ b/src/plugins/clangcodemodel/clanghoverhandler.cpp
@@ -102,17 +102,16 @@ static QFuture<CppTools::ToolTipInfo> editorDocumentHandlesToolTipInfo(
ClangHoverHandler::ClangHoverHandler()
{
- setIsAsyncHandler(true);
}
ClangHoverHandler::~ClangHoverHandler()
{
- cancelAsyncCheck();
+ abort();
}
-void ClangHoverHandler::identifyMatchAsync(TextEditorWidget *editorWidget,
- int pos,
- BaseHoverHandler::ReportPriority report)
+void ClangHoverHandler::identifyMatch(TextEditorWidget *editorWidget,
+ int pos,
+ BaseHoverHandler::ReportPriority report)
{
// Reset
m_futureWatcher.reset();
@@ -143,7 +142,7 @@ void ClangHoverHandler::identifyMatchAsync(TextEditorWidget *editorWidget,
report(Priority_None); // Ops, something went wrong.
}
-void ClangHoverHandler::cancelAsyncCheck()
+void ClangHoverHandler::abort()
{
if (m_futureWatcher)
m_futureWatcher->cancel();
diff --git a/src/plugins/clangcodemodel/clanghoverhandler.h b/src/plugins/clangcodemodel/clanghoverhandler.h
index 85b7999f94..e6e262ecd0 100644
--- a/src/plugins/clangcodemodel/clanghoverhandler.h
+++ b/src/plugins/clangcodemodel/clanghoverhandler.h
@@ -40,14 +40,14 @@ public:
ClangHoverHandler();
~ClangHoverHandler() override;
- void identifyMatchAsync(TextEditor::TextEditorWidget *editorWidget,
- int pos,
- ReportPriority report) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void decorateToolTip() override;
void operateTooltip(TextEditor::TextEditorWidget *editorWidget, const QPoint &point) override;
private:
- void cancelAsyncCheck() override;
+ void abort() override;
void processToolTipInfo(const CppTools::ToolTipInfo &info);
private:
diff --git a/src/plugins/clangrefactoring/clangqueryhoverhandler.cpp b/src/plugins/clangrefactoring/clangqueryhoverhandler.cpp
index e8ce90c297..11a29f1db1 100644
--- a/src/plugins/clangrefactoring/clangqueryhoverhandler.cpp
+++ b/src/plugins/clangrefactoring/clangqueryhoverhandler.cpp
@@ -30,6 +30,7 @@
#include <dynamicastmatcherdiagnosticmessagecontainer.h>
#include <texteditor/texteditor.h>
+#include <utils/executeondestruction.h>
namespace ClangRefactoring {
@@ -38,8 +39,12 @@ ClangQueryHoverHandler::ClangQueryHoverHandler(ClangQueryHighlighter *highligher
{
}
-void ClangQueryHoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget, int position)
+void ClangQueryHoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int position,
+ ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
using Messages = ClangBackEnd::DynamicASTMatcherDiagnosticMessageContainers;
using Contexts = ClangBackEnd::DynamicASTMatcherDiagnosticContextContainers;
diff --git a/src/plugins/clangrefactoring/clangqueryhoverhandler.h b/src/plugins/clangrefactoring/clangqueryhoverhandler.h
index 7a93bcbf5d..a9dfc5fe22 100644
--- a/src/plugins/clangrefactoring/clangqueryhoverhandler.h
+++ b/src/plugins/clangrefactoring/clangqueryhoverhandler.h
@@ -37,7 +37,9 @@ public:
ClangQueryHoverHandler(ClangQueryHighlighter *highligher);
protected:
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int position) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int position,
+ ReportPriority report) override;
private:
ClangQueryHighlighter *m_highligher;
diff --git a/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp b/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp
index 47c691760d..a657fcd6bc 100644
--- a/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp
+++ b/src/plugins/cppeditor/resourcepreviewhoverhandler.cpp
@@ -33,6 +33,7 @@
#include <projectexplorer/projecttree.h>
#include <projectexplorer/project.h>
#include <texteditor/texteditor.h>
+#include <utils/executeondestruction.h>
#include <QPoint>
#include <QTextBlock>
@@ -164,8 +165,12 @@ static QString findResourceInProject(const QString &resName)
return QString();
}
-void ResourcePreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
+void ResourcePreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
if (editorWidget->extraSelectionTooltip(pos).isEmpty()) {
const QTextBlock tb = editorWidget->document()->findBlock(pos);
const int tbpos = pos - tb.position();
diff --git a/src/plugins/cppeditor/resourcepreviewhoverhandler.h b/src/plugins/cppeditor/resourcepreviewhoverhandler.h
index 2ccb261c2a..b0977099ec 100644
--- a/src/plugins/cppeditor/resourcepreviewhoverhandler.h
+++ b/src/plugins/cppeditor/resourcepreviewhoverhandler.h
@@ -35,7 +35,9 @@ namespace Internal {
class ResourcePreviewHoverHandler : public TextEditor::BaseHoverHandler
{
private:
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void operateTooltip(TextEditor::TextEditorWidget *editorWidget, const QPoint &point) override;
private:
diff --git a/src/plugins/cpptools/cpphoverhandler.cpp b/src/plugins/cpptools/cpphoverhandler.cpp
index 1ff41b7fdc..3969065ff7 100644
--- a/src/plugins/cpptools/cpphoverhandler.cpp
+++ b/src/plugins/cpptools/cpphoverhandler.cpp
@@ -31,6 +31,7 @@
#include <texteditor/texteditor.h>
#include <utils/textutils.h>
+#include <utils/executeondestruction.h>
#include <QTextCursor>
#include <QUrl>
@@ -67,8 +68,10 @@ QString CppHoverHandler::tooltipTextForHelpItem(const HelpItem &helpItem)
return QString();
}
-void CppHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
+void CppHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
QTextCursor tc(editorWidget->document());
tc.setPosition(pos);
diff --git a/src/plugins/cpptools/cpphoverhandler.h b/src/plugins/cpptools/cpphoverhandler.h
index edfa6901cf..75d6475537 100644
--- a/src/plugins/cpptools/cpphoverhandler.h
+++ b/src/plugins/cpptools/cpphoverhandler.h
@@ -37,7 +37,9 @@ public:
static QString tooltipTextForHelpItem(const TextEditor::HelpItem &help);
private:
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void decorateToolTip() override;
};
diff --git a/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp b/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp
index dfbee9bb66..2aa7fb94b3 100644
--- a/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp
+++ b/src/plugins/qmakeprojectmanager/profilehoverhandler.cpp
@@ -30,6 +30,7 @@
#include <coreplugin/helpmanager.h>
#include <texteditor/texteditor.h>
#include <utils/htmldocextractor.h>
+#include <utils/executeondestruction.h>
#include <QTextBlock>
#include <QUrl>
@@ -44,8 +45,12 @@ ProFileHoverHandler::ProFileHoverHandler()
{
}
-void ProFileHoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos)
+void ProFileHoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
m_docFragment.clear();
m_manualKind = UnknownManual;
if (!editorWidget->extraSelectionTooltip(pos).isEmpty()) {
diff --git a/src/plugins/qmakeprojectmanager/profilehoverhandler.h b/src/plugins/qmakeprojectmanager/profilehoverhandler.h
index cc9f91ef02..bbcd74db7a 100644
--- a/src/plugins/qmakeprojectmanager/profilehoverhandler.h
+++ b/src/plugins/qmakeprojectmanager/profilehoverhandler.h
@@ -40,7 +40,9 @@ public:
ProFileHoverHandler();
private:
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void identifyQMakeKeyword(const QString &text, int pos);
enum ManualKind {
diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp
index a767d6713b..7334ad7ecd 100644
--- a/src/plugins/qmljseditor/qmljshoverhandler.cpp
+++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp
@@ -45,6 +45,7 @@
#include <qmljs/qmljsqrcparser.h>
#include <texteditor/texteditor.h>
#include <texteditor/helpitem.h>
+#include <utils/executeondestruction.h>
#include <utils/tooltip/tooltip.h>
#include <QDir>
@@ -201,8 +202,10 @@ bool QmlJSHoverHandler::setQmlTypeHelp(const ScopeChain &scopeChain, const Docum
return true;
}
-void QmlJSHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
+void QmlJSHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
reset();
if (!m_modelManager)
diff --git a/src/plugins/qmljseditor/qmljshoverhandler.h b/src/plugins/qmljseditor/qmljshoverhandler.h
index fde05c7e4a..682d713f39 100644
--- a/src/plugins/qmljseditor/qmljshoverhandler.h
+++ b/src/plugins/qmljseditor/qmljshoverhandler.h
@@ -58,7 +58,9 @@ public:
private:
void reset();
- void identifyMatch(TextEditor::TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditor::TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report) override;
void operateTooltip(TextEditor::TextEditorWidget *editorWidget, const QPoint &point) override;
bool matchDiagnosticMessage(QmlJSEditorWidget *qmlEditor, int pos);
diff --git a/src/plugins/texteditor/basehoverhandler.cpp b/src/plugins/texteditor/basehoverhandler.cpp
index 86d8eb0bbc..10a532bcc1 100644
--- a/src/plugins/texteditor/basehoverhandler.cpp
+++ b/src/plugins/texteditor/basehoverhandler.cpp
@@ -26,6 +26,7 @@
#include "basehoverhandler.h"
#include "texteditor.h"
+#include <utils/executeondestruction.h>
#include <utils/qtcassert.h>
#include <utils/tooltip/tooltip.h>
@@ -34,11 +35,6 @@ namespace TextEditor {
BaseHoverHandler::~BaseHoverHandler()
{}
-bool BaseHoverHandler::isAsyncHandler() const
-{
- return m_isAsyncHandler;
-}
-
void BaseHoverHandler::showToolTip(TextEditorWidget *widget, const QPoint &point, bool decorate)
{
if (decorate)
@@ -55,11 +51,6 @@ void BaseHoverHandler::checkPriority(TextEditorWidget *widget,
process(widget, pos, report);
}
-void BaseHoverHandler::cancelAsyncCheck()
-{
- QTC_CHECK(false && "BaseHoverHandler: Implement cancelCheck() in derived class!");
-}
-
int BaseHoverHandler::priority() const
{
if (m_priority >= 0)
@@ -117,31 +108,18 @@ void BaseHoverHandler::process(TextEditorWidget *widget, int pos, ReportPriority
m_priority = -1;
m_lastHelpItemIdentified = HelpItem();
- if (m_isAsyncHandler) {
- identifyMatchAsync(widget, pos, report);
- } else {
- identifyMatch(widget, pos);
- report(priority());
- }
+ identifyMatch(widget, pos, report);
}
-void BaseHoverHandler::setIsAsyncHandler(bool isAsyncHandler)
+void BaseHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report)
{
- m_isAsyncHandler = isAsyncHandler;
-}
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
-void BaseHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
-{
QString tooltip = editorWidget->extraSelectionTooltip(pos);
if (!tooltip.isEmpty())
setToolTip(tooltip);
}
-void BaseHoverHandler::identifyMatchAsync(TextEditorWidget *, int, BaseHoverHandler::ReportPriority)
-{
- QTC_CHECK(false && "BaseHoverHandler: Implement identifyMatchAsync() in derived class!");
-}
-
void BaseHoverHandler::decorateToolTip()
{
if (Qt::mightBeRichText(toolTip()))
diff --git a/src/plugins/texteditor/basehoverhandler.h b/src/plugins/texteditor/basehoverhandler.h
index cdd8735264..4c3638c4e4 100644
--- a/src/plugins/texteditor/basehoverhandler.h
+++ b/src/plugins/texteditor/basehoverhandler.h
@@ -43,14 +43,11 @@ class TEXTEDITOR_EXPORT BaseHoverHandler
public:
virtual ~BaseHoverHandler();
- bool isAsyncHandler() const;
- void setIsAsyncHandler(bool isAsyncHandler);
-
QString contextHelpId(TextEditorWidget *widget, int pos);
using ReportPriority = std::function<void(int priority)>;
void checkPriority(TextEditorWidget *widget, int pos, ReportPriority report);
- virtual void cancelAsyncCheck();
+ virtual void abort() {} // Implement for asynchronous priority reporter
void showToolTip(TextEditorWidget *widget, const QPoint &point, bool decorate = true);
@@ -70,16 +67,17 @@ protected:
void setLastHelpItemIdentified(const HelpItem &help);
const HelpItem &lastHelpItemIdentified() const;
- virtual void identifyMatch(TextEditorWidget *editorWidget, int pos);
- virtual void identifyMatchAsync(TextEditorWidget *editorWidget, int pos, ReportPriority report);
+ // identifyMatch() is required to report a priority by using the "report" callback.
+ // It is recommended to use e.g.
+ // Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+ // at the beginning of an implementation to ensure this in any case.
+ virtual void identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report);
virtual void decorateToolTip();
virtual void operateTooltip(TextEditorWidget *editorWidget, const QPoint &point);
private:
void process(TextEditorWidget *widget, int pos, ReportPriority report);
- bool m_isAsyncHandler = false;
-
QString m_toolTip;
HelpItem m_lastHelpItemIdentified;
int m_priority = -1;
diff --git a/src/plugins/texteditor/colorpreviewhoverhandler.cpp b/src/plugins/texteditor/colorpreviewhoverhandler.cpp
index c6ca5947d0..6a6f4e20dd 100644
--- a/src/plugins/texteditor/colorpreviewhoverhandler.cpp
+++ b/src/plugins/texteditor/colorpreviewhoverhandler.cpp
@@ -27,6 +27,7 @@
#include "texteditor.h"
#include <coreplugin/icore.h>
+#include <utils/executeondestruction.h>
#include <utils/tooltip/tooltip.h>
#include <utils/qtcassert.h>
@@ -355,8 +356,12 @@ static QColor colorFromFuncAndArgs(const QString &func, const QStringList &args)
return colorFromArgs(args, spec);
}
-void ColorPreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget, int pos)
+void ColorPreviewHoverHandler::identifyMatch(TextEditorWidget *editorWidget,
+ int pos,
+ ReportPriority report)
{
+ Utils::ExecuteOnDestruction reportPriority([this, report](){ report(priority()); });
+
if (editorWidget->extraSelectionTooltip(pos).isEmpty()) {
const QTextBlock tb = editorWidget->document()->findBlock(pos);
const int tbpos = pos - tb.position();
diff --git a/src/plugins/texteditor/colorpreviewhoverhandler.h b/src/plugins/texteditor/colorpreviewhoverhandler.h
index 8677bf009a..ee8db3f93f 100644
--- a/src/plugins/texteditor/colorpreviewhoverhandler.h
+++ b/src/plugins/texteditor/colorpreviewhoverhandler.h
@@ -39,7 +39,7 @@ class TextEditorWidget;
class TEXTEDITOR_EXPORT ColorPreviewHoverHandler : public BaseHoverHandler
{
private:
- void identifyMatch(TextEditorWidget *editorWidget, int pos) override;
+ void identifyMatch(TextEditorWidget *editorWidget, int pos, ReportPriority report) override;
void operateTooltip(TextEditorWidget *editorWidget, const QPoint &point) override;
QColor m_colorTip;
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index 505c4325ae..ee7e0a9861 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -314,10 +314,8 @@ public:
}
// Cancel currently running checks
- for (BaseHoverHandler *handler : m_handlers) {
- if (handler->isAsyncHandler())
- handler->cancelAsyncCheck();
- }
+ for (BaseHoverHandler *handler : m_handlers)
+ handler->abort();
// Update invocation data
m_documentRevision = documentRevision;