aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOrgad Shaneh <[email protected]>2015-02-26 09:14:38 +0200
committerOrgad Shaneh <[email protected]>2015-02-27 15:11:14 +0000
commitd63624afe003e721c3079ad65913831385f5a1e0 (patch)
treeace7625eda7c085ecdfb7f31867bbd24c03591c1
parent1a37605f919a761892cb4c4759265956e0efa453 (diff)
C++: Accept language features in BackwardsScanner et al
Change-Id: Id97ca27fa909979573efca12dc0cd14b28eacd17 Reviewed-by: Nikolai Kosjar <[email protected]>
-rw-r--r--src/libs/cplusplus/BackwardsScanner.cpp9
-rw-r--r--src/libs/cplusplus/BackwardsScanner.h9
-rw-r--r--src/libs/cplusplus/ExpressionUnderCursor.cpp7
-rw-r--r--src/libs/cplusplus/ExpressionUnderCursor.h4
-rw-r--r--src/libs/cplusplus/MatchingText.cpp5
-rw-r--r--src/plugins/analyzerbase/analyzerutils.cpp2
-rw-r--r--src/plugins/clangcodemodel/clangcompletion.cpp6
-rw-r--r--src/plugins/cppeditor/cppcanonicalsymbol.cpp2
-rw-r--r--src/plugins/cppeditor/cppelementevaluator.cpp2
-rw-r--r--src/plugins/cppeditor/cppfollowsymbolundercursor.cpp2
-rw-r--r--src/plugins/cpptools/cppcompletionassist.cpp14
-rw-r--r--src/plugins/debugger/sourceutils.cpp18
-rw-r--r--src/plugins/glsleditor/glslcompletionassist.cpp3
-rw-r--r--src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp2
-rw-r--r--tests/auto/cplusplus/semantic/tst_semantic.cpp10
15 files changed, 48 insertions, 47 deletions
diff --git a/src/libs/cplusplus/BackwardsScanner.cpp b/src/libs/cplusplus/BackwardsScanner.cpp
index 9545e4c8d30..e31bfe43a01 100644
--- a/src/libs/cplusplus/BackwardsScanner.cpp
+++ b/src/libs/cplusplus/BackwardsScanner.cpp
@@ -38,6 +38,7 @@
using namespace CPlusPlus;
BackwardsScanner::BackwardsScanner(const QTextCursor &cursor,
+ const LanguageFeatures &languageFeatures,
int maxBlockCount,
const QString &suffix,
bool skipComments)
@@ -46,13 +47,7 @@ BackwardsScanner::BackwardsScanner(const QTextCursor &cursor,
, _block(cursor.block())
, _maxBlockCount(maxBlockCount)
{
- // FIXME: Why these defaults?
- LanguageFeatures features;
- features.qtMocRunEnabled = true;
- features.qtEnabled = true;
- features.qtKeywordsEnabled = true;
- features.objCEnabled = true;
- _tokenize.setLanguageFeatures(features);
+ _tokenize.setLanguageFeatures(languageFeatures);
_tokenize.setSkipComments(skipComments);
_text = _block.text().left(cursor.position() - cursor.block().position());
diff --git a/src/libs/cplusplus/BackwardsScanner.h b/src/libs/cplusplus/BackwardsScanner.h
index dd7cfef0e58..1f08e73d3c6 100644
--- a/src/libs/cplusplus/BackwardsScanner.h
+++ b/src/libs/cplusplus/BackwardsScanner.h
@@ -43,10 +43,11 @@ class CPLUSPLUS_EXPORT BackwardsScanner
enum { MAX_BLOCK_COUNT = 10 };
public:
- explicit BackwardsScanner(const QTextCursor &cursor,
- int maxBlockCount = MAX_BLOCK_COUNT,
- const QString &suffix = QString(),
- bool skipComments = true);
+ BackwardsScanner(const QTextCursor &cursor,
+ const LanguageFeatures &languageFeatures,
+ int maxBlockCount = MAX_BLOCK_COUNT,
+ const QString &suffix = QString(),
+ bool skipComments = true);
int startToken() const;
diff --git a/src/libs/cplusplus/ExpressionUnderCursor.cpp b/src/libs/cplusplus/ExpressionUnderCursor.cpp
index e1de7261c29..1181fa37c72 100644
--- a/src/libs/cplusplus/ExpressionUnderCursor.cpp
+++ b/src/libs/cplusplus/ExpressionUnderCursor.cpp
@@ -40,8 +40,9 @@
using namespace CPlusPlus;
-ExpressionUnderCursor::ExpressionUnderCursor()
+ExpressionUnderCursor::ExpressionUnderCursor(const LanguageFeatures &languageFeatures)
: _jumpedComma(false)
+ , _languageFeatures(languageFeatures)
{ }
int ExpressionUnderCursor::startOfExpression(BackwardsScanner &tk, int index)
@@ -243,7 +244,7 @@ bool ExpressionUnderCursor::isAccessToken(const Token &tk)
QString ExpressionUnderCursor::operator()(const QTextCursor &cursor)
{
- BackwardsScanner scanner(cursor);
+ BackwardsScanner scanner(cursor, _languageFeatures);
_jumpedComma = false;
@@ -257,7 +258,7 @@ QString ExpressionUnderCursor::operator()(const QTextCursor &cursor)
int ExpressionUnderCursor::startOfFunctionCall(const QTextCursor &cursor) const
{
- BackwardsScanner scanner(cursor);
+ BackwardsScanner scanner(cursor, _languageFeatures);
int index = scanner.startToken();
diff --git a/src/libs/cplusplus/ExpressionUnderCursor.h b/src/libs/cplusplus/ExpressionUnderCursor.h
index 8d7ef0419d2..375fc6cfa9e 100644
--- a/src/libs/cplusplus/ExpressionUnderCursor.h
+++ b/src/libs/cplusplus/ExpressionUnderCursor.h
@@ -32,6 +32,7 @@
#define CPLUSPLUS_EXPRESSIONUNDERCURSOR_H
#include <cplusplus/CPlusPlusForwardDeclarations.h>
+#include <cplusplus/Token.h>
#include <QList>
@@ -47,7 +48,7 @@ class BackwardsScanner;
class CPLUSPLUS_EXPORT ExpressionUnderCursor
{
public:
- ExpressionUnderCursor();
+ ExpressionUnderCursor(const LanguageFeatures &languageFeatures);
QString operator()(const QTextCursor &cursor);
int startOfFunctionCall(const QTextCursor &cursor) const;
@@ -59,6 +60,7 @@ private:
private:
bool _jumpedComma;
+ LanguageFeatures _languageFeatures;
};
} // namespace CPlusPlus
diff --git a/src/libs/cplusplus/MatchingText.cpp b/src/libs/cplusplus/MatchingText.cpp
index ade49c19aa1..7b354b76d41 100644
--- a/src/libs/cplusplus/MatchingText.cpp
+++ b/src/libs/cplusplus/MatchingText.cpp
@@ -154,7 +154,8 @@ QString MatchingText::insertMatchingBrace(const QTextCursor &cursor, const QStri
if (text.isEmpty() || !shouldInsertMatchingText(la))
return QString();
- BackwardsScanner tk(tc, MAX_NUM_LINES, textToProcess.left(*skippedChars));
+ BackwardsScanner tk(tc, LanguageFeatures::defaultFeatures(), MAX_NUM_LINES,
+ textToProcess.left(*skippedChars));
const int startToken = tk.startToken();
int index = startToken;
@@ -215,7 +216,7 @@ static bool shouldInsertNewline(const QTextCursor &tc)
QString MatchingText::insertParagraphSeparator(const QTextCursor &tc)
{
- BackwardsScanner tk(tc, MAX_NUM_LINES);
+ BackwardsScanner tk(tc, LanguageFeatures::defaultFeatures(), MAX_NUM_LINES);
int index = tk.startToken();
if (tk[index - 1].isNot(T_LBRACE))
diff --git a/src/plugins/analyzerbase/analyzerutils.cpp b/src/plugins/analyzerbase/analyzerutils.cpp
index 508b0422efe..1216f9cfb53 100644
--- a/src/plugins/analyzerbase/analyzerutils.cpp
+++ b/src/plugins/analyzerbase/analyzerutils.cpp
@@ -79,7 +79,7 @@ CPlusPlus::Symbol *AnalyzerUtils::findSymbolUnderCursor()
QTC_ASSERT(doc, return 0);
// fetch the expression's code
- CPlusPlus::ExpressionUnderCursor expressionUnderCursor;
+ CPlusPlus::ExpressionUnderCursor expressionUnderCursor(doc->languageFeatures());
moveCursorToEndOfName(&tc);
const QString &expression = expressionUnderCursor(tc);
CPlusPlus::Scope *scope = doc->scopeAt(line, column);
diff --git a/src/plugins/clangcodemodel/clangcompletion.cpp b/src/plugins/clangcodemodel/clangcompletion.cpp
index 797d4acc1b2..6cc1eba3952 100644
--- a/src/plugins/clangcodemodel/clangcompletion.cpp
+++ b/src/plugins/clangcodemodel/clangcompletion.cpp
@@ -639,7 +639,7 @@ int ClangCompletionAssistProcessor::startCompletionHelper()
return m_startPosition;
}
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(m_interface->languageFeatures());
QTextCursor tc(m_interface->textDocument());
if (m_model->m_completionOperator == T_COMMA) {
@@ -705,7 +705,7 @@ int ClangCompletionAssistProcessor::startOfOperator(int pos,
}
if (*kind == T_COMMA) {
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(m_interface->languageFeatures());
if (expressionUnderCursor.startOfFunctionCall(tc) == -1) {
*kind = T_EOF_SYMBOL;
start = pos;
@@ -931,7 +931,7 @@ int ClangCompletionAssistProcessor::startCompletionInternal(const QString fileNa
QTextCursor tc(m_interface->textDocument());
tc.setPosition(index);
- ExpressionUnderCursor euc;
+ ExpressionUnderCursor euc(m_interface->languageFeatures());
index = euc.startOfFunctionCall(tc);
int nameStart = findStartOfName(index);
QTextCursor tc2(m_interface->textDocument());
diff --git a/src/plugins/cppeditor/cppcanonicalsymbol.cpp b/src/plugins/cppeditor/cppcanonicalsymbol.cpp
index f8dedd6b0de..6f51f284d91 100644
--- a/src/plugins/cppeditor/cppcanonicalsymbol.cpp
+++ b/src/plugins/cppeditor/cppcanonicalsymbol.cpp
@@ -77,7 +77,7 @@ Scope *CanonicalSymbol::getScopeAndExpression(const QTextCursor &cursor, QString
++pos;
tc.setPosition(pos);
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(m_document->languageFeatures());
*code = expressionUnderCursor(tc);
return m_document->scopeAt(line, column);
}
diff --git a/src/plugins/cppeditor/cppelementevaluator.cpp b/src/plugins/cppeditor/cppelementevaluator.cpp
index 050a85561d1..29759118fad 100644
--- a/src/plugins/cppeditor/cppelementevaluator.cpp
+++ b/src/plugins/cppeditor/cppelementevaluator.cpp
@@ -102,7 +102,7 @@ void CppElementEvaluator::execute()
CppTools::moveCursorToEndOfIdentifier(&m_tc);
// Fetch the expression's code
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(doc->languageFeatures());
const QString &expression = expressionUnderCursor(m_tc);
Scope *scope = doc->scopeAt(line, column);
diff --git a/src/plugins/cppeditor/cppfollowsymbolundercursor.cpp b/src/plugins/cppeditor/cppfollowsymbolundercursor.cpp
index b9fa4460e8f..785ef0379a7 100644
--- a/src/plugins/cppeditor/cppfollowsymbolundercursor.cpp
+++ b/src/plugins/cppeditor/cppfollowsymbolundercursor.cpp
@@ -615,7 +615,7 @@ TextEditorWidget::Link FollowSymbolUnderCursor::findLink(const QTextCursor &curs
return link;
// Evaluate the type of the expression under the cursor
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(features);
QString expression = expressionUnderCursor(tc);
for (int pos = tc.position();; ++pos) {
diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp
index 71294d0a0d4..f07ce5a13ae 100644
--- a/src/plugins/cpptools/cppcompletionassist.cpp
+++ b/src/plugins/cpptools/cppcompletionassist.cpp
@@ -168,7 +168,7 @@ static bool isDereferenced(TextEditorWidget *editorWidget, int basePosition)
QTextCursor cursor = editorWidget->textCursor();
cursor.setPosition(basePosition);
- BackwardsScanner scanner(cursor);
+ BackwardsScanner scanner(cursor, LanguageFeatures());
for (int pos = scanner.startToken()-1; pos >= 0; pos--) {
switch (scanner[pos].kind()) {
case T_COLON_COLON:
@@ -670,7 +670,7 @@ private:
QTextCursor cursor(m_assistInterface->textDocument());
cursor.setPosition(m_position + 1);
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(m_assistInterface->languageFeatures());
const QString expression = expressionUnderCursor(cursor);
if (expression.isEmpty())
return false;
@@ -951,7 +951,7 @@ int InternalCppCompletionAssistProcessor::startOfOperator(int pos,
}
if (*kind == T_COMMA) {
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(m_interface->languageFeatures());
if (expressionUnderCursor.startOfFunctionCall(tc) == -1) {
*kind = T_EOF_SYMBOL;
start = pos;
@@ -1099,7 +1099,7 @@ int InternalCppCompletionAssistProcessor::startCompletionHelper()
return m_startPosition;
}
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(m_interface->languageFeatures());
QTextCursor tc(m_interface->textDocument());
if (m_model->m_completionOperator == T_COMMA) {
@@ -1173,7 +1173,7 @@ bool InternalCppCompletionAssistProcessor::tryObjCCompletion()
QTextCursor tc(m_interface->textDocument());
tc.setPosition(end);
- BackwardsScanner tokens(tc);
+ BackwardsScanner tokens(tc, m_interface->languageFeatures());
if (tokens[tokens.startToken() - 1].isNot(T_RBRACKET))
return false;
@@ -1439,7 +1439,7 @@ int InternalCppCompletionAssistProcessor::startCompletionInternal(const QString
QTextCursor tc(m_interface->textDocument());
tc.setPosition(index);
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(m_interface->languageFeatures());
const QString baseExpression = expressionUnderCursor(tc);
// Resolve the type of this expression
@@ -2086,7 +2086,7 @@ bool InternalCppCompletionAssistProcessor::completeConstructorOrFunction(const Q
QTextCursor tc(m_interface->textDocument());
tc.setPosition(endOfExpression);
- BackwardsScanner bs(tc);
+ BackwardsScanner bs(tc, m_interface->languageFeatures());
const int startToken = bs.startToken();
int lineStartToken = bs.startOfLine(startToken);
// make sure the required tokens are actually available
diff --git a/src/plugins/debugger/sourceutils.cpp b/src/plugins/debugger/sourceutils.cpp
index 459f9a23ee0..0e4ff6ae389 100644
--- a/src/plugins/debugger/sourceutils.cpp
+++ b/src/plugins/debugger/sourceutils.cpp
@@ -286,6 +286,9 @@ QString cppExpressionAt(TextEditorWidget *editorWidget, int pos,
if (function)
function->clear();
+ const QString fileName = editorWidget->textDocument()->filePath().toString();
+ const Snapshot snapshot = CppModelManager::instance()->snapshot();
+ const Document::Ptr document = snapshot.document(fileName);
QTextCursor tc = editorWidget->textCursor();
QString expr = tc.selectedText();
if (expr.isEmpty()) {
@@ -295,21 +298,18 @@ QString cppExpressionAt(TextEditorWidget *editorWidget, int pos,
tc.movePosition(QTextCursor::EndOfWord);
// Fetch the expression's code.
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(document ? document->languageFeatures()
+ : LanguageFeatures::defaultFeatures());
expr = expressionUnderCursor(tc);
}
*column = tc.positionInBlock();
*line = tc.blockNumber() + 1;
- if (!expr.isEmpty()) {
- QString fileName = editorWidget->textDocument()->filePath().toString();
- const Snapshot snapshot = CppModelManager::instance()->snapshot();
- if (const Document::Ptr document = snapshot.document(fileName)) {
- QString func = document->functionAt(*line, *column, scopeFromLine, scopeToLine);
- if (function)
- *function = func;
- }
+ if (!expr.isEmpty() && document) {
+ QString func = document->functionAt(*line, *column, scopeFromLine, scopeToLine);
+ if (function)
+ *function = func;
}
return expr;
diff --git a/src/plugins/glsleditor/glslcompletionassist.cpp b/src/plugins/glsleditor/glslcompletionassist.cpp
index 003411c5b00..ab0a8520a9d 100644
--- a/src/plugins/glsleditor/glslcompletionassist.cpp
+++ b/src/plugins/glsleditor/glslcompletionassist.cpp
@@ -263,7 +263,8 @@ IAssistProposal *GlslCompletionAssistProcessor::perform(const AssistInterface *i
while (ch.isLetterOrNumber() || ch == QLatin1Char('_'))
ch = m_interface->characterAt(--pos);
- CPlusPlus::ExpressionUnderCursor expressionUnderCursor;
+ CPlusPlus::ExpressionUnderCursor expressionUnderCursor(
+ CPlusPlus::LanguageFeatures::defaultFeatures());
//GLSLTextEditorWidget *edit = qobject_cast<GLSLTextEditorWidget *>(editor->widget());
QList<GLSL::Symbol *> members;
diff --git a/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp b/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp
index e477eb7da4a..98bcc3e8867 100644
--- a/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp
+++ b/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp
@@ -987,7 +987,7 @@ static QString createConstructor(ClassSpecifierAST *classAST)
bool checkGenerated(const QTextCursor &cursor, int *doxyStart)
{
- BackwardsScanner tokens(cursor, 10, QString(), false);
+ BackwardsScanner tokens(cursor, LanguageFeatures::defaultFeatures(), 10, QString(), false);
Token prevToken = tokens.LA(1);
if (prevToken.kind() != T_DOXY_COMMENT && prevToken.kind() != T_CPP_DOXY_COMMENT)
return false;
diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp
index c11226240a8..2011f03e002 100644
--- a/tests/auto/cplusplus/semantic/tst_semantic.cpp
+++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp
@@ -532,7 +532,7 @@ void tst_Semantic::expression_under_cursor_1()
QTextCursor tc(&textDocument);
tc.movePosition(QTextCursor::End);
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(LanguageFeatures::defaultFeatures());
const QString expression = expressionUnderCursor(tc);
QCOMPARE(expression, QString("bar"));
@@ -548,7 +548,7 @@ void tst_Semantic::bracketed_expression_under_cursor_1()
QTextCursor tc(&textDocument);
tc.movePosition(QTextCursor::End);
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(LanguageFeatures::defaultFeatures());
const QString expression = expressionUnderCursor(tc);
QCOMPARE(expression, QString("i"));
@@ -564,7 +564,7 @@ void tst_Semantic::bracketed_expression_under_cursor_2()
QTextCursor tc(&textDocument);
tc.movePosition(QTextCursor::End);
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(LanguageFeatures::defaultFeatures());
const QString expression = expressionUnderCursor(tc);
QCOMPARE(expression, plainText);
@@ -580,7 +580,7 @@ void tst_Semantic::bracketed_expression_under_cursor_3()
QTextCursor tc(&textDocument);
tc.movePosition(QTextCursor::End);
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(LanguageFeatures::defaultFeatures());
const QString expression = expressionUnderCursor(tc);
QCOMPARE(expression, QString("[receiver message"));
@@ -596,7 +596,7 @@ void tst_Semantic::bracketed_expression_under_cursor_4()
QTextCursor tc(&textDocument);
tc.movePosition(QTextCursor::End);
- ExpressionUnderCursor expressionUnderCursor;
+ ExpressionUnderCursor expressionUnderCursor(LanguageFeatures::defaultFeatures());
const QString expression = expressionUnderCursor(tc);
QCOMPARE(expression, QString("i"));