Ensure we keep the context around for as long as it is needed.

This commit is contained in:
Roberto Raggi
2010-05-31 12:09:28 +02:00
parent e26cf0ab4d
commit 1c078ec2a3
9 changed files with 120 additions and 95 deletions

View File

@@ -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"),

View File

@@ -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 &macro);
@@ -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;

View File

@@ -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 &macro)

View File

@@ -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 &macro);

View File

@@ -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 &macro) = 0;