diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2013-08-11 22:10:26 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-08-20 14:13:19 +0200 |
commit | 3256b7b2ef7073264af3197bdcd62f4f9fe92ea1 (patch) | |
tree | 08037f987683a69e8549e16427778f2d25669c21 /tests/auto/cplusplus/findusages/tst_findusages.cpp | |
parent | 9de44134c0bf0af7f04384581fdc3cb268e65a81 (diff) | |
download | qt-creator-3256b7b2ef7073264af3197bdcd62f4f9fe92ea1.tar.gz |
C++: fix matching type with using from other namespace
example code:
struct S { int s; };
namespace std
{
template <typename T>
struct shared_ptr
{
T* operator->();
};
}
namespace NS
{
using std::shared_ptr;
}
int main()
{
NS::shared_ptr<S> p;// for this shared_ptr
return 0;
}
Fixes:
* find usages
* follow symbol
* highlighting
* marking
Task-number: QTCREATORBUG-7978
Change-Id: I28994c960b87ddd400e1d7b860fca6c6683bbb5a
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'tests/auto/cplusplus/findusages/tst_findusages.cpp')
-rw-r--r-- | tests/auto/cplusplus/findusages/tst_findusages.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp index 9ab9d41af8..afc8ba35bb 100644 --- a/tests/auto/cplusplus/findusages/tst_findusages.cpp +++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp @@ -108,6 +108,8 @@ private Q_SLOTS: void using_insideNamespace(); void using_insideFunction(); void templatedFunction_QTCREATORBUG9749(); + + void usingInDifferentNamespace_QTCREATORBUG7978(); }; void tst_FindUsages::dump(const QList<Usage> &usages) const @@ -866,5 +868,44 @@ void tst_FindUsages::templatedFunction_QTCREATORBUG9749() QCOMPARE(findUsages.usages().size(), 2); } +void tst_FindUsages::usingInDifferentNamespace_QTCREATORBUG7978() +{ + const QByteArray src = "\n" + "struct S {};\n" + "namespace std\n" + "{\n" + " template <typename T> struct shared_ptr{};\n" + "}\n" + "namespace NS\n" + "{\n" + " using std::shared_ptr;\n" + "}\n" + "void fun()\n" + "{\n" + " NS::shared_ptr<S> p;\n" + "}\n" + ; + + Document::Ptr doc = Document::create("usingInDifferentNamespace_QTCREATORBUG7978"); + doc->setUtf8Source(src); + doc->parse(); + doc->check(); + + QVERIFY(doc->diagnosticMessages().isEmpty()); + QCOMPARE(doc->globalSymbolCount(), 4U); + + Snapshot snapshot; + snapshot.insert(doc); + + Namespace *ns = doc->globalSymbolAt(1)->asNamespace(); + QVERIFY(ns); + QCOMPARE(ns->memberCount(), 1U); + Template *templateClass = ns->memberAt(0)->asTemplate(); + + FindUsages findUsages(src, doc, snapshot); + findUsages(templateClass); + QCOMPARE(findUsages.usages().size(), 3); +} + QTEST_APPLESS_MAIN(tst_FindUsages) #include "tst_findusages.moc" |