class ArrayType {
/**
* Constructor for array of given type
*
* @param type type of array (may be an array itself)
*/
public ArrayType(Type type, int dimensions) {
super(Const.T_ARRAY, "<dummy>");
if ((dimensions < 1) || (dimensions > Const.MAX_BYTE)) {
throw new ClassGenException("Invalid number of dimensions: " + dimensions);
}
switch (type.getType()) {
case Const.T_ARRAY:
ArrayType array = (ArrayType) type;
this.dimensions = dimensions + array.dimensions;
basic_type = array.basic_type;
break;
case Const.T_VOID:
throw new ClassGenException("Invalid type: void[]");
default: // Basic type or reference
this.dimensions = dimensions;
basic_type = type;
break;
}
StringBuilder buf = new StringBuilder();
for (int i = 0; i < this.dimensions; i++) {
buf.append('[');
}
buf.append(basic_type.getSignature());
super.setSignature(buf.toString());
}
}