diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/StructuralTemplateTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/StructuralTemplateTests.java index 137f293557f..d41d9c6ab06 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/StructuralTemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/StructuralTemplateTests.java @@ -148,7 +148,7 @@ public class StructuralTemplateTests extends ITemplateTests { //"nonVector" {"T"}, //"ArrayOverlay" - {"X","Y","size"}, // should be {"X","Y","int=16"}, + {"X","Y","int=16"}, //"TemplateContainer::fum" {"Bar"}, //"TemplateParameter::scrum" @@ -194,7 +194,7 @@ public class StructuralTemplateTests extends ITemplateTests { String[] myExpectedValues = { "Map", "nonVector", - "ArrayOverlay", // should be "ArrayOverlay", + "ArrayOverlay", "fum(int) : void", "scrum(void) : void", // TODO: deduce the rules of () versus (void), compare below. // TODO: shouldn't signature indicate const function as well? diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/ASTUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/ASTUtil.java index 4671368f5e8..17916a96141 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/ASTUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/util/ASTUtil.java @@ -42,36 +42,39 @@ public class ASTUtil { while (templateParams.hasNext()){ StringBuffer paramType = new StringBuffer(); IASTTemplateParameter parameter = (IASTTemplateParameter)templateParams.next(); - if((parameter.getIdentifier() != null) && (parameter.getIdentifier().length() != 0)) - { - paramList.add(parameter.getIdentifier().toString()); - } - else - { - IASTTemplateParameter.ParamKind kind = parameter.getTemplateParameterKind(); - if(kind == IASTTemplateParameter.ParamKind.CLASS){ + IASTTemplateParameter.ParamKind kind = parameter.getTemplateParameterKind(); + if(kind == IASTTemplateParameter.ParamKind.CLASS){ + if((parameter.getIdentifier() != null) && (parameter.getIdentifier().length() != 0)) + { + paramType.append(parameter.getIdentifier().toString()); + }else { paramType.append("class"); //$NON-NLS-1$ } - if(kind == IASTTemplateParameter.ParamKind.TYPENAME){ + } + if(kind == IASTTemplateParameter.ParamKind.TYPENAME){ + if((parameter.getIdentifier() != null) && (parameter.getIdentifier().length() != 0)) + { + paramType.append(parameter.getIdentifier().toString()); + }else { paramType.append("typename"); //$NON-NLS-1$ } - if(kind == IASTTemplateParameter.ParamKind.TEMPLATE_LIST){ - paramType.append("template<"); //$NON-NLS-1$ - String[] subParams = getTemplateParameters(parameter.getTemplateParameters()); - int p = 0; - if ( subParams.length > 0) - paramType.append(subParams[p++]); - while( p < subParams.length){ - paramType.append(", "); //$NON-NLS-1$ - paramType.append(subParams[p++]); - } - paramType.append(">"); //$NON-NLS-1$ + } + if(kind == IASTTemplateParameter.ParamKind.TEMPLATE_LIST){ + paramType.append("template<"); //$NON-NLS-1$ + String[] subParams = getTemplateParameters(parameter.getTemplateParameters()); + int p = 0; + if ( subParams.length > 0) + paramType.append(subParams[p++]); + while( p < subParams.length){ + paramType.append(", "); //$NON-NLS-1$ + paramType.append(subParams[p++]); } - if(kind == IASTTemplateParameter.ParamKind.PARAMETER){ - paramType.append(getType(parameter.getParameterDeclaration())); - } - paramList.add(paramType.toString()); - } // end else + paramType.append(">"); //$NON-NLS-1$ + } + if(kind == IASTTemplateParameter.ParamKind.PARAMETER){ + paramType.append(getType(parameter.getParameterDeclaration())); + } + paramList.add(paramType.toString()); }// end while String[] parameterTypes = new String[paramList.size()]; for(int j=0; j