package ast.functionDef; import java.util.Iterator; import java.util.LinkedList; import ast.ASTNode; import ast.expressions.Identifier; import ast.walking.ASTNodeVisitor; public class ParameterList extends ASTNode { // TODO: we don't want to give back a reference to the list, // we need to provide iterators for type and name public LinkedList<Parameter> getParameters() { return parameters; } public void addParameter(Parameter aParam) { parameters.add(aParam); this.addChild(aParam); } public Identifier[] getNames() { Identifier retNames[] = new Identifier[parameters.size()]; for (int i = 0; i < parameters.size(); i++) { retNames[i] = parameters.get(i).name; } return retNames; } public String[] getNameStrings() { String retStrings[] = new String[parameters.size()]; for (int i = 0; i < parameters.size(); i++) { retStrings[i] = parameters.get(i).name.getEscapedCodeStr(); } return retStrings; } public ParameterType[] getTypes() { ParameterType retTypes[] = new ParameterType[parameters.size()]; for (int i = 0; i < parameters.size(); i++) { retTypes[i] = parameters.get(i).type; } return retTypes; } public String[] getTypeStrings() { String retStrings[] = new String[parameters.size()]; for (int i = 0; i < parameters.size(); i++) { retStrings[i] = parameters.get(i).type.getEscapedCodeStr(); } return retStrings; } private LinkedList<Parameter> parameters = new LinkedList<Parameter>(); @Override public String getEscapedCodeStr() { if (codeStr != null) return codeStr; if (parameters.size() == 0) { codeStr = ""; return codeStr; } Iterator<Parameter> i = parameters.iterator(); StringBuilder s = new StringBuilder(); for (; i.hasNext();) { Parameter param = i.next(); s.append(param.getEscapedCodeStr() + " , "); } codeStr = s.toString(); codeStr = codeStr.substring(0, s.length() - 3); return codeStr; } @Override public void accept(ASTNodeVisitor visitor) { visitor.visit(this); } }