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 75dfb69da5d..30e8212becc 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 @@ -1084,6 +1084,26 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas getBindingFromASTName("A::B::m", 7, ICPPMethod.class); } + // namespace ns { + // struct S { + // int a; + // }; + // } + // class A { + // public: + // template operator T*(){return 0;}; + // }; + + // namespace ns { + // void bla() { + // A a; + // a.operator S *(); + // } + // } + public void testLookupScopeForConversionNames_267221() throws Exception { + getBindingFromASTName("operator S *", 12, 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++) { @@ -1116,34 +1136,4 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas buf.append('}'); return buf.toString(); } - - // namespace ns { - // struct S { - // int a; - // }; - // } - // class A { - // public: - // template operator T*(){return 0;}; - // }; - - // namespace ns { - // void bla() { - // A a; - // a.operator S *(); - // } - // } - public void testLookupScopeForConversionNames_267221() throws Exception { - getBindingFromASTName("operator S *", 12, ICPPMethod.class); - } - - // namespace ns1 { namespace ns2 { - // class A {}; - // }} - // using namespace ns1::ns2; - - // A a; - public void _testTwoLevelUsingDirective_269727() throws Exception { - getBindingFromASTName("A a", 1, ICPPClassType.class); - } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java index f33442a7c97..d29962df958 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java @@ -1346,6 +1346,17 @@ public abstract class IndexCPPBindingResolutionTest extends IndexBindingResoluti checkValue(e.getValue(), 5); } + // namespace ns1 { namespace ns2 { + // class A {}; + // }} + // using namespace ns1::ns2; + + // #include "header.h" + // A a; + public void testUsingDirectiveWithQualifiedName_269727() throws Exception { + getBindingFromASTName("A a", 1, ICPPClassType.class); + } + private void checkValue(IValue initialValue, int i) { assertNotNull(initialValue); final Long numericalValue = initialValue.numericalValue(); @@ -1438,8 +1449,8 @@ public abstract class IndexCPPBindingResolutionTest extends IndexBindingResoluti } assertEquals(expectedEnumerators, actualEnumerators); } - /** - * + + /** * @param binding * @param cqn * @param qn may be null diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index 4c9d7822d3a..afdd44a0af7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -866,6 +866,10 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { } } } else if (parentNode instanceof ICPPASTUsingDirective) { + IASTNode parent= name.getParent(); + if (parent instanceof ICPPASTQualifiedName) { + name = (IASTName) parent; + } IScope container= CPPVisitor.getContainingScope(name); try { boolean doit= false;