// Path: src/main/java/janala/interpreters/ClassDepot.java
// public class ClassDepot implements Serializable {
//   private static final long serialVersionUID = 1;
// 
//   private final Map<String, ClassTemplate> templates;
// 
//   public static ClassDepot instance = new ClassDepot();
//   
//   public static void setInstance(ClassDepot newInstance) {
//     instance = newInstance;
//   }
//   
//   public static ClassDepot getInstance() {
//     return instance;
//   }
// 
//   private static final Logger logger = MyLogger.getLogger(ClassDepot.class.getName());
// 
//   // VisibleForTesting
//   public ClassDepot() {
//     templates = new TreeMap<String, ClassTemplate>();
//   }
// 
//   private ClassTemplate getOrCreateTemplate(String className, Class<?> clazz) {
//     ClassTemplate ct = templates.get(className);
//     if (ct != null) {
//       return ct;
//     }
//     ct = new ClassTemplate(clazz);
//     templates.put(className, ct);
//     Class<?> parent = clazz.getSuperclass();
//     if (parent != null) {
//       ClassTemplate pt = getOrCreateTemplate(parent.getName(), parent);
//       ct.addFields(pt);
//     }
//     return ct;
//   }
// 
//   public int getFieldIndex(String className, String field) {
//     try {
//       Class<?> clazz = Class.forName(className);
//       ClassTemplate ct = getOrCreateTemplate(className, clazz);
//       return ct.getFieldIndex(field);
//     } catch (ClassNotFoundException e) {
//       logger.log(Level.SEVERE, "", e);
//       return -1;
//     }
//   }
// 
//   public int getStaticFieldIndex(String className, String field) {
//     try {
//       Class<?> clazz = Class.forName(className);
//       ClassTemplate ct = getOrCreateTemplate(className, clazz);
//       return ct.getStaticFieldIndex(field);
//     } catch (ClassNotFoundException e) {
//       logger.log(Level.SEVERE, "", e);
//       return -1;
//     }
//   }
// 
//   public int numFields(String className) {
//     try {
//       Class<?> clazz = Class.forName(className);
//       ClassTemplate ct = getOrCreateTemplate(className, clazz);
//       return ct.nFields();
//     } catch (ClassNotFoundException e) {
//       logger.log(Level.SEVERE, "Class not found", e);
//       return -1;
//     }
//   }
// 
//   public int numStaticFields(String className) {
//     try {
//       Class<?> clazz = Class.forName(className);
//       ClassTemplate ct = getOrCreateTemplate(className, clazz);
//       return ct.nStaticFields();
//     } catch (ClassNotFoundException e) {
//       logger.log(Level.SEVERE, "", e);
//       return -1;
//     }
//   }
// }


import janala.interpreters.ClassDepot;
import janala.interpreters.PlaceHolder;
import janala.interpreters.Value;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
package janala.logger;



/** 
 * Containing the static info of a class and dynamic values of the
 * static fields. 
 */
public class ObjectInfo implements Serializable {
  private static final long serialVersionUID = 1L;
  private Map<String, Integer> fieldNameToIndex;
  private List<FieldInfo> fieldList;

  private Map<String, Integer> staticFieldNameToIndex;
  private List<FieldInfo> staticFieldList;

  int nStaticFields;
  private int nFields;
  public Value[] statics;

  private String className;
  public String getClassName() {
    return className;
  }

// Path: src/main/java/janala/interpreters/ClassDepot.java
// public class ClassDepot implements Serializable {
//   private static final long serialVersionUID = 1;
// 
//   private final Map<String, ClassTemplate> templates;
// 
//   public static ClassDepot instance = new ClassDepot();
//   
//   public static void setInstance(ClassDepot newInstance) {
//     instance = newInstance;
//   }
//   
//   public static ClassDepot getInstance() {
//     return instance;
//   }
// 
//   private static final Logger logger = MyLogger.getLogger(ClassDepot.class.getName());
// 
//   // VisibleForTesting
//   public ClassDepot() {
//     templates = new TreeMap<String, ClassTemplate>();
//   }
// 
//   private ClassTemplate getOrCreateTemplate(String className, Class<?> clazz) {
//     ClassTemplate ct = templates.get(className);
//     if (ct != null) {
//       return ct;
//     }
//     ct = new ClassTemplate(clazz);
//     templates.put(className, ct);
//     Class<?> parent = clazz.getSuperclass();
//     if (parent != null) {
//       ClassTemplate pt = getOrCreateTemplate(parent.getName(), parent);
//       ct.addFields(pt);
//     }
//     return ct;
//   }
// 
//   public int getFieldIndex(String className, String field) {
//     try {
//       Class<?> clazz = Class.forName(className);
//       ClassTemplate ct = getOrCreateTemplate(className, clazz);
//       return ct.getFieldIndex(field);
//     } catch (ClassNotFoundException e) {
//       logger.log(Level.SEVERE, "", e);
//       return -1;
//     }
//   }
// 
//   public int getStaticFieldIndex(String className, String field) {
//     try {
//       Class<?> clazz = Class.forName(className);
//       ClassTemplate ct = getOrCreateTemplate(className, clazz);
//       return ct.getStaticFieldIndex(field);
//     } catch (ClassNotFoundException e) {
//       logger.log(Level.SEVERE, "", e);
//       return -1;
//     }
//   }
// 
//   public int numFields(String className) {
//     try {
//       Class<?> clazz = Class.forName(className);
//       ClassTemplate ct = getOrCreateTemplate(className, clazz);
//       return ct.nFields();
//     } catch (ClassNotFoundException e) {
//       logger.log(Level.SEVERE, "Class not found", e);
//       return -1;
//     }
//   }
// 
//   public int numStaticFields(String className) {
//     try {
//       Class<?> clazz = Class.forName(className);
//       ClassTemplate ct = getOrCreateTemplate(className, clazz);
//       return ct.nStaticFields();
//     } catch (ClassNotFoundException e) {
//       logger.log(Level.SEVERE, "", e);
//       return -1;
//     }
//   }
// }


// Path: src/main/java/janala/logger/ObjectInfo.java
import janala.interpreters.ClassDepot;
import janala.interpreters.PlaceHolder;
import janala.interpreters.Value;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;

package janala.logger;



/** 
 * Containing the static info of a class and dynamic values of the
 * static fields. 
 */
public class ObjectInfo implements Serializable {
  private static final long serialVersionUID = 1L;
  private Map<String, Integer> fieldNameToIndex;
  private List<FieldInfo> fieldList;

  private Map<String, Integer> staticFieldNameToIndex;
  private List<FieldInfo> staticFieldList;

  int nStaticFields;
  private int nFields;
  public Value[] statics;

  private String className;
  public String getClassName() {
    return className;
  }

  private final ClassDepot classDepot;