diff options
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/cplusplus/BackwardsScanner.cpp | 53 | ||||
-rw-r--r-- | src/libs/cplusplus/BackwardsScanner.h | 14 | ||||
-rw-r--r-- | src/libs/cplusplus/ExpressionUnderCursor.cpp | 9 | ||||
-rw-r--r-- | src/libs/cplusplus/ExpressionUnderCursor.h | 4 | ||||
-rw-r--r-- | src/libs/cplusplus/MatchingText.cpp | 8 | ||||
-rw-r--r-- | src/libs/cplusplus/MatchingText.h | 5 | ||||
-rw-r--r-- | src/libs/cplusplus/TokenCache.cpp | 64 | ||||
-rw-r--r-- | src/libs/cplusplus/TokenCache.h | 35 | ||||
-rw-r--r-- | src/libs/cplusplus/TokenUnderCursor.cpp | 12 | ||||
-rw-r--r-- | src/libs/cplusplus/TokenUnderCursor.h | 4 | ||||
-rw-r--r-- | src/libs/cplusplus/cplusplus-lib.pri | 6 |
11 files changed, 52 insertions, 162 deletions
diff --git a/src/libs/cplusplus/BackwardsScanner.cpp b/src/libs/cplusplus/BackwardsScanner.cpp index bf3d59c4ac..3a0fbb936f 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 25b7bd3289..cca06db75c 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 c1b439ed09..c840ad398d 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 ea017ca533..3972aca6e4 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 ed1b8c12b2..b0c5461f24 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 8e42dc0f81..5a49fa927c 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 64fdb57ce3..0000000000 --- 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 2989133d73..0000000000 --- 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 c1b4b19247..5cbcdfc7a2 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 8081d65502..92d421963c 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 9fd72df3ec..3e883a4efd 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 += \ |