diff options
| author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-09-30 19:02:33 +0200 |
|---|---|---|
| committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-09-30 19:02:33 +0200 |
| commit | 510bd6dc6920888d422a5520ef050e04e7ca12ef (patch) | |
| tree | 5feea00b08cef619da6333671e9d17a8f70c3f41 /src/plugins/cpptools/cppfindreferences.cpp | |
| parent | ae43149c97b8bdaabbf66a25ef0e678ed2f9c1d2 (diff) | |
| download | qt-creator-510bd6dc6920888d422a5520ef050e04e7ca12ef.tar.gz | |
Cache the lookup context.
Diffstat (limited to 'src/plugins/cpptools/cppfindreferences.cpp')
| -rw-r--r-- | src/plugins/cpptools/cppfindreferences.cpp | 19 |
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(); } } |
