diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 668886aafc1..11d8360067a 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -742,10 +742,14 @@ void CPPEditorWidget::renameUsagesNow(const QString &replacement) info.snapshot = CppModelManagerInterface::instance()->snapshot(); info.snapshot.insert(info.doc); - CanonicalSymbol cs(this, info); - if (Symbol *canonicalSymbol = cs(textCursor())) - if (canonicalSymbol->identifier() != 0) - m_modelManager->renameUsages(canonicalSymbol, cs.context(), replacement); + if (const Macro *macro = findCanonicalMacro(textCursor(), info.doc)) { + m_modelManager->renameMacroUsages(*macro, replacement); + } else { + CanonicalSymbol cs(this, info); + if (Symbol *canonicalSymbol = cs(textCursor())) + if (canonicalSymbol->identifier() != 0) + m_modelManager->renameUsages(canonicalSymbol, cs.context(), replacement); + } } void CPPEditorWidget::renameUsages() diff --git a/src/plugins/cpptools/ModelManagerInterface.h b/src/plugins/cpptools/ModelManagerInterface.h index 8bab7086e83..754579f93c4 100644 --- a/src/plugins/cpptools/ModelManagerInterface.h +++ b/src/plugins/cpptools/ModelManagerInterface.h @@ -209,6 +209,7 @@ public: const QString &replacement = QString()) = 0; virtual void findUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context) = 0; + virtual void renameMacroUsages(const CPlusPlus::Macro ¯o, const QString &replacement = QString()) = 0; virtual void findMacroUsages(const CPlusPlus::Macro ¯o) = 0; virtual void setExtraDiagnostics(const QString &fileName, int key, diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 98a907b3f3e..7b8a76a10d8 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -645,12 +645,23 @@ static void findMacroUses_helper(QFutureInterface &future, } void CppFindReferences::findMacroUses(const Macro ¯o) +{ + findMacroUses(macro, QString(), false); +} + +void CppFindReferences::findMacroUses(const Macro ¯o, const QString &replacement, bool replace) { Find::SearchResult *search = Find::SearchResultWindow::instance()->startNewSearch( tr("C++ Macro Usages:"), QString(), macro.name(), - Find::SearchResultWindow::SearchOnly); + replace ? Find::SearchResultWindow::SearchAndReplace + : Find::SearchResultWindow::SearchOnly, + QLatin1String("CppEditor")); + + search->setTextToReplace(replacement); + connect(search, SIGNAL(replaceButtonClicked(QString,QList)), + SLOT(onReplaceButtonClicked(QString,QList))); Find::SearchResultWindow::instance()->popup(true); @@ -685,6 +696,12 @@ void CppFindReferences::findMacroUses(const Macro ¯o) connect(progress, SIGNAL(clicked()), search, SLOT(popup())); } +void CppFindReferences::renameMacroUses(const Macro ¯o, const QString &replacement) +{ + const QString textToReplace = replacement.isEmpty() ? macro.name() : replacement; + findMacroUses(macro, textToReplace, true); +} + DependencyTable CppFindReferences::updateDependencyTable(CPlusPlus::Snapshot snapshot) { DependencyTable oldDeps = dependencyTable(); diff --git a/src/plugins/cpptools/cppfindreferences.h b/src/plugins/cpptools/cppfindreferences.h index dfa7c114d0d..4b4202297da 100644 --- a/src/plugins/cpptools/cppfindreferences.h +++ b/src/plugins/cpptools/cppfindreferences.h @@ -82,6 +82,7 @@ public: const QString &replacement = QString()); void findMacroUses(const CPlusPlus::Macro ¯o); + void renameMacroUses(const CPlusPlus::Macro ¯o, const QString &replacement = QString()); CPlusPlus::DependencyTable updateDependencyTable(CPlusPlus::Snapshot snapshot); @@ -97,6 +98,8 @@ private Q_SLOTS: private: void findUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context, const QString &replacement, bool replace); + void findMacroUses(const CPlusPlus::Macro ¯o, const QString &replacement, + bool replace); void findAll_helper(Find::SearchResult *search); CPlusPlus::DependencyTable dependencyTable() const; void setDependencyTable(const CPlusPlus::DependencyTable &newTable); diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 79f91cbea8b..dbc5db3a4fa 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -870,6 +870,11 @@ void CppModelManager::findMacroUsages(const CPlusPlus::Macro ¯o) m_findReferences->findMacroUses(macro); } +void CppModelManager::renameMacroUsages(const CPlusPlus::Macro ¯o, const QString &replacement) +{ + m_findReferences->renameMacroUses(macro, replacement); +} + CppModelManager::WorkingCopy CppModelManager::buildWorkingCopyList() { WorkingCopy workingCopy; diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index b0d08ff730e..c165667a2ff 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -129,6 +129,7 @@ public: virtual void findUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context); virtual void findMacroUsages(const CPlusPlus::Macro ¯o); + virtual void renameMacroUsages(const CPlusPlus::Macro ¯o, const QString &replacement); virtual void setExtraDiagnostics(const QString &fileName, int key, const QList &diagnostics);