79 lines
1.8 KiB
Plaintext
79 lines
1.8 KiB
Plaintext
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;
|
|
}
|
|
}
|