diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index 29ccee449d1..92e78b12716 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -7466,9 +7466,14 @@ public class AST2TemplateTests extends AST2TestBase { ICPPAliasTemplateInstance AliasInt = assertionHelper.assertNonProblem("Alias intAlias;", "Alias", ICPPAliasTemplateInstance.class); - assertEquals("Alias", AliasInt.getName()); + assertEquals("Alias", AliasInt.getName()); assertEquals("NS", AliasInt.getQualifiedName()[0]); - assertEquals("Alias", AliasInt.getQualifiedName()[1]); + assertEquals("Alias", AliasInt.getQualifiedName()[1]); + IType aliasedType = AliasInt.getType(); + assertInstance(aliasedType, ICPPTemplateInstance.class); + ICPPTemplateArgument[] args = ((ICPPTemplateInstance) aliasedType).getTemplateArguments(); + assertEquals(1, args.length); + assertSameType(CommonCPPTypes.int_, args[0].getTypeValue()); ICPPNamespace namespaceNS = assertionHelper.assertNonProblem("using namespace NS;", "NS", ICPPNamespace.class); assertEquals(namespaceNS, AliasInt.getOwner()); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/CPPClassTemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/CPPClassTemplateTests.java index a33be5d155d..a055de08b4d 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/CPPClassTemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/CPPClassTemplateTests.java @@ -26,6 +26,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameterMap; @@ -433,7 +434,7 @@ public class CPPClassTemplateTests extends PDOMInlineCodeTestBase { assertDeclarationCount(pdom, "A", 1); IIndexFragmentBinding[] bindingA= pdom.findBindings(new char[][] {{'A'}}, IndexFilter.ALL_DECLARED, npm()); assertEquals(1, bindingA.length); - assertTrue(bindingA[0] instanceof ICPPAliasTemplate); + assertInstance(bindingA[0], ICPPAliasTemplate.class); ICPPAliasTemplate aliasA= (ICPPAliasTemplate) bindingA[0]; ICPPTemplateParameter[] aliasParameters= aliasA.getTemplateParameters(); assertEquals(1, aliasParameters.length); @@ -443,12 +444,16 @@ public class CPPClassTemplateTests extends PDOMInlineCodeTestBase { assertDeclarationCount(pdom, "aB", 1); assertDeclarationCount(pdom, "sB", 1); + IIndexFragmentBinding[] bindingB= pdom.findBindings(new char[][] {{'B'}}, IndexFilter.ALL_DECLARED, npm()); + assertEquals(1, bindingB.length); + assertInstance(bindingB[0], ICPPClassType.class); + IIndexFragmentBinding[] bindingVarSB= pdom.findBindings(new char[][] {"sB".toCharArray()}, IndexFilter.ALL, npm()); assertEquals(1, bindingVarSB.length); - assertTrue(bindingVarSB[0] instanceof ICPPVariable); + assertInstance(bindingVarSB[0], ICPPVariable.class); ICPPVariable variableSB = (ICPPVariable) bindingVarSB[0]; IType varSBType = variableSB.getType(); - assertTrue(varSBType instanceof ICPPClassSpecialization); + assertInstance(varSBType, ICPPClassSpecialization.class); ICPPClassSpecialization templateInstanceSB = (ICPPClassSpecialization) varSBType; IIndexFragmentBinding[] bindingVarAB= pdom.findBindings(new char[][] {"aB".toCharArray()}, IndexFilter.ALL, npm()); @@ -456,11 +461,16 @@ public class CPPClassTemplateTests extends PDOMInlineCodeTestBase { assertTrue(bindingVarAB[0] instanceof ICPPVariable); ICPPVariable variableAB = (ICPPVariable) bindingVarAB[0]; IType varABType = variableAB.getType(); - assertTrue(varABType instanceof ICPPAliasTemplateInstance); + assertInstance(varABType, ICPPAliasTemplateInstance.class); ICPPAliasTemplateInstance aliasInstanceAB = (ICPPAliasTemplateInstance) varABType; assertTrue(varABType.isSameType(templateInstanceSB)); assertTrue(aliasInstanceAB.getTemplateDefinition().isSameType(aliasA)); - assertEquals("A", aliasInstanceAB.getName()); + assertEquals("A", aliasInstanceAB.getName()); + IType aliasedType = aliasInstanceAB.getType(); + assertInstance(aliasedType, ICPPTemplateInstance.class); + ICPPTemplateArgument[] args = ((ICPPTemplateInstance) aliasedType).getTemplateArguments(); + assertEquals(1, args.length); + assertTrue(((ICPPClassType) bindingB[0]).isSameType(args[0].getTypeValue())); } // template class CT { 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 dd69a67f381..6b48e37cfce 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 @@ -890,11 +890,7 @@ public class CPPTemplates { IBinding owner, IASTNode point) { InstantiationContext context = createInstantiationContext(parameterMap, owner, point); IType instantiatedType = instantiateType(aliasedType, context); - StringBuilder buf= new StringBuilder(); - buf.append(aliasTemplate.getName()).append(ASTTypeUtil.getArgumentListString(args, false)); - char[] name = new char[buf.length()]; - buf.getChars(0, buf.length(), name, 0); - return new CPPAliasTemplateInstance(name, aliasTemplate, instantiatedType); + return new CPPAliasTemplateInstance(aliasTemplate.getNameCharArray(), aliasTemplate, instantiatedType); } static boolean isClassTemplate(ICPPASTTemplateId id) {