From e6ae67c516e8858c3933d4bd63b91b347e186e41 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Tue, 14 May 2013 17:28:22 -0700 Subject: [PATCH] Fixed a bug in IBinding.getOwner method. --- .../core/parser/tests/ast2/AST2CPPTests.java | 33 ++++++++++++++++--- .../core/parser/tests/ast2/AST2TestBase.java | 4 --- .../dom/parser/cpp/semantics/CPPVisitor.java | 2 +- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 80007ca7f36..37e817e0de6 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -7628,7 +7628,7 @@ public class AST2CPPTests extends AST2TestBase { // C c= *new C(); // foo(c); // } - public void testUserdefinedConversion_222444a() throws Exception { + public void testUserDefinedConversion_222444a() throws Exception { final String code = getAboveComment(); parseAndCheckBindings(code, CPP); } @@ -7656,7 +7656,7 @@ public class AST2CPPTests extends AST2TestBase { // x2(f); // x3(f); // } - public void testUserdefinedConversion_222444b() throws Exception { + public void testUserDefinedConversion_222444b() throws Exception { final String code = getAboveComment(); parseAndCheckBindings(code, CPP); } @@ -7677,7 +7677,7 @@ public class AST2CPPTests extends AST2TestBase { // foo(c); // foo(cc); // } - public void testUserdefinedConversion_222444c() throws Exception { + public void testUserDefinedConversion_222444c() throws Exception { final String code = getAboveComment(); BindingAssertionHelper bh= new BindingAssertionHelper(code, true); bh.assertNonProblem("foo(c);", 3); @@ -9308,8 +9308,33 @@ public class AST2CPPTests extends AST2TestBase { parseAndCheckBindings(); } + // namespace ns { // class A { - // A(int a = f()); // problem on f + // void m() { + // int a; + // extern int b; + // void f(); + // } + // typedef int x; + // int y; + // }; + // } + public void testOwner() throws Exception { + BindingAssertionHelper bh = getAssertionHelper(); + ICPPBinding ns = bh.assertNonProblemOnFirstIdentifier("ns"); + ICPPBinding A = bh.assertNonProblemOnFirstIdentifier("A"); + assertEquals(ns, A.getOwner()); + IBinding m = bh.assertNonProblemOnFirstIdentifier("m()"); + assertEquals(A, m.getOwner()); + assertEquals(A, bh.assertNonProblemOnFirstIdentifier("x;").getOwner()); + assertEquals(A, bh.assertNonProblemOnFirstIdentifier("y;").getOwner()); + assertEquals(m, bh.assertNonProblemOnFirstIdentifier("a;").getOwner()); + assertNull(bh.assertNonProblemOnFirstIdentifier("b;").getOwner()); + assertNull(bh.assertNonProblemOnFirstIdentifier("f()").getOwner()); + } + + // class A { + // A(int a = f()); // static int f(); // }; public void testFwdLookupForDefaultArgument() throws Exception { diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TestBase.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TestBase.java index a2f8eb63fd4..b19ae18797a 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TestBase.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TestBase.java @@ -608,10 +608,6 @@ public class AST2TestBase extends BaseTestCase { return assertNonProblem(section, getIdentifierLength(section), cs); } - public IBinding assertNonProblemOnFirstIdentifier(String section) { - return assertNonProblem(section, getIdentifierLength(section), IBinding.class); - } - public void assertNoName(String section, int len) { IASTName name= findName(section, len); if (name != null) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index 85457a2568c..af6cd8debcb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -2578,7 +2578,7 @@ public class CPPVisitor extends ASTQueries { for (; node != null; node= node.getParent()) { if (node instanceof IASTFunctionDefinition) { if (!allowFunction) - continue; + return null; IASTDeclarator dtor= findInnermostDeclarator(((IASTFunctionDefinition) node).getDeclarator()); if (dtor != null) {