package janala.logger; import janala.interpreters.ClassDepot; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; public class ClassNames implements Serializable { public static final long serialVersionUID = 1L; private Map<String, Integer> nameToIndex; private List<ObjectInfo> classList; private static ClassNames instance = new ClassNames(); public static ClassNames getInstance() { return instance; } private final ClassDepot classDepot; public ClassNames(ClassDepot classDepot) { this.classDepot = classDepot; } public ClassNames() { this.classDepot = ClassDepot.getInstance(); } //VisibleForTesting public static void setInstance(ClassNames classNames) { instance = classNames; } public int get(String className) { if (nameToIndex == null) { nameToIndex = new TreeMap<String, Integer>(); } if (classList == null) { classList = new ArrayList<ObjectInfo>(); } Integer i = nameToIndex.get(className); if (i == null) { i = classList.size(); nameToIndex.put(className, i); classList.add(new ObjectInfo(className, classDepot)); } return i; } public ObjectInfo get(int index) { return classList.get(index); } @Override public String toString() { return "ClassNames{\n" + "nameToIndex=" + nameToIndex + "\n, classList=" + classList + "\n}"; } }