From 151a5d30c519a4a185b2008c3fd1ea1f35022253 Mon Sep 17 00:00:00 2001 From: Michi Date: Thu, 19 Feb 2015 13:24:29 +0100 Subject: [PATCH] Bug 460341 - Nested Template Specialization not properly resolved Change-Id: I10564878dc0daacad58d164941d73749bf77e787 Signed-off-by: Michi --- .../parser/cpp/semantics/CPPTemplates.java | 4 ++++ .../text/contentassist2/CompletionTests.java | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index 85ff8210ddd..7db462451aa 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -713,6 +713,10 @@ public class CPPTemplates { IASTName templateName = id.getTemplateName(); IBinding template = templateName.resolvePreBinding(); + while (template instanceof CPPTypedefSpecialization) { + template = ((CPPTypedefSpecialization) template).getSpecializedBinding(); + } + // Alias template. if (template instanceof ICPPAliasTemplate) { ICPPAliasTemplate aliasTemplate = (ICPPAliasTemplate) template; 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 017b0021eec..ca392da5c0e 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 @@ -1506,6 +1506,25 @@ public class CompletionTests extends AbstractContentAssistTest { assertContentAssistResults(fCursorOffset, expected, true, ID); } + // template + // struct A { + // template + // struct AA { + // template + // using Type = TTT; + // }; + // }; + // + // struct B{ + // static int i; + // }; + // + // A<0>::AA<0>::Type::/*cursor*/ + public void testNestedTemplateSpecialization_460341() throws Exception { + final String[] expected = { "i" }; + assertContentAssistResults(fCursorOffset, expected, true, ID); + } + // void foo() { Specialization