package org.archstudio.ljm;
import java.util.HashMap;
@SuppressWarnings("rawtypes")
public class ClassArrayEncoder {
private static boolean initDone = false;
private static HashMap<String, Class<?>> nameMap = new HashMap<String, Class<?>>();
public synchronized static void init() {
if (initDone) {
return;
}
nameMap.put("boolean", boolean.class);
nameMap.put("byte", byte.class);
nameMap.put("short", short.class);
nameMap.put("char", char.class);
nameMap.put("int", int.class);
nameMap.put("long", long.class);
nameMap.put("float", float.class);
nameMap.put("double", double.class);
nameMap.put("void", void.class);
initDone = true;
}
public static String classToString(Class c) {
return classArrayToStringArray(new Class[] { c })[0];
}
public static Class stringToClass(String s) throws ClassNotFoundException {
return stringArrayToClassArray(new String[] { s })[0];
}
public static String[] classArrayToStringArray(Class[] arr) {
String[] strings = new String[arr.length];
for (int i = 0; i < arr.length; i++) {
if (arr[i].isPrimitive()) {
strings[i] = "$$PT" + arr[i].getName();
}
else {
strings[i] = arr[i].getName();
}
}
return strings;
}
public static Class[] stringArrayToClassArray(String[] arr) throws ClassNotFoundException {
if (!initDone) {
init();
}
Class[] classes = new Class[arr.length];
for (int i = 0; i < arr.length; i++) {
if (!arr[i].startsWith("$$PT")) {
classes[i] = Class.forName(arr[i]);
}
else {
String realName = arr[i].substring(4);
classes[i] = nameMap.get(realName);
/*
* if(realName.equals("boolean")){ classes[i] = boolean.class; } else if(realName.equals("byte")){
* classes[i] = byte.class; } else if(realName.equals("short")){ classes[i] = int.class; } else
* if(realName.equals("int")){ classes[i] = int.class; } else if(realName.equals("long")){ classes[i] =
* long.class; } else if(realName.equals("float")){ classes[i] = float.class; } else
* if(realName.equals("double")){ classes[i] = int.class; } else if(realName.equals("void")){ classes[i]
* = void.class; }
*/
}
}
return classes;
}
}