91 lines
2.0 KiB
Plaintext
91 lines
2.0 KiB
Plaintext
package slangc.model;
|
|
|
|
import slangc.api.Reporter;
|
|
|
|
public class ArrayTypeModel extends SyntheticTypeModel {
|
|
private TypeModel target;
|
|
|
|
public ArrayTypeModel(TypeModel target) {
|
|
super(target.getPackage(), "[]", TypeLevel.ARRAY, target);
|
|
this.target = target;
|
|
}
|
|
|
|
@Override
|
|
public TypeType getTypeType() {
|
|
return TypeType.ARRAY;
|
|
}
|
|
|
|
@Override
|
|
public int expand() {
|
|
/*
|
|
if (existsAtRuntime() && target == null) {
|
|
target = targetPackage.getType(targetName);
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}*/
|
|
/*if (target == null) {
|
|
return 0;
|
|
} else {
|
|
return target.expand();
|
|
}*/
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public int resolveTypes() {
|
|
//System.out.println("TODO: resolveTypes in " + this.getClass().getName());
|
|
return expand();
|
|
}
|
|
|
|
@Override
|
|
public void dump(Reporter reporter, String indent, String incr) {
|
|
super.dump(reporter, indent, incr);
|
|
reporter.note("DUMP", indent + incr + "[element type " + target + "]");
|
|
}
|
|
|
|
@Override
|
|
public TypeModel simplify() {
|
|
return this;
|
|
}
|
|
|
|
public TypeModel getElementType() {
|
|
return target;
|
|
}
|
|
|
|
@Override
|
|
public boolean isObjectType() {
|
|
// Arrays are generally treated as objects
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean inherits(TypeModel otherType) {
|
|
if (otherType == getPackage().getSystem().getDefaultBaseType()) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public MethodModel[] getMethods(String name, boolean includeBase) {
|
|
if (includeBase) {
|
|
return getPackage().getSystem().getDefaultBaseType().getMethods(name, includeBase);
|
|
} else {
|
|
return new MethodModel[0];
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean isAssignableFrom(TypeModel otherType) {
|
|
if (super.isAssignableFrom(otherType)) {
|
|
return true;
|
|
} else if (target.isObjectType() && otherType instanceof ArrayTypeModel) {
|
|
return target.isAssignableFrom(((ArrayTypeModel) otherType).target);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|