From 44a3a5e07024f365539b9ad977b195a458d5e61a Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Sat, 17 Mar 2012 13:26:27 +0100 Subject: Implemented Rename Macro Usages Works the same way as Rename Usages for C++ Symbols. For now, no Search Again as this requieres further work. Task-number: QTCREATORBUG-413 Change-Id: I09e85ea1e8c247f5ce0b6bc566aba8018c1569e4 Reviewed-by: Leandro Melo --- src/plugins/cppeditor/cppeditor.cpp | 12 ++++++++---- src/plugins/cpptools/ModelManagerInterface.h | 1 + src/plugins/cpptools/cppfindreferences.cpp | 19 ++++++++++++++++++- src/plugins/cpptools/cppfindreferences.h | 3 +++ src/plugins/cpptools/cppmodelmanager.cpp | 5 +++++ src/plugins/cpptools/cppmodelmanager.h | 1 + 6 files changed, 36 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 668886aafc..11d8360067 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 8bab7086e8..754579f93c 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 98a907b3f3..7b8a76a10d 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 dfa7c114d0..4b4202297d 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 79f91cbea8..dbc5db3a4f 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 b0d08ff730..c165667a2f 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); -- cgit v1.2.1