Commit 0f2a0d93 authored by Erik Verbruggen's avatar Erik Verbruggen Committed by Nikolai Kosjar

C++: cache results of linksForIdentifier in HelpItem.

The method linksForIdentifier was called at least thrice when generating
a single valid tooltip in the C++ editor. Now the cached, and the cache
can be "initialised" during construction. This reduces the time spent
for creating a tooltip by 30%.

Task-number: QTCREATORBUG-8970
Change-Id: I5130b769e977c6ffced1a87715831386ef0d5319
Reviewed-by: default avatarNikolai Kosjar <nikolai.kosjar@digia.com>
parent f6833168
...@@ -77,11 +77,19 @@ void CppHoverHandler::identifyMatch(TextEditor::ITextEditor *editor, int pos) ...@@ -77,11 +77,19 @@ void CppHoverHandler::identifyMatch(TextEditor::ITextEditor *editor, int pos)
const QSharedPointer<CppElement> &cppElement = evaluator.cppElement(); const QSharedPointer<CppElement> &cppElement = evaluator.cppElement();
if (!isDiagnosticTooltip()) if (!isDiagnosticTooltip())
setToolTip(cppElement->tooltip); setToolTip(cppElement->tooltip);
foreach (const QString &helpId, cppElement->helpIdCandidates) { QStringList candidates = cppElement->helpIdCandidates;
if (!Core::HelpManager::instance()->linksForIdentifier(helpId).isEmpty()) { candidates.removeDuplicates();
HelpManager *hm = HelpManager::instance();
foreach (const QString &helpId, candidates) {
if (helpId.isEmpty())
continue;
const QMap<QString, QUrl> helpLinks = hm->linksForIdentifier(helpId);
if (!helpLinks.isEmpty()) {
setLastHelpItemIdentified(TextEditor::HelpItem(helpId, setLastHelpItemIdentified(TextEditor::HelpItem(helpId,
cppElement->helpMark, cppElement->helpMark,
cppElement->helpCategory)); cppElement->helpCategory,
helpLinks));
break; break;
} }
} }
......
...@@ -32,9 +32,6 @@ ...@@ -32,9 +32,6 @@
#include <coreplugin/helpmanager.h> #include <coreplugin/helpmanager.h>
#include <utils/htmldocextractor.h> #include <utils/htmldocextractor.h>
#include <QUrl>
#include <QMap>
using namespace TextEditor; using namespace TextEditor;
HelpItem::HelpItem() HelpItem::HelpItem()
...@@ -48,6 +45,11 @@ HelpItem::HelpItem(const QString &helpId, const QString &docMark, Category categ ...@@ -48,6 +45,11 @@ HelpItem::HelpItem(const QString &helpId, const QString &docMark, Category categ
m_helpId(helpId), m_docMark(docMark), m_category(category) m_helpId(helpId), m_docMark(docMark), m_category(category)
{} {}
HelpItem::HelpItem(const QString &helpId, const QString &docMark, Category category,
const QMap<QString, QUrl> &helpLinks) :
m_helpId(helpId), m_docMark(docMark), m_category(category), m_helpLinks(helpLinks)
{}
HelpItem::~HelpItem() HelpItem::~HelpItem()
{} {}
...@@ -71,7 +73,9 @@ HelpItem::Category HelpItem::category() const ...@@ -71,7 +73,9 @@ HelpItem::Category HelpItem::category() const
bool HelpItem::isValid() const bool HelpItem::isValid() const
{ {
if (!Core::HelpManager::instance()->linksForIdentifier(m_helpId).isEmpty()) if (m_helpId.isEmpty())
return false;
if (!retrieveHelpLinks().isEmpty())
return true; return true;
if (QUrl(m_helpId).isValid()) if (QUrl(m_helpId).isValid())
return true; return true;
...@@ -87,7 +91,7 @@ QString HelpItem::extractContent(bool extended) const ...@@ -87,7 +91,7 @@ QString HelpItem::extractContent(bool extended) const
htmlExtractor.setMode(Utils::HtmlDocExtractor::FirstParagraph); htmlExtractor.setMode(Utils::HtmlDocExtractor::FirstParagraph);
QString contents; QString contents;
QMap<QString, QUrl> helpLinks = Core::HelpManager::instance()->linksForIdentifier(m_helpId); QMap<QString, QUrl> helpLinks = retrieveHelpLinks();
if (helpLinks.isEmpty()) { if (helpLinks.isEmpty()) {
// Maybe this is already an URL... // Maybe this is already an URL...
QUrl url(m_helpId); QUrl url(m_helpId);
...@@ -134,3 +138,10 @@ QString HelpItem::extractContent(bool extended) const ...@@ -134,3 +138,10 @@ QString HelpItem::extractContent(bool extended) const
} }
return contents; return contents;
} }
QMap<QString, QUrl> HelpItem::retrieveHelpLinks() const
{
if (m_helpLinks.isEmpty())
m_helpLinks = Core::HelpManager::instance()->linksForIdentifier(m_helpId);
return m_helpLinks;
}
...@@ -32,7 +32,9 @@ ...@@ -32,7 +32,9 @@
#include "texteditor_global.h" #include "texteditor_global.h"
#include <QMap>
#include <QString> #include <QString>
#include <QUrl>
namespace TextEditor { namespace TextEditor {
...@@ -55,6 +57,8 @@ public: ...@@ -55,6 +57,8 @@ public:
HelpItem(); HelpItem();
HelpItem(const QString &helpId, Category category); HelpItem(const QString &helpId, Category category);
HelpItem(const QString &helpId, const QString &docMark, Category category); HelpItem(const QString &helpId, const QString &docMark, Category category);
HelpItem(const QString &helpId, const QString &docMark, Category category,
const QMap<QString, QUrl> &helpLinks);
~HelpItem(); ~HelpItem();
void setHelpId(const QString &id); void setHelpId(const QString &id);
...@@ -70,10 +74,14 @@ public: ...@@ -70,10 +74,14 @@ public:
QString extractContent(bool extended) const; QString extractContent(bool extended) const;
private:
QMap<QString, QUrl> retrieveHelpLinks() const;
private: private:
QString m_helpId; QString m_helpId;
QString m_docMark; QString m_docMark;
Category m_category; Category m_category;
mutable QMap<QString, QUrl> m_helpLinks; // cached help links
}; };
} // namespace TextEditor } // namespace TextEditor
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment