diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-09-30 17:15:31 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-09-30 17:17:11 +0200 |
commit | 9a2114338432cfc883b29f514daa847205184833 (patch) | |
tree | 8fd96ff0d0944b55b805c13579d262d7af63e975 /src/plugins | |
parent | e50d60ac97bb0080ee055574eada5a51a5bb907c (diff) | |
download | qt-creator-9a2114338432cfc883b29f514daa847205184833.tar.gz |
Implemented a simple(fast?) strategy to resolve macro references.
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/cppeditor/cppeditor.cpp | 9 | ||||
-rw-r--r-- | src/plugins/cpptools/cppfindreferences.cpp | 12 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 9771328c5b..9a3022c577 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -57,6 +57,8 @@ #include <cplusplus/TypeOfExpression.h> #include <cplusplus/MatchingText.h> #include <cplusplus/BackwardsScanner.h> +#include <cplusplus/FastPreprocessor.h> + #include <cpptools/cppmodelmanagerinterface.h> #include <coreplugin/icore.h> @@ -2064,10 +2066,13 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source) if (!doc) { const QByteArray preprocessedCode = source.snapshot.preprocessedCode(source.code, source.fileName); + snapshot = source.snapshot; doc = source.snapshot.documentFromSource(preprocessedCode, source.fileName); - doc->check(); - snapshot = source.snapshot; + FastMacroResolver fastMacroResolver(snapshot); + doc->control()->setMacroResolver(&fastMacroResolver); + doc->check(); + doc->control()->setMacroResolver(0); } Control *control = doc->control(); diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index bbee65f767..ad9642f8bc 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -52,6 +52,7 @@ #include <cplusplus/ResolveExpression.h> #include <cplusplus/Overview.h> #include <cplusplus/TypeOfExpression.h> +#include <cplusplus/FastPreprocessor.h> #include <QtCore/QTime> #include <QtCore/QtConcurrentRun> @@ -425,6 +426,8 @@ static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future, future.setProgressRange(0, files.size()); + FastMacroResolver fastMacroResolver(snapshot); + for (int i = 0; i < files.size(); ++i) { const QString &fileName = files.at(i); future.setProgressValueAndText(i, QFileInfo(fileName).fileName()); @@ -456,8 +459,15 @@ static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future, Control *control = doc->control(); if (Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size())) { - doc->check(); TranslationUnit *unit = doc->translationUnit(); + Control *control = doc->control(); + + control->setMacroResolver(&fastMacroResolver); + doc->parse(); + control->setMacroResolver(0); + + doc->check(); + Process process(doc, snapshot, &future); process(symbol, id, unit->ast()); } |