slcom/slangc/model/AliasTypeModel.sauce

66 lines
1.4 KiB
Plaintext

package slangc.model;
import slangc.api.Reporter;
public class AliasTypeModel extends SyntheticTypeModel {
private PackageModel targetPackage;
private String targetName;
private TypeModel target;
public AliasTypeModel(PackageModel packageModel, String name, TypeLevel level, TypeModel owner, PackageModel targetPackage, String targetname) {
super(packageModel, name, level, owner);
this.targetPackage = targetPackage;
this.targetName = targetname;
}
@Override
public TypeType getTypeType() {
return TypeType.ALIAS;
}
public PackageModel getTargetPackage() {
return targetPackage;
}
public String getTargetName() {
return targetName;
}
@Override
public int expand() {
if (existsAtRuntime() && target == null) {
target = targetPackage.getType(targetName);
return 1;
} else {
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 + "[points to " + target + "]");
}
@Override
public TypeModel simplify() {
expand();
if (target != null) {
return target.simplify();
} else {
return this;
}
}
@Override
public boolean isObjectType() {
return target.isObjectType();
}
}