diff --git a/src/libs/cplusplus/BackwardsScanner.cpp b/src/libs/cplusplus/BackwardsScanner.cpp index bf3d59c4ac9680df87fc7c14b0043db06a4eb1f0..3a0fbb936f9e4fed8f92015fbeaf5eea2b9dd40f 100644 --- a/src/libs/cplusplus/BackwardsScanner.cpp +++ b/src/libs/cplusplus/BackwardsScanner.cpp @@ -27,48 +27,33 @@ ** **************************************************************************/ #include "BackwardsScanner.h" -#include "TokenCache.h" #include <Token.h> #include <QtGui/QTextCursor> -#include <QTextDocument> using namespace CPlusPlus; -BackwardsScanner::BackwardsScanner(TokenCache *tokenCache, const QTextCursor &cursor, int maxBlockCount, const QString &suffix) - : _tokenCache(tokenCache) - , _offset(0) +BackwardsScanner::BackwardsScanner(const QTextCursor &cursor, const QString &suffix, int maxBlockCount) + : _offset(0) , _blocksTokenized(0) , _block(cursor.block()) , _maxBlockCount(maxBlockCount) { - int pos = cursor.position() - cursor.block().position(); - _text = _block.text().left(pos); - - if (suffix.isEmpty()) { - _tokens.append(tokenCache->tokensForBlock(_block)); - int last = -1; - for (int i = _tokens.size() - 1; i >= 0; --i) { - if (_tokens.at(i).begin() < pos) { - last = i; - break; - } - } - for (int i = _tokens.size() - 1; i > last && i >= 0; --i) - _tokens.removeAt(i); - } else { - SimpleLexer tokenize; - tokenize.setQtMocRunEnabled(true); - tokenize.setSkipComments(true); - tokenize.setObjCEnabled(true); + _tokenize.setQtMocRunEnabled(true); + _tokenize.setSkipComments(true); + _tokenize.setObjCEnabled(true); + _text = _block.text().left(cursor.position() - cursor.block().position()); + if (! suffix.isEmpty()) _text += suffix; - _tokens.append(tokenize(_text, TokenCache::previousBlockState(_block))); - } + _tokens.append(_tokenize(_text, previousBlockState(_block))); _startToken = _tokens.size(); } +int BackwardsScanner::state() const +{ return _tokenize.state(); } + SimpleToken BackwardsScanner::LA(int index) const { return const_cast<BackwardsScanner *>(this)->fetchToken(_startToken - index); } @@ -98,7 +83,7 @@ const SimpleToken &BackwardsScanner::fetchToken(int tokenIndex) adaptedTokens.append(t); } - _tokens = _tokenCache->tokensForBlock(_block); + _tokens = _tokenize(blockText, previousBlockState(_block)); _offset += _tokens.size(); _tokens += adaptedTokens; } @@ -134,6 +119,20 @@ QStringRef BackwardsScanner::textRef(int index) const return _text.midRef(firstToken.begin(), firstToken.length()); } +int BackwardsScanner::previousBlockState(const QTextBlock &block) +{ + const QTextBlock prevBlock = block.previous(); + + if (prevBlock.isValid()) { + int state = prevBlock.userState(); + + if (state != -1) + return state; + } + + return 0; +} + int BackwardsScanner::size() const { return _tokens.size(); diff --git a/src/libs/cplusplus/BackwardsScanner.h b/src/libs/cplusplus/BackwardsScanner.h index 25b7bd3289e076eabacc3b0a6ef5bb00663486ca..cca06db75c15874915070d4d3a6c2c3cad0cde2c 100644 --- a/src/libs/cplusplus/BackwardsScanner.h +++ b/src/libs/cplusplus/BackwardsScanner.h @@ -36,18 +36,16 @@ namespace CPlusPlus { -class TokenCache; - class CPLUSPLUS_EXPORT BackwardsScanner { enum { MAX_BLOCK_COUNT = 10 }; public: - BackwardsScanner(TokenCache *cache, - const QTextCursor &cursor, - int maxBlockCount = MAX_BLOCK_COUNT, - const QString &suffix = QString()); + BackwardsScanner(const QTextCursor &cursor, + const QString &suffix = QString(), + int maxBlockCount = MAX_BLOCK_COUNT); + int state() const; int startToken() const; int startPosition() const; @@ -69,18 +67,20 @@ public: int startOfMatchingBrace(int index) const; int startOfBlock(int index) const; + static int previousBlockState(const QTextBlock &block); + int size() const; private: const SimpleToken &fetchToken(int tokenIndex); private: - TokenCache *_tokenCache; QList<SimpleToken> _tokens; int _offset; int _blocksTokenized; QTextBlock _block; QString _text; + SimpleLexer _tokenize; int _maxBlockCount; int _startToken; }; diff --git a/src/libs/cplusplus/ExpressionUnderCursor.cpp b/src/libs/cplusplus/ExpressionUnderCursor.cpp index c1b439ed099dd7bfcf3e484dc26f4ae8e788c1a9..c840ad398dd4f822686a307a3c2860ccdb28cd61 100644 --- a/src/libs/cplusplus/ExpressionUnderCursor.cpp +++ b/src/libs/cplusplus/ExpressionUnderCursor.cpp @@ -30,7 +30,6 @@ #include "ExpressionUnderCursor.h" #include "SimpleLexer.h" #include "BackwardsScanner.h" -#include "TokenCache.h" #include <Token.h> #include <QTextCursor> @@ -38,8 +37,8 @@ using namespace CPlusPlus; -ExpressionUnderCursor::ExpressionUnderCursor(TokenCache *tokenCache) - : _tokenCache(tokenCache), _jumpedComma(false) +ExpressionUnderCursor::ExpressionUnderCursor() + : _jumpedComma(false) { } ExpressionUnderCursor::~ExpressionUnderCursor() @@ -219,7 +218,7 @@ bool ExpressionUnderCursor::isAccessToken(const SimpleToken &tk) QString ExpressionUnderCursor::operator()(const QTextCursor &cursor) { - BackwardsScanner scanner(_tokenCache, cursor); + BackwardsScanner scanner(cursor); _jumpedComma = false; @@ -233,7 +232,7 @@ QString ExpressionUnderCursor::operator()(const QTextCursor &cursor) int ExpressionUnderCursor::startOfFunctionCall(const QTextCursor &cursor) const { - BackwardsScanner scanner(_tokenCache, cursor); + BackwardsScanner scanner(cursor); int index = scanner.startToken(); diff --git a/src/libs/cplusplus/ExpressionUnderCursor.h b/src/libs/cplusplus/ExpressionUnderCursor.h index ea017ca533920ba442106d69dc597844fce2b86b..3972aca6e4f408da9a5affbe56e6241d421b55cf 100644 --- a/src/libs/cplusplus/ExpressionUnderCursor.h +++ b/src/libs/cplusplus/ExpressionUnderCursor.h @@ -43,12 +43,11 @@ namespace CPlusPlus { class BackwardsScanner; class SimpleToken; -class TokenCache; class CPLUSPLUS_EXPORT ExpressionUnderCursor { public: - ExpressionUnderCursor(TokenCache *tokenCache); + ExpressionUnderCursor(); ~ExpressionUnderCursor(); QString operator()(const QTextCursor &cursor); @@ -60,7 +59,6 @@ private: bool isAccessToken(const SimpleToken &tk); private: - TokenCache *_tokenCache; bool _jumpedComma; }; diff --git a/src/libs/cplusplus/MatchingText.cpp b/src/libs/cplusplus/MatchingText.cpp index ed1b8c12b2c4ced3205383ce530a52959bea6002..b0c5461f24bccb6ea2eb0b0538cc9d81af1b1efa 100644 --- a/src/libs/cplusplus/MatchingText.cpp +++ b/src/libs/cplusplus/MatchingText.cpp @@ -28,7 +28,6 @@ **************************************************************************/ #include "MatchingText.h" #include "BackwardsScanner.h" -#include "TokenCache.h" #include <Token.h> @@ -76,8 +75,7 @@ static bool isCompleteCharLiteral(const BackwardsScanner &tk, int index) return false; } -MatchingText::MatchingText(TokenCache *tokenCache) - : _tokenCache(tokenCache) +MatchingText::MatchingText() { } bool MatchingText::shouldInsertMatchingText(const QTextCursor &tc) @@ -153,7 +151,7 @@ QString MatchingText::insertMatchingBrace(const QTextCursor &cursor, const QStri if (text.isEmpty() || !shouldInsertMatchingText(la)) return QString(); - BackwardsScanner tk(_tokenCache, tc, MAX_NUM_LINES, textToProcess.left(*skippedChars)); + BackwardsScanner tk(tc, textToProcess.left(*skippedChars), MAX_NUM_LINES); const int startToken = tk.startToken(); int index = startToken; @@ -213,7 +211,7 @@ bool MatchingText::shouldInsertNewline(const QTextCursor &tc) const QString MatchingText::insertParagraphSeparator(const QTextCursor &tc) const { - BackwardsScanner tk(_tokenCache, tc, MAX_NUM_LINES); + BackwardsScanner tk(tc, QString(), MAX_NUM_LINES); int index = tk.startToken(); if (tk[index - 1].isNot(T_LBRACE)) diff --git a/src/libs/cplusplus/MatchingText.h b/src/libs/cplusplus/MatchingText.h index 8e42dc0f817fb71690143466c501a0b2dedcaa5a..5a49fa927c0a04aa7b3ecc4b7753e75cbbc46afc 100644 --- a/src/libs/cplusplus/MatchingText.h +++ b/src/libs/cplusplus/MatchingText.h @@ -35,12 +35,11 @@ namespace CPlusPlus { class BackwardsScanner; -class TokenCache; class CPLUSPLUS_EXPORT MatchingText { public: - MatchingText(TokenCache *tokenCache); + MatchingText(); static bool shouldInsertMatchingText(const QTextCursor &tc); static bool shouldInsertMatchingText(const QChar &lookAhead); @@ -51,8 +50,6 @@ public: private: bool shouldInsertNewline(const QTextCursor &tc) const; - - TokenCache *_tokenCache; }; } // end of namespace CPlusPlus diff --git a/src/libs/cplusplus/TokenCache.cpp b/src/libs/cplusplus/TokenCache.cpp deleted file mode 100644 index 64fdb57ce395503e1ae5e33441048ff4da4d5cd5..0000000000000000000000000000000000000000 --- a/src/libs/cplusplus/TokenCache.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "SimpleLexer.h" -#include "TokenCache.h" - -#include <QtCore/QDebug> - -using namespace CPlusPlus; - -TokenCache::TokenCache() - : m_doc(0) - , m_revision(-1) -{} - -void TokenCache::setDocument(QTextDocument *doc) -{ - m_doc = doc; - m_revision = -1; -} - -QList<SimpleToken> TokenCache::tokensForBlock(const QTextBlock &block) const -{ - Q_ASSERT(m_doc); - - const int documentRevision = m_doc->revision(); - - if (documentRevision != m_revision) { - m_tokensByBlock.clear(); - m_revision = documentRevision; -// qDebug() << "** revision changed to" << documentRevision; - } - - const int blockNr = block.blockNumber(); - - if (m_tokensByBlock.contains(blockNr)) { -// qDebug()<<"Cache hit on line" << line; - return m_tokensByBlock.value(blockNr); - } else { -// qDebug()<<"Cache miss on line" << line; - - SimpleLexer tokenize; - tokenize.setObjCEnabled(true); - tokenize.setQtMocRunEnabled(true); - tokenize.setSkipComments(false); - - const int prevState = previousBlockState(block); - QList<SimpleToken> tokens = tokenize(block.text(), prevState); - m_tokensByBlock.insert(blockNr, tokens); - - return tokens; - } -} - -int TokenCache::previousBlockState(const QTextBlock &block) -{ - const QTextBlock prevBlock = block.previous(); - - if (prevBlock.isValid()) { - int state = prevBlock.userState(); - - if (state != -1) - return state; - } - - return 0; -} diff --git a/src/libs/cplusplus/TokenCache.h b/src/libs/cplusplus/TokenCache.h deleted file mode 100644 index 2989133d73d295ddc214bf9cf9951122b2fd5c0a..0000000000000000000000000000000000000000 --- a/src/libs/cplusplus/TokenCache.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef TOKENCACHE_H -#define TOKENCACHE_H - -#include <CPlusPlusForwardDeclarations.h> -#include <cplusplus/SimpleLexer.h> - -#include <QtCore/QHash> -#include <QtCore/QList> - -#include <QtGui/QTextBlock> -#include <QtGui/QTextDocument> - -namespace CPlusPlus { - -class CPLUSPLUS_EXPORT TokenCache -{ -public: - TokenCache(); - - void setDocument(QTextDocument *doc); - - QList<CPlusPlus::SimpleToken> tokensForBlock(const QTextBlock &block) const; - - static int previousBlockState(const QTextBlock &block); - -private: - QTextDocument *m_doc; - - mutable int m_revision; - mutable QHash<int, QList<CPlusPlus::SimpleToken> > m_tokensByBlock; -}; - -} // namespace CPlusPlus - -#endif // TOKENCACHE_H diff --git a/src/libs/cplusplus/TokenUnderCursor.cpp b/src/libs/cplusplus/TokenUnderCursor.cpp index c1b4b192471334ed89b8e5fddd616d48f7ee4333..5cbcdfc7a229d0108357cf97c88c68acc473a456 100644 --- a/src/libs/cplusplus/TokenUnderCursor.cpp +++ b/src/libs/cplusplus/TokenUnderCursor.cpp @@ -28,14 +28,12 @@ **************************************************************************/ #include "TokenUnderCursor.h" -#include "TokenCache.h" -#include "TokenCache.h" +#include "BackwardsScanner.h" #include <Token.h> #include <QTextCursor> #include <QTextBlock> #include <climits> -#include <QTextDocument> using namespace CPlusPlus; @@ -45,13 +43,17 @@ TokenUnderCursor::TokenUnderCursor() TokenUnderCursor::~TokenUnderCursor() { } -SimpleToken TokenUnderCursor::operator()(TokenCache *cache, const QTextCursor &cursor, QTextBlock *b) +SimpleToken TokenUnderCursor::operator()(const QTextCursor &cursor, QTextBlock *b) { + SimpleLexer tokenize; + tokenize.setObjCEnabled(true); + tokenize.setSkipComments(false); + QTextBlock block = cursor.block(); int column = cursor.position() - cursor.block().position(); _text = block.text(); - _tokens = cache->tokensForBlock(block); + _tokens = tokenize(_text, BackwardsScanner::previousBlockState(block)); for (int index = _tokens.size() - 1; index != -1; --index) { const SimpleToken &tk = _tokens.at(index); if (tk.position() < column) { diff --git a/src/libs/cplusplus/TokenUnderCursor.h b/src/libs/cplusplus/TokenUnderCursor.h index 8081d65502ccb348b276ee6f6113b9a9951f873b..92d421963c9cd22458aacaf5d884b092572374a9 100644 --- a/src/libs/cplusplus/TokenUnderCursor.h +++ b/src/libs/cplusplus/TokenUnderCursor.h @@ -40,15 +40,13 @@ QT_END_NAMESPACE namespace CPlusPlus { -class TokenCache; - class CPLUSPLUS_EXPORT TokenUnderCursor { public: TokenUnderCursor(); ~TokenUnderCursor(); - SimpleToken operator()(TokenCache *cache, const QTextCursor &cursor, QTextBlock *block = 0); + SimpleToken operator()(const QTextCursor &cursor, QTextBlock *block = 0); const QList<SimpleToken> &tokens() const { return _tokens; } diff --git a/src/libs/cplusplus/cplusplus-lib.pri b/src/libs/cplusplus/cplusplus-lib.pri index 9fd72df3ec4c98c564c020c7a732bf619d06408c..3e883a4efdc7ba3fae644e593d750028e0d900d6 100644 --- a/src/libs/cplusplus/cplusplus-lib.pri +++ b/src/libs/cplusplus/cplusplus-lib.pri @@ -15,8 +15,7 @@ HEADERS += \ $$PWD/TokenUnderCursor.h \ $$PWD/BackwardsScanner.h \ $$PWD/MatchingText.h \ - $$PWD/OverviewModel.h \ - $$PWD/TokenCache.h + $$PWD/OverviewModel.h SOURCES += \ $$PWD/Icons.cpp \ @@ -24,8 +23,7 @@ SOURCES += \ $$PWD/TokenUnderCursor.cpp \ $$PWD/BackwardsScanner.cpp \ $$PWD/MatchingText.cpp \ - $$PWD/OverviewModel.cpp \ - $$PWD/TokenCache.cpp + $$PWD/OverviewModel.cpp } HEADERS += \ diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 680c3067d3453189d6da4abf1798e9fe1ea28be9..7b94beabb79177d13b64ad9bb26064745597a724 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -56,7 +56,6 @@ #include <cplusplus/BackwardsScanner.h> #include <cplusplus/FastPreprocessor.h> #include <cplusplus/CheckUndefinedSymbols.h> -#include <cplusplus/TokenCache.h> #include <cpptools/cppmodelmanagerinterface.h> @@ -535,7 +534,7 @@ struct FindCanonicalSymbol SemanticInfo info; FindCanonicalSymbol(CPPEditor *editor, const SemanticInfo &info) - : editor(editor), expressionUnderCursor(editor->tokenCache()), info(info) + : editor(editor), info(info) { typeOfExpression.init(info.doc, info.snapshot); } @@ -773,11 +772,6 @@ void CPPEditor::cut() finishRename(); } -TokenCache *CPPEditor::tokenCache() const -{ - return m_modelManager->tokenCache(editableInterface()); -} - void CPPEditor::startRename() { m_inRenameChanged = false; @@ -1257,7 +1251,7 @@ CPPEditor::Link CPPEditor::findLinkAt(const QTextCursor &cursor, SimpleLexer tokenize; tokenize.setQtMocRunEnabled(true); const QString blockText = cursor.block().text(); - const QList<SimpleToken> tokens = tokenize(blockText, TokenCache::previousBlockState(cursor.block())); + const QList<SimpleToken> tokens = tokenize(blockText, BackwardsScanner::previousBlockState(cursor.block())); bool recognizedQtMethod = false; @@ -1307,7 +1301,7 @@ CPPEditor::Link CPPEditor::findLinkAt(const QTextCursor &cursor, static TokenUnderCursor tokenUnderCursor; QTextBlock block; - const SimpleToken tk = tokenUnderCursor(tokenCache(), tc, &block); + const SimpleToken tk = tokenUnderCursor(tc, &block); beginOfToken = block.position() + tk.begin(); endOfToken = block.position() + tk.end(); @@ -1337,7 +1331,7 @@ CPPEditor::Link CPPEditor::findLinkAt(const QTextCursor &cursor, return link; // Evaluate the type of the expression under the cursor - ExpressionUnderCursor expressionUnderCursor(tokenCache()); + ExpressionUnderCursor expressionUnderCursor; const QString expression = expressionUnderCursor(tc); TypeOfExpression typeOfExpression; @@ -1436,13 +1430,13 @@ bool CPPEditor::isElectricCharacter(const QChar &ch) const QString CPPEditor::insertMatchingBrace(const QTextCursor &tc, const QString &text, const QChar &la, int *skippedChars) const { - MatchingText m(tokenCache()); + MatchingText m; return m.insertMatchingBrace(tc, text, la, skippedChars); } QString CPPEditor::insertParagraphSeparator(const QTextCursor &tc) const { - MatchingText m(tokenCache()); + MatchingText m; return m.insertParagraphSeparator(tc); } @@ -1466,7 +1460,7 @@ bool CPPEditor::contextAllowsAutoParentheses(const QTextCursor &cursor, bool CPPEditor::isInComment(const QTextCursor &cursor) const { CPlusPlus::TokenUnderCursor tokenUnderCursor; - const SimpleToken tk = tokenUnderCursor(tokenCache(), cursor); + const SimpleToken tk = tokenUnderCursor(cursor); if (tk.isComment()) { const int pos = cursor.selectionEnd() - cursor.block().position(); @@ -1521,7 +1515,7 @@ void CPPEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar typedCha const TabSettings &ts = tabSettings(); - BackwardsScanner tk(tokenCache(), tc, 400); + BackwardsScanner tk(tc, QString(), 400); const int tokenCount = tk.startToken(); if (tokenCount != 0) { diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h index a120c9b56dacd897e0f9d59ca66c806c6ea7f78f..357707a34d757322dea2c03bfee31f6a030ac54b 100644 --- a/src/plugins/cppeditor/cppeditor.h +++ b/src/plugins/cppeditor/cppeditor.h @@ -48,7 +48,6 @@ QT_END_NAMESPACE namespace CPlusPlus { class OverviewModel; class Symbol; -class TokenCache; } namespace CppTools { @@ -199,8 +198,6 @@ public: virtual void paste(); // reimplemented from BaseTextEditor virtual void cut(); // reimplemented from BaseTextEditor - CPlusPlus::TokenCache *tokenCache() const; - public Q_SLOTS: virtual void setFontSettings(const TextEditor::FontSettings &); void setSortedMethodOverview(bool sort); diff --git a/src/plugins/cppeditor/cpphighlighter.cpp b/src/plugins/cppeditor/cpphighlighter.cpp index 47bd04b455db77f14898be679f102bd94e2bcfeb..25354f44877f600d77b7046032bb5db2e4449237 100644 --- a/src/plugins/cppeditor/cpphighlighter.cpp +++ b/src/plugins/cppeditor/cpphighlighter.cpp @@ -62,7 +62,6 @@ void CppHighlighter::highlightBlock(const QString &text) tokenize.setObjCEnabled(false); int initialState = state; -// qDebug() << currentBlock().document()->revision()<<"CppHighlighter::highlightBlock for block#" << currentBlock().blockNumber(); const QList<SimpleToken> tokens = tokenize(text, initialState); state = tokenize.state(); // refresh the state diff --git a/src/plugins/cppeditor/cpphoverhandler.cpp b/src/plugins/cppeditor/cpphoverhandler.cpp index 65172a6e1f582bc7465b093deb077818bc278bab..2f7bd0517900b1922e886bfb68d3407538b02139 100644 --- a/src/plugins/cppeditor/cpphoverhandler.cpp +++ b/src/plugins/cppeditor/cpphoverhandler.cpp @@ -254,7 +254,7 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in } // Fetch the expression's code - ExpressionUnderCursor expressionUnderCursor(m_modelManager->tokenCache(editor)); + ExpressionUnderCursor expressionUnderCursor; const QString expression = expressionUnderCursor(tc); const QList<LookupItem> types = typeOfExpression(expression, scope); diff --git a/src/plugins/cppeditor/cpphoverhandler.h b/src/plugins/cppeditor/cpphoverhandler.h index 4cf10d5358910b46ace057178ac5c0b2f35a9717..d0f5b11dc5dd2b41f841551be7893aa8d57611b1 100644 --- a/src/plugins/cppeditor/cpphoverhandler.h +++ b/src/plugins/cppeditor/cpphoverhandler.h @@ -37,10 +37,6 @@ class QHelpEngineCore; class QPoint; QT_END_NAMESPACE -namespace CPlusPlus { -class TokenCache; -} - namespace Core { class IEditor; } diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 0f0d6991818a7c52f305d5121474d5525adb4983..935e031595973b0a3686d5752e26dc2f51a250ff 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -65,6 +65,7 @@ #include <utils/faketooltip.h> #include <utils/qtcassert.h> +#include <QtCore/QDebug> #include <QtCore/QMap> #include <QtCore/QFile> #include <QtGui/QAction> @@ -453,8 +454,7 @@ QIcon CppCodeCompletion::iconForSymbol(Symbol *symbol) const /* Searches backwards for an access operator. */ -static int startOfOperator(TokenCache *tokenCache, - TextEditor::ITextEditable *editor, +static int startOfOperator(TextEditor::ITextEditable *editor, int pos, unsigned *kind, bool wantFunctionCall) { @@ -547,7 +547,7 @@ static int startOfOperator(TokenCache *tokenCache, } if (completionKind == T_COMMA) { - ExpressionUnderCursor expressionUnderCursor(tokenCache); + ExpressionUnderCursor expressionUnderCursor; if (expressionUnderCursor.startOfFunctionCall(tc) == -1) { completionKind = T_EOF_SYMBOL; start = pos; @@ -555,7 +555,7 @@ static int startOfOperator(TokenCache *tokenCache, } static CPlusPlus::TokenUnderCursor tokenUnderCursor; - const SimpleToken tk = tokenUnderCursor(tokenCache, tc); + const SimpleToken tk = tokenUnderCursor(tc); if (completionKind == T_DOXY_COMMENT && !(tk.is(T_DOXY_COMMENT) || tk.is(T_CPP_DOXY_COMMENT))) { completionKind = T_EOF_SYMBOL; @@ -634,10 +634,9 @@ int CppCodeCompletion::startPosition() const bool CppCodeCompletion::triggersCompletion(TextEditor::ITextEditable *editor) { const int pos = editor->position(); - TokenCache *tokenCache = m_manager->tokenCache(editor); unsigned token = T_EOF_SYMBOL; - if (startOfOperator(tokenCache, editor, pos, &token, /*want function call=*/ true) != pos) { + if (startOfOperator(editor, pos, &token, /*want function call=*/ true) != pos) { if (token == T_POUND) { if (TextEditor::BaseTextEditor *edit = qobject_cast<TextEditor::BaseTextEditor *>(editor->widget())) { QTextCursor tc(edit->document()); @@ -685,8 +684,7 @@ int CppCodeCompletion::startCompletionHelper(TextEditor::ITextEditable *editor) while (editor->characterAt(endOfOperator - 1).isSpace()) --endOfOperator; - TokenCache *tokenCache = m_manager->tokenCache(editor); - int endOfExpression = startOfOperator(tokenCache, editor, endOfOperator, + int endOfExpression = startOfOperator(editor, endOfOperator, &m_completionOperator, /*want function call =*/ true); @@ -727,7 +725,7 @@ int CppCodeCompletion::startCompletionHelper(TextEditor::ITextEditable *editor) return m_startPosition; } - ExpressionUnderCursor expressionUnderCursor(m_manager->tokenCache(editor)); + ExpressionUnderCursor expressionUnderCursor; QTextCursor tc(edit->document()); if (m_completionOperator == T_COMMA) { @@ -802,13 +800,13 @@ int CppCodeCompletion::startCompletionInternal(TextEditor::BaseTextEditor *edit, } } -// if (debug) -// qDebug() << "scope:" << scope->owner()->fileName() << scope->owner()->line() << scope->owner()->column(); + if (debug) + qDebug() << "scope:" << scope->owner()->fileName() << scope->owner()->line() << scope->owner()->column(); QList<LookupItem> results = typeOfExpression(expression, scope, TypeOfExpression::Preprocess); -// if (debug) -// qDebug() << "got:" << results.size() << "results"; + if (debug) + qDebug() << "got:" << results.size() << "results"; if (results.isEmpty()) { if (m_completionOperator == T_SIGNAL || m_completionOperator == T_SLOT) { @@ -830,8 +828,7 @@ int CppCodeCompletion::startCompletionInternal(TextEditor::BaseTextEditor *edit, QTextCursor tc(edit->document()); tc.setPosition(index); - TokenCache *tokenCache = m_manager->tokenCache(edit->editableInterface()); - ExpressionUnderCursor expressionUnderCursor(tokenCache); + ExpressionUnderCursor expressionUnderCursor; const QString baseExpression = expressionUnderCursor(tc); // Resolve the type of this expression @@ -1087,8 +1084,7 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<LookupItem> &r QTextCursor tc(edit->document()); tc.setPosition(endOfExpression); - TokenCache *tokenCache = m_manager->tokenCache(m_editor); - BackwardsScanner bs(tokenCache, tc); + BackwardsScanner bs(tc); const int startToken = bs.startToken(); const int lineStartToken = bs.startOfLine(startToken); // make sure the required tokens are actually available @@ -1147,8 +1143,8 @@ bool CppCodeCompletion::completeMember(const QList<LookupItem> &baseResults) { const LookupContext &context = typeOfExpression.context(); -// if (debug) -// qDebug() << Q_FUNC_INFO << __LINE__; + if (debug) + qDebug() << Q_FUNC_INFO << __LINE__; if (baseResults.isEmpty()) return false; @@ -1160,8 +1156,8 @@ bool CppCodeCompletion::completeMember(const QList<LookupItem> &baseResults) if (ClassOrNamespace *binding = resolveExpression.baseExpression(baseResults, m_completionOperator, &replacedDotOperator)) { -// if (debug) -// qDebug() << "cool we got a binding for the base expression"; + if (debug) + qDebug() << "cool we got a binding for the base expression"; if (replacedDotOperator && binding) { // Replace . with -> @@ -1177,10 +1173,10 @@ bool CppCodeCompletion::completeMember(const QList<LookupItem> &baseResults) return ! m_completions.isEmpty(); } -// if (debug) { -// Overview oo; -// qDebug() << "hmm, got:" << oo(baseResults.first().type()); -// } + if (debug) { + Overview oo; + qDebug() << "hmm, got:" << oo(baseResults.first().type()); + } return false; } diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 6c20bfe215a70bdc0908adf6a3b617bca796dd8d..f6222bfc500d1d16ff21787be73aadaeb4edaadc 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -962,9 +962,6 @@ bool CppModelManager::isCppEditor(Core::IEditor *editor) const return editor->context().contains(uid); } -TokenCache *CppModelManager::tokenCache(TextEditor::ITextEditor *editor) const -{ return editorSupport(editor)->tokenCache(); } - void CppModelManager::emitDocumentUpdated(Document::Ptr doc) { emit documentUpdated(doc); } diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index f43c3bbd82fffafa6112bbe05a64e152702e1bc9..0058e4edafc433adf7c08c5e10245cc279219450 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -108,8 +108,6 @@ public: CppEditorSupport *editorSupport(TextEditor::ITextEditor *editor) const { return m_editorSupport.value(editor); } - virtual CPlusPlus::TokenCache *tokenCache(TextEditor::ITextEditor *editor) const; - void emitDocumentUpdated(CPlusPlus::Document::Ptr doc); void stopEditorSelectionsUpdate() diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h index 1bd2696902ed24d6bf44d86f692bd546728b86e0..cc1177a27f7ea0d79d0f79732a6627442d170ef1 100644 --- a/src/plugins/cpptools/cppmodelmanagerinterface.h +++ b/src/plugins/cpptools/cppmodelmanagerinterface.h @@ -40,25 +40,16 @@ namespace CPlusPlus { class LookupContext; - class TokenCache; } namespace ProjectExplorer { class Project; } -namespace TextEditor { - class ITextEditor; -} - namespace CppTools { class AbstractEditorSupport; -namespace Internal { -class CppEditorSupport; -} - class CPPTOOLS_EXPORT CppModelManagerInterface : public QObject { Q_OBJECT @@ -139,8 +130,6 @@ public: virtual void findMacroUsages(const CPlusPlus::Macro ¯o) = 0; - virtual CPlusPlus::TokenCache *tokenCache(TextEditor::ITextEditor *editor) const = 0; - Q_SIGNALS: void documentUpdated(CPlusPlus::Document::Ptr doc); diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp index 33eed4e02020cfc0657cf8038a66f750d87e2dc7..77cccf10180cca1243e3960b5313b8bcc84e9a49 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.cpp +++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp @@ -67,12 +67,8 @@ void CppEditorSupport::setTextEditor(TextEditor::ITextEditor *textEditor) { _textEditor = textEditor; - if (_textEditor) { - if (TextEditor::BaseTextEditor *ed = qobject_cast<TextEditor::BaseTextEditor *>(_textEditor->widget())) - _tokenCache.setDocument(ed->document()); - } else { + if (! _textEditor) return; - } connect(_textEditor, SIGNAL(contentsChanged()), this, SIGNAL(contentsChanged())); connect(this, SIGNAL(contentsChanged()), this, SLOT(updateDocument())); @@ -100,11 +96,6 @@ unsigned CppEditorSupport::editorRevision() const return 0; } -TokenCache *CppEditorSupport::tokenCache() -{ - return &_tokenCache; -} - int CppEditorSupport::updateDocumentInterval() const { return _updateDocumentInterval; } diff --git a/src/plugins/cpptools/cpptoolseditorsupport.h b/src/plugins/cpptools/cpptoolseditorsupport.h index 61fed38d3c43cb4fad9405474c32ccbacd04a8ab..882a9ac9aa95fd11f921daf8654c3829f80d497e 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.h +++ b/src/plugins/cpptools/cpptoolseditorsupport.h @@ -36,7 +36,6 @@ #include <QSharedPointer> #include <QTextCursor> #include <cplusplus/CppDocument.h> -#include <cplusplus/TokenCache.h> QT_BEGIN_NAMESPACE class QTimer; @@ -73,8 +72,6 @@ public: QString contents(); unsigned editorRevision() const; - CPlusPlus::TokenCache *tokenCache(); - Q_SIGNALS: void contentsChanged(); @@ -92,7 +89,6 @@ private: QFuture<void> _documentParser; QString _cachedContents; unsigned _revision; - CPlusPlus::TokenCache _tokenCache; }; } // namespace Internal diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp index a3d0f2a28ee840f1a64f9e7531a20b0d8ad532ef..3b625d507b8323114e52182441a6cf81bee7025c 100644 --- a/src/plugins/debugger/watchutils.cpp +++ b/src/plugins/debugger/watchutils.cpp @@ -736,8 +736,7 @@ QString cppExpressionAt(TextEditor::ITextEditor *editor, int pos, return QString(); QString expr = plaintext->textCursor().selectedText(); - CppTools::CppModelManagerInterface *modelManager = ExtensionSystem::PluginManager::instance()->getObject<CppTools::CppModelManagerInterface>(); - if (expr.isEmpty() && modelManager) { + if (expr.isEmpty()) { QTextCursor tc(plaintext->document()); tc.setPosition(pos); @@ -746,7 +745,7 @@ QString cppExpressionAt(TextEditor::ITextEditor *editor, int pos, tc.movePosition(QTextCursor::EndOfWord); // Fetch the expression's code. - CPlusPlus::ExpressionUnderCursor expressionUnderCursor(modelManager->tokenCache(editor)); + CPlusPlus::ExpressionUnderCursor expressionUnderCursor; expr = expressionUnderCursor(tc); *column = tc.columnNumber(); *line = tc.blockNumber(); @@ -758,7 +757,7 @@ QString cppExpressionAt(TextEditor::ITextEditor *editor, int pos, if (function && !expr.isEmpty()) if (const Core::IFile *file = editor->file()) - if (modelManager) + if (CppTools::CppModelManagerInterface *modelManager = ExtensionSystem::PluginManager::instance()->getObject<CppTools::CppModelManagerInterface>()) *function = CppTools::AbstractEditorSupport::functionAt(modelManager, file->fileName(), *line, *column); return expr;