summaryrefslogtreecommitdiff
path: root/tests/auto/cplusplus/findusages/tst_findusages.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2012-11-19 11:20:11 +0100
committerEike Ziller <eike.ziller@digia.com>2012-11-22 16:39:47 +0100
commitcab6ed5e5133c1adf7f796254d7db5736215c217 (patch)
treea1573f0e1a76a02070d9846f7db18b8b10629e9e /tests/auto/cplusplus/findusages/tst_findusages.cpp
parent56966f3712b9ec2d790b7185d230d3193f261a62 (diff)
downloadqt-creator-cab6ed5e5133c1adf7f796254d7db5736215c217.tar.gz
Fix: no scope walking for name resolving after MemAccess operator
Change-Id: Ic093079fa65d8d749911fd9f5b0f629e9fe68a1e Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com> Conflicts: tests/auto/cplusplus/findusages/tst_findusages.cpp Change-Id: I87d305e2d68582aa00b92f9599368615cd76ec74 Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Diffstat (limited to 'tests/auto/cplusplus/findusages/tst_findusages.cpp')
-rw-r--r--tests/auto/cplusplus/findusages/tst_findusages.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp
index f9b82adadf..dc1f765ee7 100644
--- a/tests/auto/cplusplus/findusages/tst_findusages.cpp
+++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp
@@ -77,6 +77,8 @@ class tst_FindUsages: public QObject
private Q_SLOTS:
void inlineMethod();
+ void shadowedNames_1();
+ void shadowedNames_2();
// Qt keywords
void qproperty_1();
@@ -123,6 +125,69 @@ void tst_FindUsages::inlineMethod()
QCOMPARE(findUsages.references().size(), 2);
}
+void tst_FindUsages::shadowedNames_1()
+{
+ const QByteArray src = "\n"
+ "int a();\n"
+ "struct X{ int a(); };\n"
+ "int X::a() {}\n"
+ "void f(X x) { x.a(); }\n"
+ "void g() { a(); }\n"
+ ;
+
+ Document::Ptr doc = Document::create("shadowedNames_1");
+ doc->setUtf8Source(src);
+ doc->parse();
+ doc->check();
+
+ QVERIFY(doc->diagnosticMessages().isEmpty());
+ QCOMPARE(doc->globalSymbolCount(), 5U);
+
+ Snapshot snapshot;
+ snapshot.insert(doc);
+
+ Declaration *d = doc->globalSymbolAt(0)->asDeclaration();
+ QVERIFY(d);
+ QCOMPARE(d->name()->identifier()->chars(), "a");
+
+ FindUsages findUsages(src, doc, snapshot);
+ findUsages(d);
+ QCOMPARE(findUsages.usages().size(), 2);
+}
+
+void tst_FindUsages::shadowedNames_2()
+{
+ const QByteArray src = "\n"
+ "int a();\n"
+ "struct X{ int a(); };\n"
+ "int X::a() {}\n"
+ "void f(X x) { x.a(); }\n"
+ "void g() { a(); }\n";
+
+ Document::Ptr doc = Document::create("shadowedNames_2");
+ doc->setUtf8Source(src);
+ doc->parse();
+ doc->check();
+
+ QVERIFY(doc->diagnosticMessages().isEmpty());
+ QCOMPARE(doc->globalSymbolCount(), 5U);
+
+ Snapshot snapshot;
+ snapshot.insert(doc);
+
+ Class *c = doc->globalSymbolAt(1)->asClass();
+ QVERIFY(c);
+ QCOMPARE(c->name()->identifier()->chars(), "X");
+ QCOMPARE(c->memberCount(), 1U);
+ Declaration *d = c->memberAt(0)->asDeclaration();
+ QVERIFY(d);
+ QCOMPARE(d->name()->identifier()->chars(), "a");
+
+ FindUsages findUsages(src, doc, snapshot);
+ findUsages(d);
+ QCOMPARE(findUsages.usages().size(), 3);
+}
+
#if 0
@interface Clazz {} +(void)method:(int)arg; @end
@implementation Clazz +(void)method:(int)arg {