}
// Parameters
eat("(");
List paramList = new ArrayList();
while(!maybeEat(")")) {
FieldTypeSignature fsig = parseFieldTypeSignature(true);
if (fsig != null) {
paramList.add(fsig);
} else {
paramList.add(new Signature.BaseTypeSignature(eatIdentifier()));
}
}
params = new TypeSignature[paramList.size()];
paramList.toArray(params);
// return type
returnType = parseFieldTypeSignature(true);
if (returnType == null) returnType = new Signature.BaseTypeSignature(eatIdentifier());
// throws
List throwsList = new ArrayList();
while (maybeEat("^")) {
FieldTypeSignature fsig = parseFieldTypeSignature(false);
throwsList.add(fsig);
}
throwsSigs = new FieldTypeSignature[throwsList.size()];
throwsList.toArray(throwsSigs);
return new Signature.MethodTypeSignature(formals,params,returnType,throwsSigs);