// Path: src/main/java/gov/nasa/jpf/constraints/java/ObjectConstraints.java
// public class ObjectConstraints {
//   
//   private static final TypeContext javaTypes = new TypeContext(true);
//   
//   
//   public static void addToValuation(String name, Object obj, Class<?> realClass, Valuation val) {
//     if(realClass.isPrimitive()) {
//       addPrimitiveToValuation(name, obj, val);
//     }
//     else {
//       addInstanceToValuation(name, obj, Predicates.alwaysTrue(), val, new IdentityHashMap<Object,Boolean>());
//     }
//   }
//   
//   public static void addInstanceToValuation(String objName, Object obj, Predicate<? super Field> filter, Valuation val, IdentityHashMap<Object,Boolean> visited) {
//     if(obj == null)
//       return;
//     
//     if(visited.put(obj, Boolean.TRUE) != null)
//       return;
//     
//     Field[] fields = obj.getClass().getFields();
//     
//     
//     for(Field f : fields) {
//       if(!filter.apply(f))
//         continue;
//       
//       Class<?> ftype = f.getType();
//       String fname = objName + "." + f.getName();
//       
//       try {
//         Object value = f.get(obj);
//         
//         if(!ftype.isPrimitive()) {
//           addInstanceToValuation(fname, value, filter, val, visited);
//         }
//         else {
//           addPrimitiveToValuation(fname, value, val);
//         }
//       }
//       catch(IllegalAccessException ex) {
//         ex.printStackTrace();
//         // IGNORE FIELD
//       }
//     }
//   }
//   
//   
//   public static void addPrimitiveToValuation(String name, Object value, Valuation val) {
//     Variable<?> var = getPrimitiveVar(name, value.getClass());
//     val.setCastedValue(var, value);
//   }
//   
//   public static <T> Variable<T> getPrimitiveVar(String name, Class<T> clazz) {
//     Type<T> t = getPrimitiveType(clazz);
//     return Variable.create(t, name);
//   }
//   
//   @SuppressWarnings("unchecked")
//   public static <T> Constant<T> getPrimitiveConst(T value) {
//     Type<T> t = getPrimitiveType((Class<T>)value.getClass());
//     return Constant.create(t, value);
//   }
//   
//   
//   @SuppressWarnings("unchecked")
//   public static <T> Type<T> getPrimitiveType(Class<T> clazz) {
//     if(clazz == Boolean.class)
//       return (Type<T>)BuiltinTypes.BOOL;
//     if(clazz == Byte.class)
//       return (Type<T>)BuiltinTypes.SINT8;
//     if(clazz == Character.class)
//       return (Type<T>)BuiltinTypes.UINT16;
//     if(clazz == Short.class)
//       return (Type<T>)BuiltinTypes.SINT16;
//     if(clazz == Integer.class)
//       return (Type<T>)BuiltinTypes.SINT32;
//     if(clazz == Long.class)
//       return (Type<T>)BuiltinTypes.SINT64;
//     if(clazz == Float.class)
//       return (Type<T>)BuiltinTypes.FLOAT;
//     if(clazz == Double.class)
//       return (Type<T>)BuiltinTypes.DOUBLE;
//     throw new IllegalArgumentException("Class " + clazz.getName() + " is not a wrapper class for a primitive type");
//   }
//   
//   public static TypeContext getJavaTypes() {
//     return javaTypes;
//   }
// }
// 
// Path: src/main/java/gov/nasa/jpf/constraints/types/Type.java
// public interface Type<T> {
// 
//   public String getName();
//   
//   public String[] getOtherNames();
//   
//   public Class<T> getCanonicalClass();
// 
//   public Class<?>[] getOtherClasses();
// 
//   public T cast(Object other);
// 
//   public T getDefaultValue();
// 
//   public Type<?> getSuperType();
// 
//   public <O> CastOperation<? super O,? extends T> cast(Type<O> fromType);
//   public <O> CastOperation<? super O,? extends T> requireCast(Type<O> fromType);
// 
//   public abstract T parse(String string);
// 
//   
// 	
// }


import gov.nasa.jpf.constraints.java.ObjectConstraints;
import gov.nasa.jpf.constraints.types.Type;
import java.io.IOException;
import java.util.Collection;
    }
    if(qid)
      a.append('\'');
    if(includeVariableType(flags)) {
      a.append(':');
      if(type == null){
        a.append("null");
      } else {
        a.append(type.getName());
      }
    }
  }

  @Override
  public <R, D> R accept(ExpressionVisitor<R, D> visitor, D data) {
    return visitor.visit(this, data);
  }

  public void printTyped(Appendable a) throws IOException {
    print(a, DEFAULT_FLAGS | INCLUDE_VARIABLE_TYPE);
  }
  
  
  
  
  
  // LEGACY API
  
  @Deprecated
  public Variable(Class<E> clazz, String name) {
// Path: src/main/java/gov/nasa/jpf/constraints/java/ObjectConstraints.java
// public class ObjectConstraints {
//   
//   private static final TypeContext javaTypes = new TypeContext(true);
//   
//   
//   public static void addToValuation(String name, Object obj, Class<?> realClass, Valuation val) {
//     if(realClass.isPrimitive()) {
//       addPrimitiveToValuation(name, obj, val);
//     }
//     else {
//       addInstanceToValuation(name, obj, Predicates.alwaysTrue(), val, new IdentityHashMap<Object,Boolean>());
//     }
//   }
//   
//   public static void addInstanceToValuation(String objName, Object obj, Predicate<? super Field> filter, Valuation val, IdentityHashMap<Object,Boolean> visited) {
//     if(obj == null)
//       return;
//     
//     if(visited.put(obj, Boolean.TRUE) != null)
//       return;
//     
//     Field[] fields = obj.getClass().getFields();
//     
//     
//     for(Field f : fields) {
//       if(!filter.apply(f))
//         continue;
//       
//       Class<?> ftype = f.getType();
//       String fname = objName + "." + f.getName();
//       
//       try {
//         Object value = f.get(obj);
//         
//         if(!ftype.isPrimitive()) {
//           addInstanceToValuation(fname, value, filter, val, visited);
//         }
//         else {
//           addPrimitiveToValuation(fname, value, val);
//         }
//       }
//       catch(IllegalAccessException ex) {
//         ex.printStackTrace();
//         // IGNORE FIELD
//       }
//     }
//   }
//   
//   
//   public static void addPrimitiveToValuation(String name, Object value, Valuation val) {
//     Variable<?> var = getPrimitiveVar(name, value.getClass());
//     val.setCastedValue(var, value);
//   }
//   
//   public static <T> Variable<T> getPrimitiveVar(String name, Class<T> clazz) {
//     Type<T> t = getPrimitiveType(clazz);
//     return Variable.create(t, name);
//   }
//   
//   @SuppressWarnings("unchecked")
//   public static <T> Constant<T> getPrimitiveConst(T value) {
//     Type<T> t = getPrimitiveType((Class<T>)value.getClass());
//     return Constant.create(t, value);
//   }
//   
//   
//   @SuppressWarnings("unchecked")
//   public static <T> Type<T> getPrimitiveType(Class<T> clazz) {
//     if(clazz == Boolean.class)
//       return (Type<T>)BuiltinTypes.BOOL;
//     if(clazz == Byte.class)
//       return (Type<T>)BuiltinTypes.SINT8;
//     if(clazz == Character.class)
//       return (Type<T>)BuiltinTypes.UINT16;
//     if(clazz == Short.class)
//       return (Type<T>)BuiltinTypes.SINT16;
//     if(clazz == Integer.class)
//       return (Type<T>)BuiltinTypes.SINT32;
//     if(clazz == Long.class)
//       return (Type<T>)BuiltinTypes.SINT64;
//     if(clazz == Float.class)
//       return (Type<T>)BuiltinTypes.FLOAT;
//     if(clazz == Double.class)
//       return (Type<T>)BuiltinTypes.DOUBLE;
//     throw new IllegalArgumentException("Class " + clazz.getName() + " is not a wrapper class for a primitive type");
//   }
//   
//   public static TypeContext getJavaTypes() {
//     return javaTypes;
//   }
// }
// 
// Path: src/main/java/gov/nasa/jpf/constraints/types/Type.java
// public interface Type<T> {
// 
//   public String getName();
//   
//   public String[] getOtherNames();
//   
//   public Class<T> getCanonicalClass();
// 
//   public Class<?>[] getOtherClasses();
// 
//   public T cast(Object other);
// 
//   public T getDefaultValue();
// 
//   public Type<?> getSuperType();
// 
//   public <O> CastOperation<? super O,? extends T> cast(Type<O> fromType);
//   public <O> CastOperation<? super O,? extends T> requireCast(Type<O> fromType);
// 
//   public abstract T parse(String string);
// 
//   
// 	
// }


// Path: src/main/java/gov/nasa/jpf/constraints/api/Variable.java
import gov.nasa.jpf.constraints.java.ObjectConstraints;
import gov.nasa.jpf.constraints.types.Type;
import java.io.IOException;
import java.util.Collection;

    }
    if(qid)
      a.append('\'');
    if(includeVariableType(flags)) {
      a.append(':');
      if(type == null){
        a.append("null");
      } else {
        a.append(type.getName());
      }
    }
  }

  @Override
  public <R, D> R accept(ExpressionVisitor<R, D> visitor, D data) {
    return visitor.visit(this, data);
  }

  public void printTyped(Appendable a) throws IOException {
    print(a, DEFAULT_FLAGS | INCLUDE_VARIABLE_TYPE);
  }
  
  
  
  
  
  // LEGACY API
  
  @Deprecated
  public Variable(Class<E> clazz, String name) {
    this(ObjectConstraints.getPrimitiveType(clazz), name);