summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppfindreferences.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-09-30 19:02:33 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-09-30 19:02:33 +0200
commit510bd6dc6920888d422a5520ef050e04e7ca12ef (patch)
tree5feea00b08cef619da6333671e9d17a8f70c3f41 /src/plugins/cpptools/cppfindreferences.cpp
parentae43149c97b8bdaabbf66a25ef0e678ed2f9c1d2 (diff)
downloadqt-creator-510bd6dc6920888d422a5520ef050e04e7ca12ef.tar.gz
Cache the lookup context.
Diffstat (limited to 'src/plugins/cpptools/cppfindreferences.cpp')
-rw-r--r--src/plugins/cpptools/cppfindreferences.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 90986543f1..743cfae0ec 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -166,12 +166,19 @@ protected:
return false;
}
- LookupContext currentContext(AST *ast) const
+ LookupContext _previousContext;
+
+ LookupContext currentContext(AST *ast)
{
unsigned line, column;
getTokenStartPosition(ast->firstToken(), &line, &column);
Symbol *lastVisibleSymbol = _doc->findSymbolAt(line, column);
+
+ if (lastVisibleSymbol && lastVisibleSymbol == _previousContext.symbol())
+ return _previousContext;
+
LookupContext ctx(lastVisibleSymbol, _exprDoc, _doc, _snapshot);
+ _previousContext = ctx;
return ctx;
}
@@ -456,6 +463,8 @@ static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future,
Control *control = doc->control();
if (Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size())) {
+ QTime tm;
+ tm.start();
TranslationUnit *unit = doc->translationUnit();
Control *control = doc->control();
@@ -464,10 +473,18 @@ static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future,
doc->parse();
control->setMacroResolver(0);
+ //qDebug() << "***" << unit->fileName() << "parsed in:" << tm.elapsed();
+
+ tm.start();
doc->check();
+ //qDebug() << "***" << unit->fileName() << "checked in:" << tm.elapsed();
+
+ tm.start();
Process process(doc, snapshot, &future);
process(symbol, id, unit->ast());
+
+ //qDebug() << "***" << unit->fileName() << "processed in:" << tm.elapsed();
}
}