package slangc.model; import slang.data.List; public class ParameterSet { private MethodModel owner; private List parameters = new List(); public ParameterSet(MethodModel owner) { this.owner = owner; } public MethodModel getOwner() { return owner; } public int countParameters() { return parameters.count(); } public int countNonVarargParameters() { if (isVarargs()) { return parameters.count() - 1; } else { return parameters.count(); } } public ParameterModel getVarargsParameter() { if (isVarargs()) { return parameters.get(parameters.count() - 1); } else { throw new Error("There is no varargs parameter here!"); } } public TypeModel getVarargsElementType() { return ((ArrayTypeModel) getVarargsParameter().getStorageType()).getElementType(); } public boolean isVarargs() { return parameters.count() > 0 && parameters.get(parameters.count() - 1).isVariableArguments(); } public TypeModel getParameterType(int i, boolean unpackVarargs) { if (unpackVarargs && isVarargs() && i >= countNonVarargParameters()) { return getVarargsElementType(); } else { return parameters.get(i).getStorageType(); } } public ParameterModel getParameter(int i) { return parameters.get(i); } public void addParameter(ParameterModel p) { parameters.append(p); } public boolean hasParameter(String name) { for (int i = 0; i < parameters.count(); i++) { if (parameters.get(i).getName().equals(name)) { return true; } } return false; } public ParameterModel getParameter(String name) { for (int i = 0; i < parameters.count(); i++) { if (parameters.get(i).getName().equals(name)) { return parameters.get(i); } } return null; } }