Commit 5d3c0701 authored by Przemyslaw Gorszkowski's avatar Przemyslaw Gorszkowski Committed by Nikolai Kosjar

C++: Do not set binding block as instantiationOrigin

The binding in a block should not be used as an instantiationOrigin,
because it will be deleted if it does not contain any blocks or
namespaces or classes or enums.
Instead of that we should look for first enclosing class or namespace.

Task-number: QTCREATORBUG-11424
Change-Id: I0fc6e935495478f71372b0fe6f611887f45b2eda
Reviewed-by: default avatarErik Verbruggen <erik.verbruggen@digia.com>
parent a7d33406
......@@ -1069,6 +1069,10 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
instantiation->_name = templId;
#endif // DEBUG_LOOKUP
instantiation->_templateId = templId;
while (!origin->_symbols.isEmpty() && origin->_symbols[0]->isBlock())
origin = origin->parent();
instantiation->_instantiationOrigin = origin;
// The instantiation should have all symbols, enums, and usings from the reference.
......
......@@ -2190,6 +2190,22 @@ void CppToolsPlugin::test_completion_data()
"}\n"
) << _("mem") << (QStringList()
<< QLatin1String("member"));
QTest::newRow("no_binding_block_as_instantiationOrigin_QTCREATORBUG-11424") << _(
"template <typename T>\n"
"class QVector\n"
"{\n"
"public:\n"
" inline const_iterator constBegin() const;\n"
"};\n"
"\n"
"typedef struct { double value; } V;\n"
"\n"
"double getValue(const QVector<V>& d) const {\n"
" typedef QVector<V>::ConstIterator Iter;\n"
" double val = @\n"
"}\n"
) << _("d.constBegin()->") << (QStringList());
}
void CppToolsPlugin::test_completion_member_access_operator()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment