slcom/slangc/model/ParameterSet.sauce

79 lines
1.8 KiB
Plaintext
Raw Permalink Normal View History

package slangc.model;
import slang.data.List;
public class ParameterSet {
private MethodModel owner;
private List<ParameterModel> parameters = new List<ParameterModel>();
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;
}
}