summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodecompletion.cpp
diff options
context:
space:
mode:
authorcon <qtc-committer@nokia.com>2009-10-08 19:05:40 +0200
committercon <qtc-committer@nokia.com>2009-10-08 19:05:40 +0200
commit9ec8bc897547a5176e75c7009f1989427df070da (patch)
treefff70c15e078da74a0b02cece087885bdbfad9c2 /src/plugins/cpptools/cppcodecompletion.cpp
parent3b1070130893934a03e6af91331ef741050f821c (diff)
parent22ab8d5662590a2150d6c4ba6472c201f5914181 (diff)
downloadqt-creator-9ec8bc897547a5176e75c7009f1989427df070da.tar.gz
Merge commit 'origin/1.3'
Diffstat (limited to 'src/plugins/cpptools/cppcodecompletion.cpp')
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp42
1 files changed, 24 insertions, 18 deletions
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index aa071b7359..0a30af6f78 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -640,6 +640,14 @@ static int startOfOperator(TextEditor::ITextEditable *editor,
}
}
+ if (k == T_COMMA) {
+ ExpressionUnderCursor expressionUnderCursor;
+ if (expressionUnderCursor.startOfFunctionCall(tc) == -1) {
+ k = T_EOF_SYMBOL;
+ start = pos;
+ }
+ }
+
static CPlusPlus::TokenUnderCursor tokenUnderCursor;
const SimpleToken tk = tokenUnderCursor(tc);
@@ -682,21 +690,16 @@ static int startOfOperator(TextEditor::ITextEditable *editor,
}
// Check for include preprocessor directive
else if (k == T_STRING_LITERAL || k == T_ANGLE_STRING_LITERAL || k == T_SLASH) {
- const QList<SimpleToken> &tokens = tokenUnderCursor.tokens();
- int i = 0;
bool include = false;
- for (; i < tokens.size(); ++i) {
- const SimpleToken &token = tokens.at(i);
- if (token.position() == tk.position()) {
- if (i == 0) // no token on the left, but might be on a previous line
- break;
- const SimpleToken &previousToken = tokens.at(i - 1);
- if (previousToken.is(T_IDENTIFIER)) {
- if (previousToken.text() == QLatin1String("include") ||
- previousToken.text() == QLatin1String("import")) {
- include = true;
- break;
- }
+ const QList<SimpleToken> &tokens = tokenUnderCursor.tokens();
+ if (tokens.size() >= 3) {
+ if (tokens.at(0).is(T_POUND) && tokens.at(1).is(T_IDENTIFIER) && (tokens.at(2).is(T_STRING_LITERAL) ||
+ tokens.at(2).is(T_ANGLE_STRING_LITERAL))) {
+ QStringRef directive = tokens.at(1).text();
+ if (directive == QLatin1String("include") ||
+ directive == QLatin1String("include_next") ||
+ directive == QLatin1String("import")) {
+ include = true;
}
}
}
@@ -783,11 +786,14 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
if (m_completionOperator == T_COMMA) {
tc.setPosition(endOfExpression);
const int start = expressionUnderCursor.startOfFunctionCall(tc);
- if (start != -1) {
- endOfExpression = start;
- m_startPosition = start + 1;
- m_completionOperator = T_LPAREN;
+ if (start == -1) {
+ m_completionOperator = T_EOF_SYMBOL;
+ return -1;
}
+
+ endOfExpression = start;
+ m_startPosition = start + 1;
+ m_completionOperator = T_LPAREN;
}
QString expression;