// Path: src/main/java/gov/nasa/jpf/constraints/casts/CastOperation.java
// public interface CastOperation<F, T> {
// 	public Class<F> getFromClass();
// 	public Class<T> getToClass();
// 	
// 	public T cast(F from);
// }


import gov.nasa.jpf.constraints.casts.CastOperation;
  @Override
  public Class<?>[] getOtherClasses() {
    return otherClasses.clone(); // defensive copy
  }




  /* (non-Javadoc)
   * @see gov.nasa.jpf.constraints.types.Type#getDefaultValue()
   */
  @Override
  public T getDefaultValue() {
    return defaultValue;
  }


  /* (non-Javadoc)
   * @see gov.nasa.jpf.constraints.types.Type#getSuperType()
   */
  @Override
  public Type<?> getSuperType() {
    return superType;
  }


  @Override
  public <O> CastOperation<? super O, ? extends T> cast(Type<O> fromType) {
    if(fromType instanceof ConcreteType) {
      ConcreteType<O> ctype = (ConcreteType<O>)fromType;
// Path: src/main/java/gov/nasa/jpf/constraints/casts/CastOperation.java
// public interface CastOperation<F, T> {
// 	public Class<F> getFromClass();
// 	public Class<T> getToClass();
// 	
// 	public T cast(F from);
// }


// Path: src/main/java/gov/nasa/jpf/constraints/types/ConcreteType.java
import gov.nasa.jpf.constraints.casts.CastOperation;

  @Override
  public Class<?>[] getOtherClasses() {
    return otherClasses.clone(); // defensive copy
  }




  /* (non-Javadoc)
   * @see gov.nasa.jpf.constraints.types.Type#getDefaultValue()
   */
  @Override
  public T getDefaultValue() {
    return defaultValue;
  }


  /* (non-Javadoc)
   * @see gov.nasa.jpf.constraints.types.Type#getSuperType()
   */
  @Override
  public Type<?> getSuperType() {
    return superType;
  }


  @Override
  public <O> CastOperation<? super O, ? extends T> cast(Type<O> fromType) {
    if(fromType instanceof ConcreteType) {
      ConcreteType<O> ctype = (ConcreteType<O>)fromType;
      CastOperation<? super O, ? extends T> castOp = castFrom(ctype);