From e098f7ccf629e2e704a6a50653e4afdf0f4bc35b Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Sat, 27 Dec 2008 18:39:00 +0000 Subject: [PATCH] Bug 259683. --- .../index/tests/IndexCPPBindingResolutionBugs.java | 12 ++++++++++++ .../internal/core/dom/parser/cpp/CPPClassType.java | 7 +++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java index 7d245a61280..6f4f78fa8a0 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java @@ -1048,6 +1048,18 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas getBindingFromASTName("func(q", 4, ICPPFunction.class); } + // class A { + // class B; + // }; + // class A::B { + // void m(); + // }; + + // void A::B::m() {} + public void testNestedClasses_Bug259683() throws Exception { + getBindingFromASTName("A::B::m", 7, ICPPMethod.class); + } + private void assertBindings(String[] expected, ICPPBase[] bases) throws DOMException { IBinding[] bindings= new IBinding[bases.length]; for (int i = 0; i < bindings.length; i++) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java index c7f0a419b31..b313c775013 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java @@ -177,7 +177,7 @@ public class CPPClassType extends PlatformObject implements ICPPInternalClassTyp public CPPClassType(IASTName name, IBinding indexBinding) { if (name instanceof ICPPASTQualifiedName) { - IASTName[] ns = ((ICPPASTQualifiedName)name).getNames(); + IASTName[] ns = ((ICPPASTQualifiedName) name).getNames(); name = ns[ns.length - 1]; } IASTNode parent = name.getParent(); @@ -430,7 +430,10 @@ public class CPPClassType extends PlatformObject implements ICPPInternalClassTyp } public IBinding getOwner() throws DOMException { - return CPPVisitor.findDeclarationOwner(definition != null ? definition : declarations[0], true); + if (definition != null) { + return CPPVisitor.findNameOwner(definition, true); + } + return CPPVisitor.findDeclarationOwner(declarations[0], true); } public boolean isAnonymous() throws DOMException {