diff --git a/src/libs/utils/macroexpander.cpp b/src/libs/utils/macroexpander.cpp index 8a563ea4af2..226544b60e1 100644 --- a/src/libs/utils/macroexpander.cpp +++ b/src/libs/utils/macroexpander.cpp @@ -411,15 +411,9 @@ QString MacroExpander::variableDescription(const QByteArray &variable) const return d->m_descriptions.value(variable); } -MacroExpanders MacroExpander::subExpanders() const +MacroExpanderProviders MacroExpander::subProviders() const { - MacroExpanders expanders; - foreach (const MacroExpanderProvider &provider, d->m_subProviders) - if (provider) - if (MacroExpander *expander = provider()) - expanders.append(expander); - - return expanders; + return d->m_subProviders; } QString MacroExpander::displayName() const diff --git a/src/libs/utils/macroexpander.h b/src/libs/utils/macroexpander.h index 44f07f33d11..4fa2cf500ae 100644 --- a/src/libs/utils/macroexpander.h +++ b/src/libs/utils/macroexpander.h @@ -46,6 +46,7 @@ namespace Internal { class MacroExpanderPrivate; } class MacroExpander; typedef std::function MacroExpanderProvider; typedef QVector MacroExpanders; +typedef QVector MacroExpanderProviders; class QTCREATOR_UTILS_EXPORT MacroExpander { @@ -89,7 +90,7 @@ public: QList visibleVariables() const; QString variableDescription(const QByteArray &variable) const; - MacroExpanders subExpanders() const; + MacroExpanderProviders subProviders() const; QString displayName() const; void setDisplayName(const QString &displayName); diff --git a/src/plugins/coreplugin/variablechooser.cpp b/src/plugins/coreplugin/variablechooser.cpp index 1978de84fdd..f2f40024c94 100644 --- a/src/plugins/coreplugin/variablechooser.cpp +++ b/src/plugins/coreplugin/variablechooser.cpp @@ -127,23 +127,17 @@ class VariableGroupItem : public TreeItem { public: VariableGroupItem() - : m_chooser(0), m_expander(0) + : m_chooser(0) { setLazy(true); } - bool ensureExpander() const - { - if (!m_expander) - m_expander = m_provider(); - return m_expander != 0; - } - QVariant data(int column, int role) const { if (role == Qt::DisplayRole || role == Qt::EditRole) { - if (column == 0 && ensureExpander()) - return m_expander->displayName(); + if (column == 0) + if (MacroExpander *expander = m_provider()) + return expander->displayName(); } return QVariant(); @@ -151,8 +145,8 @@ public: void populate() { - if (ensureExpander()) - populateGroup(m_expander); + if (MacroExpander *expander = m_provider()) + populateGroup(expander); } void populateGroup(MacroExpander *expander); @@ -160,7 +154,6 @@ public: public: VariableChooserPrivate *m_chooser; // Not owned. MacroExpanderProvider m_provider; - mutable MacroExpander *m_expander; // Not owned. }; class VariableItem : public TreeItem @@ -260,6 +253,9 @@ VariableChooserPrivate::VariableChooserPrivate(VariableChooser *parent) void VariableGroupItem::populateGroup(MacroExpander *expander) { + if (!expander) + return; + foreach (const QByteArray &variable, expander->visibleVariables()) { auto item = new VariableItem; item->m_variable = QString::fromUtf8(variable); @@ -269,13 +265,15 @@ void VariableGroupItem::populateGroup(MacroExpander *expander) appendChild(item); } - foreach (MacroExpander *subExpander, expander->subExpanders()) { + foreach (const MacroExpanderProvider &subProvider, expander->subProviders()) { + if (!subProvider) + continue; if (expander->isAccumulating()) { - populateGroup(subExpander); + populateGroup(subProvider()); } else { auto item = new VariableGroupItem; item->m_chooser = m_chooser; - item->m_expander = subExpander; + item->m_provider = subProvider; appendChild(item); } }