forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/2.6'
Conflicts: qtcreator.pri qtcreator.qbp src/libs/ssh/sshconnection.cpp Change-Id: I2946cbec1b5159eef9e47949860b28fba1e51529
This commit is contained in:
@@ -228,6 +228,78 @@ void CppToolsPlugin::test_completion_template_1()
|
||||
QVERIFY(!completions.contains("func"));
|
||||
}
|
||||
|
||||
void CppToolsPlugin::test_completion_template_2()
|
||||
{
|
||||
TestData data;
|
||||
data.srcText = "\n"
|
||||
"template <class T>\n"
|
||||
"struct List\n"
|
||||
"{\n"
|
||||
" T &at(int);\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"struct Tupple { int a; int b; };\n"
|
||||
"\n"
|
||||
"void func() {\n"
|
||||
" List<Tupple> l;\n"
|
||||
" @\n"
|
||||
" // padding so we get the scope right\n"
|
||||
"}";
|
||||
|
||||
setup(&data);
|
||||
|
||||
Utils::ChangeSet change;
|
||||
QString txt = QLatin1String("l.at(0).");
|
||||
change.insert(data.pos, txt);
|
||||
QTextCursor cursor(data.doc);
|
||||
change.apply(&cursor);
|
||||
data.pos += txt.length();
|
||||
|
||||
QStringList completions = getCompletions(data);
|
||||
|
||||
QCOMPARE(completions.size(), 3);
|
||||
QVERIFY(completions.contains("Tupple"));
|
||||
QVERIFY(completions.contains("a"));
|
||||
QVERIFY(completions.contains("b"));
|
||||
}
|
||||
|
||||
void CppToolsPlugin::test_completion_template_3()
|
||||
{
|
||||
TestData data;
|
||||
data.srcText = "\n"
|
||||
"template <class T>\n"
|
||||
"struct List\n"
|
||||
"{\n"
|
||||
" T t;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"struct Tupple { int a; int b; };\n"
|
||||
"\n"
|
||||
"void func() {\n"
|
||||
" List<Tupple> l;\n"
|
||||
" @\n"
|
||||
" // padding so we get the scope right\n"
|
||||
"}";
|
||||
|
||||
setup(&data);
|
||||
|
||||
Utils::ChangeSet change;
|
||||
QString txt = QLatin1String("l.t.");
|
||||
change.insert(data.pos, txt);
|
||||
QTextCursor cursor(data.doc);
|
||||
change.apply(&cursor);
|
||||
data.pos += txt.length();
|
||||
|
||||
QStringList completions = getCompletions(data);
|
||||
|
||||
QCOMPARE(completions.size(), 3);
|
||||
QVERIFY(completions.contains("Tupple"));
|
||||
QVERIFY(completions.contains("a"));
|
||||
QVERIFY(completions.contains("b"));
|
||||
QVERIFY(completions.contains("a"));
|
||||
QVERIFY(completions.contains("b"));
|
||||
}
|
||||
|
||||
void CppToolsPlugin::test_completion()
|
||||
{
|
||||
QFETCH(QByteArray, code);
|
||||
|
||||
@@ -102,7 +102,9 @@ public:
|
||||
, m_completionOperator(T_EOF_SYMBOL)
|
||||
, m_replaceDotForArrow(false)
|
||||
, m_typeOfExpression(new TypeOfExpression)
|
||||
{}
|
||||
{
|
||||
m_typeOfExpression->setExpandTemplates(true);
|
||||
}
|
||||
|
||||
virtual bool isSortable(const QString &prefix) const;
|
||||
virtual IAssistProposalItem *proposalItem(int index) const;
|
||||
@@ -831,7 +833,8 @@ int CppCompletionAssistProcessor::startOfOperator(int pos,
|
||||
else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT) ||
|
||||
(tk.isLiteral() && (*kind != T_STRING_LITERAL
|
||||
&& *kind != T_ANGLE_STRING_LITERAL
|
||||
&& *kind != T_SLASH))) {
|
||||
&& *kind != T_SLASH
|
||||
&& *kind != T_DOT))) {
|
||||
*kind = T_EOF_SYMBOL;
|
||||
start = pos;
|
||||
}
|
||||
@@ -858,7 +861,8 @@ int CppCompletionAssistProcessor::startOfOperator(int pos,
|
||||
}
|
||||
}
|
||||
// Check for include preprocessor directive
|
||||
else if (*kind == T_STRING_LITERAL || *kind == T_ANGLE_STRING_LITERAL || *kind == T_SLASH) {
|
||||
else if (*kind == T_STRING_LITERAL || *kind == T_ANGLE_STRING_LITERAL|| *kind == T_SLASH
|
||||
|| (*kind == T_DOT && (tk.is(T_STRING_LITERAL) || tk.is(T_ANGLE_STRING_LITERAL)))) {
|
||||
bool include = false;
|
||||
if (tokens.size() >= 3) {
|
||||
if (tokens.at(0).is(T_POUND) && tokens.at(1).is(T_IDENTIFIER) && (tokens.at(2).is(T_STRING_LITERAL) ||
|
||||
@@ -877,6 +881,14 @@ int CppCompletionAssistProcessor::startOfOperator(int pos,
|
||||
if (!include) {
|
||||
*kind = T_EOF_SYMBOL;
|
||||
start = pos;
|
||||
} else {
|
||||
if (*kind == T_DOT) {
|
||||
start = findStartOfName(start);
|
||||
const QChar ch4 = start > -1 ? m_interface->characterAt(start - 1) : QChar();
|
||||
const QChar ch5 = start > 0 ? m_interface->characterAt(start - 2) : QChar();
|
||||
const QChar ch6 = start > 1 ? m_interface->characterAt(start - 3) : QChar();
|
||||
start = start - CppCompletionAssistProvider::activationSequenceChar(ch4, ch5, ch6, kind, wantFunctionCall);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -943,7 +955,7 @@ int CppCompletionAssistProcessor::startCompletionHelper()
|
||||
QTextCursor c(m_interface->textDocument());
|
||||
c.setPosition(endOfExpression);
|
||||
if (completeInclude(c))
|
||||
m_startPosition = startOfName;
|
||||
m_startPosition = endOfExpression + 1;
|
||||
return m_startPosition;
|
||||
}
|
||||
|
||||
|
||||
@@ -93,6 +93,8 @@ private slots:
|
||||
void test_completion_forward_declarations_present();
|
||||
void test_completion_basic_1();
|
||||
void test_completion_template_1();
|
||||
void test_completion_template_2();
|
||||
void test_completion_template_3();
|
||||
void test_completion_template_as_base();
|
||||
void test_completion_template_as_base_data();
|
||||
void test_completion_use_global_identifier_as_base_class();
|
||||
|
||||
Reference in New Issue
Block a user