1 package com.xtremelabs.robolectric.bytecode; 2 3 import javassist.CtClass; 4 5 enum Type { 6 VOID(null, null, "", "", Void.TYPE), 7 BOOLEAN(false, "false", ".booleanValue()", "java.lang.Boolean", Boolean.TYPE), 8 BYTE(0, "0", ".byteValue()", "java.lang.Byte", Byte.TYPE), 9 CHAR(0, "0", ".charValue()", "java.lang.Character", Character.TYPE), 10 SHORT(0, "0", ".shortValue()", "java.lang.Short", Short.TYPE), 11 INT(0, "0", ".intValue()", "java.lang.Integer", Integer.TYPE), 12 LONG(0, "0l", ".longValue()", "java.lang.Long", Long.TYPE), 13 FLOAT(0, "0f", ".floatValue()", "java.lang.Float", Float.TYPE), 14 DOUBLE(0, "0d", ".doubleValue()", "java.lang.Double", Double.TYPE), 15 OBJECT(null, "null", "", null, null); 16 17 Type(Object defaultReturnValue, String defaultReturnString, String unboxString, String nonPrimitiveClassName, Class type) { 18 this.defaultReturnValue = defaultReturnValue; 19 this.defaultReturnString = defaultReturnString; 20 this.unboxString = unboxString; 21 this.nonPrimitiveClassName = nonPrimitiveClassName; 22 this.type = type; 23 } 24 25 private Object defaultReturnValue; 26 private String defaultReturnString; 27 private String unboxString; 28 private String nonPrimitiveClassName; 29 private Class type; 30 31 Object defaultReturnValue() { 32 return defaultReturnValue; 33 } 34 35 String defaultReturnString() { 36 return defaultReturnString; 37 } 38 39 String unboxString() { 40 return unboxString; 41 } 42 43 String nonPrimitiveClassName(CtClass returnCtClass) { 44 return nonPrimitiveClassName == null ? returnCtClass.getName() : nonPrimitiveClassName; 45 } 46 47 boolean isVoid() { 48 return this == VOID; 49 } 50 51 public static Type find(CtClass ctClass) { 52 if (ctClass.equals(CtClass.voidType)) { 53 return VOID; 54 } else if (ctClass.equals(CtClass.booleanType)) { 55 return BOOLEAN; 56 } else if (ctClass.equals(CtClass.byteType)) { 57 return BYTE; 58 } else if (ctClass.equals(CtClass.charType)) { 59 return CHAR; 60 } else if (ctClass.equals(CtClass.shortType)) { 61 return SHORT; 62 } else if (ctClass.equals(CtClass.intType)) { 63 return INT; 64 } else if (ctClass.equals(CtClass.longType)) { 65 return LONG; 66 } else if (ctClass.equals(CtClass.floatType)) { 67 return FLOAT; 68 } else if (ctClass.equals(CtClass.doubleType)) { 69 return DOUBLE; 70 } else if (!ctClass.isPrimitive()) { 71 return OBJECT; 72 } else { 73 throw new RuntimeException("unknown return type " + ctClass); 74 } 75 } 76 77 public static Class findPrimitiveClass(String name) { 78 for (Type type : Type.values()) { 79 if (type.type != null && type.type.getName().equals(name)) { 80 return type.type; 81 } 82 } 83 return null; 84 } 85 } 86