From 3cf930056601fadf3cf8ec9f8ab84270bd580cb8 Mon Sep 17 00:00:00 2001 From: Michi Date: Tue, 3 Feb 2015 17:12:21 +0100 Subject: [PATCH] Bug 459047 - [AccessContext] namingClass not found for nested class specializations if a binding is a member of a ClassInstance (owner) we should not try to find a corresponding class template (target). Change-Id: Ic865161f137ecb2a300afd03761cc26ee758b38b Signed-off-by: Michi --- .../dom/parser/cpp/semantics/AccessContext.java | 6 +++--- .../text/contentassist2/CompletionTests.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/AccessContext.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/AccessContext.java index 8701f8095e2..ecfe772042c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/AccessContext.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/AccessContext.java @@ -301,12 +301,12 @@ public class AccessContext { } if (maxdepth > 0) { for (ICPPBase cppBase : ClassTypeHelper.getBases(derived, point)) { - IBinding base= cppBase.getBaseClass(); - if (base instanceof ICPPSpecialization) { + IBinding base = cppBase.getBaseClass(); + if (!(target instanceof ICPPSpecialization) && base instanceof ICPPSpecialization) { base = ((ICPPSpecialization) base).getSpecializedBinding(); } if (base instanceof ICPPClassType) { - ICPPClassType tbase= (ICPPClassType) base; + ICPPClassType tbase = (ICPPClassType) base; if (tbase.isSameType(target)) { return true; } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java index c1bfd707d87..bdfa3804af8 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java @@ -1474,6 +1474,21 @@ public class CompletionTests extends AbstractContentAssistTest { assertContentAssistResults(fCursorOffset, expected, true, DISPLAY); } + // struct Wrapper { + // template + // struct A { + // static void test(); + // }; + // + // struct B : A { + // void run(){ te/*cursor*/ } + // }; + // }; + public void testTemplateInstanceMemberAccess_459047() throws Exception { + final String[] expected = { "test(void)" }; + assertContentAssistResults(fCursorOffset, expected, true, ID); + } + // void foo() { Specialization