diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp index 58c43ed721a4b263cbd6857a1fcbd72462954582..a7554a14c118993642f8bc71685419f5245fecb4 100644 --- a/src/libs/cplusplus/FindUsages.cpp +++ b/src/libs/cplusplus/FindUsages.cpp @@ -465,24 +465,14 @@ bool FindUsages::visit(SimpleDeclarationAST *ast) bool FindUsages::visit(ObjCSelectorAST *ast) { -#if 1 - const Identifier *id = ast->name->identifier(); - if (id == _id) { - LookupContext context = currentContext(ast); - const QList<Symbol *> candidates = context.resolve(ast->name); - reportResult(ast->firstToken(), candidates); - } -#else - for (ObjCSelectorArgumentListAST *iter = ast->selector_argument_list; iter; - iter = iter->next) { - const Identifier *id = identifier(iter->value->name_token); + if (ast->name) { + const Identifier *id = ast->name->identifier(); if (id == _id) { - LookupContext context = currentContext(iter->value); + LookupContext context = currentContext(ast); const QList<Symbol *> candidates = context.resolve(ast->name); - reportResult(iter->value->name_token, candidates); + reportResult(ast->firstToken(), candidates); } } -#endif return false; } diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 899a8c1a75ba8dca3e8c36a1e197c9ae1b410b6c..83396edc0619797dad1d04f4457498e82889c418 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -903,7 +903,7 @@ const Macro *CPPEditor::findCanonicalMacro(const QTextCursor &cursor, void CPPEditor::findUsages() { if (Symbol *canonicalSymbol = markSymbols()) { - m_modelManager->findUsages(canonicalSymbol); + m_modelManager->findUsages(m_lastSemanticInfo.doc, canonicalSymbol); } else if (const Macro *macro = findCanonicalMacro(textCursor(), m_lastSemanticInfo.doc)) { m_modelManager->findMacroUsages(*macro); } @@ -954,7 +954,7 @@ void CPPEditor::renameUsagesNow() this, SLOT(hideRenameNotification())); } - m_modelManager->renameUsages(canonicalSymbol); + m_modelManager->renameUsages(m_lastSemanticInfo.doc, canonicalSymbol); } } } diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 4f25edf2f7b79a305454ee86c89f6e508f1f67ff..e714fa28ab09ad19920bec86ecec15978aa341f1 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -85,13 +85,15 @@ class ProcessFile: public std::unary_function<QString, QList<Usage> > { const CppTools::CppModelManagerInterface::WorkingCopy workingCopy; const Snapshot snapshot; + Document::Ptr symbolDocument; Symbol *symbol; public: ProcessFile(const CppTools::CppModelManagerInterface::WorkingCopy &workingCopy, const Snapshot snapshot, + Document::Ptr symbolDocument, Symbol *symbol) - : workingCopy(workingCopy), snapshot(snapshot), symbol(symbol) + : workingCopy(workingCopy), snapshot(snapshot), symbolDocument(symbolDocument), symbol(symbol) { } QList<Usage> operator()(const QString &fileName) @@ -175,6 +177,7 @@ QList<int> CppFindReferences::references(Symbol *symbol, static void find_helper(QFutureInterface<Usage> &future, const CppTools::CppModelManagerInterface::WorkingCopy workingCopy, Snapshot snapshot, + Document::Ptr symbolDocument, Symbol *symbol) { QTime tm; @@ -204,7 +207,7 @@ static void find_helper(QFutureInterface<Usage> &future, future.setProgressRange(0, files.size()); - ProcessFile process(workingCopy, snapshot, symbol); + ProcessFile process(workingCopy, snapshot, symbolDocument, symbol); UpdateUI reduce(&future); QtConcurrent::blockingMappedReduced<QList<Usage> > (files, process, reduce); @@ -212,17 +215,17 @@ static void find_helper(QFutureInterface<Usage> &future, future.setProgressValue(files.size()); } -void CppFindReferences::findUsages(Symbol *symbol) +void CppFindReferences::findUsages(Document::Ptr symbolDocument, Symbol *symbol) { Find::SearchResult *search = _resultWindow->startNewSearch(Find::SearchResultWindow::SearchOnly); connect(search, SIGNAL(activated(Find::SearchResultItem)), this, SLOT(openEditor(Find::SearchResultItem))); - findAll_helper(symbol); + findAll_helper(symbolDocument, symbol); } -void CppFindReferences::renameUsages(Symbol *symbol) +void CppFindReferences::renameUsages(Document::Ptr symbolDocument, Symbol *symbol) { if (const Identifier *id = symbol->identifier()) { const QString textToReplace = QString::fromUtf8(id->chars(), id->size()); @@ -236,11 +239,11 @@ void CppFindReferences::renameUsages(Symbol *symbol) connect(search, SIGNAL(replaceButtonClicked(QString,QList<Find::SearchResultItem>)), SLOT(onReplaceButtonClicked(QString,QList<Find::SearchResultItem>))); - findAll_helper(symbol); + findAll_helper(symbolDocument, symbol); } } -void CppFindReferences::findAll_helper(Symbol *symbol) +void CppFindReferences::findAll_helper(Document::Ptr symbolDocument, Symbol *symbol) { if (! (symbol && symbol->identifier())) return; @@ -254,7 +257,7 @@ void CppFindReferences::findAll_helper(Symbol *symbol) QFuture<Usage> result; - result = QtConcurrent::run(&find_helper, workingCopy, snapshot, symbol); + result = QtConcurrent::run(&find_helper, workingCopy, snapshot, symbolDocument, symbol); m_watcher.setFuture(result); Core::FutureProgress *progress = progressManager->addTask(result, tr("Searching..."), diff --git a/src/plugins/cpptools/cppfindreferences.h b/src/plugins/cpptools/cppfindreferences.h index 06ad73fc537fa6f2e51d4287f047d5de64ac00fa..74ede972e24cd9263d543728c79d41c16b60dfc7 100644 --- a/src/plugins/cpptools/cppfindreferences.h +++ b/src/plugins/cpptools/cppfindreferences.h @@ -64,8 +64,8 @@ Q_SIGNALS: void changed(); public: - void findUsages(CPlusPlus::Symbol *symbol); - void renameUsages(CPlusPlus::Symbol *symbol); + void findUsages(CPlusPlus::Document::Ptr symbolDocument,CPlusPlus::Symbol *symbol); + void renameUsages(CPlusPlus::Document::Ptr symbolDocument,CPlusPlus::Symbol *symbol); void findMacroUses(const CPlusPlus::Macro ¯o); @@ -76,7 +76,7 @@ private Q_SLOTS: void onReplaceButtonClicked(const QString &text, const QList<Find::SearchResultItem> &items); private: - void findAll_helper(CPlusPlus::Symbol *symbol); + void findAll_helper(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol); private: QPointer<CppModelManagerInterface> _modelManager; diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 0fb58e93dcafdd7a74367a468ae918cfea7af71d..069b8e6c9dd82379e3fff4edf5bd3d7b9baacbee 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -733,16 +733,16 @@ QList<int> CppModelManager::references(CPlusPlus::Symbol *symbol, return m_findReferences->references(LookupContext::canonicalSymbol(symbol, glo.data()), doc, snapshot); } -void CppModelManager::findUsages(CPlusPlus::Symbol *symbol) +void CppModelManager::findUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol) { if (symbol->identifier()) - m_findReferences->findUsages(symbol); + m_findReferences->findUsages(symbolDocument, symbol); } -void CppModelManager::renameUsages(CPlusPlus::Symbol *symbol) +void CppModelManager::renameUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol) { if (symbol->identifier()) - m_findReferences->renameUsages(symbol); + m_findReferences->renameUsages(symbolDocument, symbol); } void CppModelManager::findMacroUsages(const CPlusPlus::Macro ¯o) diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 96e7ba4f016ab1be9b1fd541379a00a0dd43670e..c6369f10f278745daa4821c3aeb59277d526e8fe 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -120,8 +120,8 @@ public: CPlusPlus::Document::Ptr doc, const CPlusPlus::Snapshot &snapshot); - virtual void findUsages(CPlusPlus::Symbol *symbol); - virtual void renameUsages(CPlusPlus::Symbol *symbol); + virtual void findUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol); + virtual void renameUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol); virtual void findMacroUsages(const CPlusPlus::Macro ¯o); diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h index 454382512239eb886aedc9a0cab7f38e364c8515..a08d874252ae6728044db82bdd9e309ae2548330 100644 --- a/src/plugins/cpptools/cppmodelmanagerinterface.h +++ b/src/plugins/cpptools/cppmodelmanagerinterface.h @@ -121,8 +121,8 @@ public: CPlusPlus::Document::Ptr doc, const CPlusPlus::Snapshot &snapshot) = 0; - virtual void renameUsages(CPlusPlus::Symbol *symbol) = 0; - virtual void findUsages(CPlusPlus::Symbol *symbol) = 0; + virtual void renameUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol) = 0; + virtual void findUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol) = 0; virtual void findMacroUsages(const CPlusPlus::Macro ¯o) = 0;