in openjpa-kernel/src/main/java/org/apache/openjpa/util/asm/AsmHelper.java [195:303]
public static AbstractInsnNode getLoadConstantInsn(Object val) {
if (val == null) {
return new InsnNode(Opcodes.ACONST_NULL);
}
if (val instanceof Integer) {
final int iVal = (Integer) val;
switch (iVal) {
case 0:
return new InsnNode(Opcodes.ICONST_0);
case 1:
return new InsnNode(Opcodes.ICONST_1);
case 2:
return new InsnNode(Opcodes.ICONST_2);
case 3:
return new InsnNode(Opcodes.ICONST_3);
case 4:
return new InsnNode(Opcodes.ICONST_4);
case 5:
return new InsnNode(Opcodes.ICONST_5);
default:
break;
}
if (iVal < 0 && iVal >= -128 || iVal >= 6 && iVal < 128) {
// use bipush for small numbers
return new IntInsnNode(Opcodes.BIPUSH, iVal);
}
else if (iVal < -128 && iVal >= -32768 || iVal >= 128 && iVal < 32768) {
// use sipush for a bit bigger numbers
return new IntInsnNode(Opcodes.SIPUSH, iVal);
}
}
if (val instanceof Boolean) {
if ((Boolean)val) {
return new InsnNode(Opcodes.ICONST_1);
}
else {
return new InsnNode(Opcodes.ICONST_0);
}
}
if (val instanceof Long) {
if ((Long) val == 0L) {
return new InsnNode(Opcodes.LCONST_0);
}
if ((Long) val == 1L) {
return new InsnNode(Opcodes.LCONST_1);
}
}
if (val instanceof Float) {
if ((Float) val == 0F) {
return new InsnNode(Opcodes.FCONST_0);
}
if ((Float) val == 1F) {
return new InsnNode(Opcodes.FCONST_1);
}
if ((Float) val == 2F) {
return new InsnNode(Opcodes.FCONST_2);
}
}
if (val instanceof Double) {
if ((Double) val == 0D) {
return new InsnNode(Opcodes.DCONST_0);
}
if ((Double) val == 1D) {
return new InsnNode(Opcodes.DCONST_1);
}
}
if (val instanceof Class) {
if (boolean.class.equals(val)) {
return new FieldInsnNode(Opcodes.GETSTATIC, Type.getInternalName(Boolean.class), "TYPE",
Type.getDescriptor(Class.class));
}
if (char.class.equals(val)) {
return new FieldInsnNode(Opcodes.GETSTATIC, Type.getInternalName(Character.class), "TYPE",
Type.getDescriptor(Class.class));
}
if (int.class.equals(val)) {
return new FieldInsnNode(Opcodes.GETSTATIC, Type.getInternalName(Integer.class), "TYPE",
Type.getDescriptor(Class.class));
}
if (long.class.equals(val)) {
return new FieldInsnNode(Opcodes.GETSTATIC, Type.getInternalName(Long.class), "TYPE",
Type.getDescriptor(Class.class));
}
if (byte.class.equals(val)) {
return new FieldInsnNode(Opcodes.GETSTATIC, Type.getInternalName(Byte.class), "TYPE",
Type.getDescriptor(Class.class));
}
if (short.class.equals(val)) {
return new FieldInsnNode(Opcodes.GETSTATIC, Type.getInternalName(Short.class), "TYPE",
Type.getDescriptor(Class.class));
}
if (float.class.equals(val)) {
return new FieldInsnNode(Opcodes.GETSTATIC, Type.getInternalName(Float.class), "TYPE",
Type.getDescriptor(Class.class));
}
if (double.class.equals(val)) {
return new FieldInsnNode(Opcodes.GETSTATIC, Type.getInternalName(Double.class), "TYPE",
Type.getDescriptor(Class.class));
}
return new LdcInsnNode(Type.getType((Class<?>) val));
}
return new LdcInsnNode(val);
}