class ConcreteType.TypeFilter {
abstract protected C filter(ConcreteType type);
}
class ConcreteType {
@Override public ConcreteFunctionType filter(ConcreteType type) {
return type.isFunction() ? type.toFunction() : null;
}
}
class ConcreteType {
@Override public ConcreteInstanceType filter(ConcreteType type) {
return type.isInstance() ? type.toInstance() : null;
}
}
class ConcreteType {
@Override public ConcreteInstanceType filter(ConcreteType type) {
if (type.isFunction()) {
return type.toFunction().getInstanceType();
}
return null;
}
}
class ConcreteType {
@Override public ConcreteInstanceType filter(ConcreteType type) {
if (type.isInstance()
&& type.toInstance().isFunctionPrototype()) {
return type.toInstance();
}
return null;
}
}
class ConcreteType {
@Override public ConcreteFunctionType filter(ConcreteType type) {
return type.isFunction()
&& type.toFunction().getSuperclassType() != null
? type.toFunction().getSuperclassType() : null;
}
}
class ConcreteType {
@Override public StaticSlot<ConcreteType> filter(ConcreteType type) {
return type.isFunction()
&& toFunction().getParameterSlot(index) != null
? toFunction().getParameterSlot(index) : null;
}
}
class ConcreteType {
@Override public StaticSlot<ConcreteType> filter(ConcreteType type) {
StaticSlot<ConcreteType> slot = null;
if (type.isInstance()) {
slot = type.toInstance().getPropertySlot(name);
}
return slot;
}
}
|