forked from qt-creator/qt-creator
Ensure we keep the context around for as long as it is needed.
This commit is contained in:
@@ -167,13 +167,11 @@ CppFindReferences::~CppFindReferences()
|
||||
{
|
||||
}
|
||||
|
||||
QList<int> CppFindReferences::references(Symbol *symbol,
|
||||
Document::Ptr doc,
|
||||
const Snapshot& snapshot) const
|
||||
QList<int> CppFindReferences::references(Symbol *symbol, const LookupContext &context) const
|
||||
{
|
||||
QList<int> references;
|
||||
|
||||
FindUsages findUsages(doc, snapshot);
|
||||
FindUsages findUsages(context);
|
||||
findUsages(symbol);
|
||||
references = findUsages.references();
|
||||
|
||||
@@ -182,9 +180,8 @@ QList<int> CppFindReferences::references(Symbol *symbol,
|
||||
|
||||
static void find_helper(QFutureInterface<Usage> &future,
|
||||
const CppTools::CppModelManagerInterface::WorkingCopy workingCopy,
|
||||
Snapshot snapshot,
|
||||
Document::Ptr symbolDocument,
|
||||
DependencyTable dependencyTable,
|
||||
const LookupContext context,
|
||||
const DependencyTable dependencyTable,
|
||||
Symbol *symbol)
|
||||
{
|
||||
QTime tm;
|
||||
@@ -197,7 +194,7 @@ static void find_helper(QFutureInterface<Usage> &future,
|
||||
QStringList files(sourceFile);
|
||||
|
||||
if (symbol->isClass() || symbol->isForwardClassDeclaration()) {
|
||||
foreach (const Document::Ptr &doc, snapshot) {
|
||||
foreach (const Document::Ptr &doc, context.snapshot()) {
|
||||
if (doc->fileName() == sourceFile)
|
||||
continue;
|
||||
|
||||
@@ -214,7 +211,7 @@ static void find_helper(QFutureInterface<Usage> &future,
|
||||
|
||||
future.setProgressRange(0, files.size());
|
||||
|
||||
ProcessFile process(workingCopy, snapshot, symbolDocument, symbol);
|
||||
ProcessFile process(workingCopy, context.snapshot(), context.thisDocument(), symbol);
|
||||
UpdateUI reduce(&future);
|
||||
|
||||
QtConcurrent::blockingMappedReduced<QList<Usage> > (files, process, reduce);
|
||||
@@ -238,17 +235,17 @@ void CppFindReferences::updateDependencyTable()
|
||||
m_depsFuture = QtConcurrent::run(&dependencyTable, m_deps, _modelManager->snapshot());
|
||||
}
|
||||
|
||||
void CppFindReferences::findUsages(Document::Ptr symbolDocument, Symbol *symbol)
|
||||
void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context)
|
||||
{
|
||||
Find::SearchResult *search = _resultWindow->startNewSearch(Find::SearchResultWindow::SearchOnly);
|
||||
|
||||
connect(search, SIGNAL(activated(Find::SearchResultItem)),
|
||||
this, SLOT(openEditor(Find::SearchResultItem)));
|
||||
|
||||
findAll_helper(symbolDocument, symbol);
|
||||
findAll_helper(symbol, context);
|
||||
}
|
||||
|
||||
void CppFindReferences::renameUsages(Document::Ptr symbolDocument, Symbol *symbol)
|
||||
void CppFindReferences::renameUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context)
|
||||
{
|
||||
if (const Identifier *id = symbol->identifier()) {
|
||||
const QString textToReplace = QString::fromUtf8(id->chars(), id->size());
|
||||
@@ -262,11 +259,11 @@ void CppFindReferences::renameUsages(Document::Ptr symbolDocument, Symbol *symbo
|
||||
connect(search, SIGNAL(replaceButtonClicked(QString,QList<Find::SearchResultItem>)),
|
||||
SLOT(onReplaceButtonClicked(QString,QList<Find::SearchResultItem>)));
|
||||
|
||||
findAll_helper(symbolDocument, symbol);
|
||||
findAll_helper(symbol, context);
|
||||
}
|
||||
}
|
||||
|
||||
void CppFindReferences::findAll_helper(Document::Ptr symbolDocument, Symbol *symbol)
|
||||
void CppFindReferences::findAll_helper(Symbol *symbol, const LookupContext &context)
|
||||
{
|
||||
if (! (symbol && symbol->identifier()))
|
||||
return;
|
||||
@@ -283,7 +280,7 @@ void CppFindReferences::findAll_helper(Document::Ptr symbolDocument, Symbol *sym
|
||||
|
||||
QFuture<Usage> result;
|
||||
|
||||
result = QtConcurrent::run(&find_helper, workingCopy, snapshot, symbolDocument, m_deps, symbol);
|
||||
result = QtConcurrent::run(&find_helper, workingCopy, context, m_deps, symbol);
|
||||
m_watcher.setFuture(result);
|
||||
|
||||
Core::FutureProgress *progress = progressManager->addTask(result, tr("Searching"),
|
||||
|
||||
@@ -59,16 +59,14 @@ public:
|
||||
CppFindReferences(CppModelManagerInterface *modelManager);
|
||||
virtual ~CppFindReferences();
|
||||
|
||||
QList<int> references(CPlusPlus::Symbol *symbol,
|
||||
CPlusPlus::Document::Ptr doc,
|
||||
const CPlusPlus::Snapshot& snapshot) const;
|
||||
QList<int> references(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context) const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void changed();
|
||||
|
||||
public:
|
||||
void findUsages(CPlusPlus::Document::Ptr symbolDocument,CPlusPlus::Symbol *symbol);
|
||||
void renameUsages(CPlusPlus::Document::Ptr symbolDocument,CPlusPlus::Symbol *symbol);
|
||||
void findUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context);
|
||||
void renameUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context);
|
||||
|
||||
void findMacroUses(const CPlusPlus::Macro ¯o);
|
||||
|
||||
@@ -80,7 +78,7 @@ private Q_SLOTS:
|
||||
void updateDependencyTable();
|
||||
|
||||
private:
|
||||
void findAll_helper(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol);
|
||||
void findAll_helper(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context);
|
||||
|
||||
private:
|
||||
QPointer<CppModelManagerInterface> _modelManager;
|
||||
|
||||
@@ -785,23 +785,21 @@ void CppModelManager::removeEditorSupport(AbstractEditorSupport *editorSupport)
|
||||
m_addtionalEditorSupport.remove(editorSupport);
|
||||
}
|
||||
|
||||
QList<int> CppModelManager::references(CPlusPlus::Symbol *symbol,
|
||||
CPlusPlus::Document::Ptr doc,
|
||||
const CPlusPlus::Snapshot &snapshot)
|
||||
QList<int> CppModelManager::references(CPlusPlus::Symbol *symbol, const LookupContext &context)
|
||||
{
|
||||
return m_findReferences->references(symbol, doc, snapshot);
|
||||
return m_findReferences->references(symbol, context);
|
||||
}
|
||||
|
||||
void CppModelManager::findUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol)
|
||||
void CppModelManager::findUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context)
|
||||
{
|
||||
if (symbol->identifier())
|
||||
m_findReferences->findUsages(symbolDocument, symbol);
|
||||
m_findReferences->findUsages(symbol, context);
|
||||
}
|
||||
|
||||
void CppModelManager::renameUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol)
|
||||
void CppModelManager::renameUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context)
|
||||
{
|
||||
if (symbol->identifier())
|
||||
m_findReferences->renameUsages(symbolDocument, symbol);
|
||||
m_findReferences->renameUsages(symbol, context);
|
||||
}
|
||||
|
||||
void CppModelManager::findMacroUsages(const CPlusPlus::Macro ¯o)
|
||||
|
||||
@@ -116,12 +116,10 @@ public:
|
||||
virtual void addEditorSupport(AbstractEditorSupport *editorSupport);
|
||||
virtual void removeEditorSupport(AbstractEditorSupport *editorSupport);
|
||||
|
||||
virtual QList<int> references(CPlusPlus::Symbol *symbol,
|
||||
CPlusPlus::Document::Ptr doc,
|
||||
const CPlusPlus::Snapshot &snapshot);
|
||||
virtual QList<int> references(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context);
|
||||
|
||||
virtual void findUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol);
|
||||
virtual void renameUsages(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol);
|
||||
virtual void renameUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context);
|
||||
virtual void findUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context);
|
||||
|
||||
virtual void findMacroUsages(const CPlusPlus::Macro ¯o);
|
||||
|
||||
|
||||
@@ -38,6 +38,10 @@
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QFuture>
|
||||
|
||||
namespace CPlusPlus {
|
||||
class LookupContext;
|
||||
}
|
||||
|
||||
namespace ProjectExplorer {
|
||||
class Project;
|
||||
}
|
||||
@@ -119,11 +123,10 @@ public:
|
||||
virtual void removeEditorSupport(AbstractEditorSupport *editorSupport) = 0;
|
||||
|
||||
virtual QList<int> references(CPlusPlus::Symbol *symbol,
|
||||
CPlusPlus::Document::Ptr doc,
|
||||
const CPlusPlus::Snapshot &snapshot) = 0;
|
||||
const CPlusPlus::LookupContext &context) = 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 renameUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context) = 0;
|
||||
virtual void findUsages(CPlusPlus::Symbol *symbol, const CPlusPlus::LookupContext &context) = 0;
|
||||
|
||||
virtual void findMacroUsages(const CPlusPlus::Macro ¯o) = 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user