List of usage examples for org.objectweb.asm Type getDimensions
public int getDimensions()
From source file:ch.eiafr.cojac.FloatReplaceClassVisitor.java
License:Apache License
@Override public FieldVisitor visitField(int accessFlags, String fieldName, String fieldType, String genericSignature, Object initValStatic) {/* w ww. j a v a2 s.co m*/ if (fieldType.equals("F")) { return super.visitField(accessFlags, fieldName, COJAC_FLOAT_WRAPPER_TYPE_DESCR, genericSignature, null); } else if (fieldType.equals("D")) { return super.visitField(accessFlags, fieldName, COJAC_DOUBLE_WRAPPER_TYPE_DESCR, genericSignature, null); } else if (fieldType.equals(Type.getType(Float.class).getDescriptor())) { return super.visitField(accessFlags, fieldName, COJAC_FLOAT_WRAPPER_TYPE_DESCR, genericSignature, null); } else if (fieldType.equals(Type.getType(Double.class).getDescriptor())) { return super.visitField(accessFlags, fieldName, COJAC_DOUBLE_WRAPPER_TYPE_DESCR, genericSignature, null); } Type type = Type.getType(fieldType); if (type.getSort() == Type.ARRAY) { if (type.getElementType().equals(Type.FLOAT_TYPE)) { String desc = arrayDescriptor(type.getDimensions(), COJAC_FLOAT_WRAPPER_TYPE_DESCR); return super.visitField(accessFlags, fieldName, desc, genericSignature, null); } else if (type.getElementType().equals(Type.DOUBLE_TYPE)) { String desc = arrayDescriptor(type.getDimensions(), COJAC_DOUBLE_WRAPPER_TYPE_DESCR); return super.visitField(accessFlags, fieldName, desc, genericSignature, null); } } return super.visitField(accessFlags, fieldName, fieldType, genericSignature, initValStatic); }
From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java
License:Apache License
public static void convertRealToCojacType(Type realType, MethodVisitor mv) { // WRAPPER SPEC: FW.fromFloat(float) -> FW, FW.fromRealFloatWrapper(Float) -> FW // WRAPPER SPEC: DW.fromDouble(double) -> DW, DW.fromRealDoubleWrapper(Double) -> DW if (realType.equals(Type.FLOAT_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "fromFloat", "(F)" + COJAC_FLOAT_WRAPPER_TYPE_DESCR, false); } else if (realType.equals(JWRAPPER_FLOAT_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "fromRealFloatWrapper", "(" + JWRAPPER_FLOAT_TYPE.getDescriptor() + ")" + COJAC_FLOAT_WRAPPER_TYPE_DESCR, false); } else if (realType.equals(Type.DOUBLE_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "fromDouble", "(D)" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR, false); } else if (realType.equals(JWRAPPER_DOUBLE_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "fromRealDoubleWrapper", "(" + JWRAPPER_DOUBLE_TYPE.getDescriptor() + ")" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR, false); } else if (isPrimitiveFloatOrDoubleArray(realType)) { mv.visitTypeInsn(CHECKCAST, OBJ_TYPE.getInternalName()); mv.visitLdcInsn(realType.getDimensions()); if (realType.getElementType().equals(Type.FLOAT_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertPrimitiveArrayToCojac", "(" + OBJ_DESC + "I)" + OBJ_DESC, false); } else if (realType.getElementType().equals(Type.DOUBLE_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertPrimitiveArrayToCojac", "(" + OBJ_DESC + "I)" + OBJ_DESC, false); }/* ww w. java 2 s . c o m*/ mv.visitTypeInsn(CHECKCAST, afterFloatReplacement(realType).getInternalName()); } }
From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java
License:Apache License
public static void convertCojacToRealType(Type realType, MethodVisitor mv) { if (realType.equals(Type.FLOAT_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "toFloat", "(" + COJAC_FLOAT_WRAPPER_TYPE_DESCR + ")F", false); } else if (realType.equals(JWRAPPER_FLOAT_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "toRealFloatWrapper", "(" + COJAC_FLOAT_WRAPPER_TYPE_DESCR + ")" + FL_DESCR, false); } else if (realType.equals(Type.DOUBLE_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "toDouble", "(" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR + ")D", false); } else if (realType.equals(JWRAPPER_DOUBLE_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "toRealDoubleWrapper", "(" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR + ")" + DL_DESCR, false); } else if (isPrimitiveFloatOrDoubleArray(realType) || isJWrapperFloatOrDoubleArray(realType)) { mv.visitTypeInsn(CHECKCAST, OBJ_TYPE.getInternalName()); mv.visitLdcInsn(realType.getDimensions()); Type eType = realType.getElementType(); if (eType.equals(Type.FLOAT_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertArrayToPrimitive", "(" + OBJ_DESC + "I)" + OBJ_DESC, false); } else if (eType.equals(Type.DOUBLE_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertArrayToPrimitive", "(" + OBJ_DESC + "I)" + OBJ_DESC, false); } else if (eType.equals(JWRAPPER_FLOAT_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertArrayToJWrapper", "(" + OBJ_DESC + "I)" + OBJ_DESC, false); } else if (eType.equals(JWRAPPER_DOUBLE_TYPE)) { mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertArrayToJWrapper", "(" + OBJ_DESC + "I)" + OBJ_DESC, false); }/* w w w . j a v a 2 s . c om*/ mv.visitTypeInsn(CHECKCAST, realType.getInternalName()); } }
From source file:ch.eiafr.cojac.instrumenters.InvokableMethod.java
License:Apache License
/** Float|float|Double|double [array] -> CojacWrapper */ public static Type afterFloatReplacement(Type type) { if (type.equals(Type.getType(Float.class))) return COJAC_FLOAT_WRAPPER_TYPE; if (type.equals(Type.FLOAT_TYPE)) return COJAC_FLOAT_WRAPPER_TYPE; if (type.equals(Type.getType(Double.class))) return COJAC_DOUBLE_WRAPPER_TYPE; if (type.equals(Type.DOUBLE_TYPE)) return COJAC_DOUBLE_WRAPPER_TYPE; if (type.getSort() == Type.ARRAY) { Type newType = afterFloatReplacement(type.getElementType()); if (type.equals(newType)) return type; String desc = ""; for (int i = 0; i < type.getDimensions(); i++) desc += "["; desc += newType.getDescriptor(); return Type.getType(desc); }//from w w w. j a v a 2s .c o m return type; }
From source file:cl.inria.stiq.db.structure.impl.StructureDatabase.java
License:Open Source License
public static ITypeInfo getType(IMutableStructureDatabase aStructureDatabase, String aName, boolean aCreateIfAbsent, boolean aFailIfAbsent) { aName = transformClassName(aName);// www. j a va 2 s. c om Type theType = Type.getType(aName); switch (theType.getSort()) { case Type.OBJECT: { String theClassName = theType.getClassName(); return aCreateIfAbsent ? aStructureDatabase.getNewClass(theClassName) : aStructureDatabase.getClass(theClassName, aFailIfAbsent); } case Type.ARRAY: { ITypeInfo theElementType = getType(aStructureDatabase, theType.getElementType().getDescriptor(), aCreateIfAbsent, aFailIfAbsent); int theDimensions = theType.getDimensions(); return new ArrayTypeInfo(null, // That should be safe... if there is a problem we'll see what we do theElementType, theDimensions); } case Type.VOID: return PrimitiveTypeInfo.VOID; case Type.BOOLEAN: return PrimitiveTypeInfo.BOOLEAN; case Type.BYTE: return PrimitiveTypeInfo.BYTE; case Type.CHAR: return PrimitiveTypeInfo.CHAR; case Type.DOUBLE: return PrimitiveTypeInfo.DOUBLE; case Type.FLOAT: return PrimitiveTypeInfo.FLOAT; case Type.INT: return PrimitiveTypeInfo.INT; case Type.LONG: return PrimitiveTypeInfo.LONG; case Type.SHORT: return PrimitiveTypeInfo.SHORT; default: // This is not a "normal" failure, so always throw exception throw new RuntimeException("Not handled: " + theType); } }
From source file:com.android.tools.layoutlib.create.AbstractClassAdapter.java
License:Apache License
/** * Renames an object type, e.g. "Lcom.package.MyClass;" or an array type that has an * object element, e.g. "[Lcom.package.MyClass;" * If the type doesn't need to be renamed, returns the internal name of the input type. */// w w w . ja v a2 s . c om String renameType(Type type) { if (type == null) { return null; } if (type.getSort() == Type.OBJECT) { String in = type.getInternalName(); return "L" + renameInternalType(in) + ";"; } else if (type.getSort() == Type.ARRAY) { StringBuilder sb = new StringBuilder(); for (int n = type.getDimensions(); n > 0; n--) { sb.append('['); } sb.append(renameType(type.getElementType())); return sb.toString(); } return type.getDescriptor(); }
From source file:com.android.tools.layoutlib.create.AbstractClassAdapter.java
License:Apache License
/** * Renames an object type, e.g. "Lcom.package.MyClass;" or an array type that has an * object element, e.g. "[Lcom.package.MyClass;". * This is like renameType() except that it returns a Type object. * If the type doesn't need to be renamed, returns the input type object. *///from w ww. j a v a2 s . com Type renameTypeAsType(Type type) { if (type == null) { return null; } if (type.getSort() == Type.OBJECT) { String in = type.getInternalName(); String newIn = renameInternalType(in); if (newIn != in) { return Type.getType("L" + newIn + ";"); } } else if (type.getSort() == Type.ARRAY) { StringBuilder sb = new StringBuilder(); for (int n = type.getDimensions(); n > 0; n--) { sb.append('['); } sb.append(renameType(type.getElementType())); return Type.getType(sb.toString()); } return type; }
From source file:com.codename1.tools.translator.bytecodes.Ldc.java
License:Open Source License
@Override public void addDependencies(List<String> dependencyList) { if (cst instanceof Type) { int sort = ((Type) cst).getSort(); Type tp = (Type) cst; if (sort == Type.OBJECT) { String t = tp.getInternalName().replace('/', '_').replace('$', '_'); if (!dependencyList.contains(t)) { dependencyList.add(t);//from w w w. j a v a2s . c om } } else if (sort == Type.ARRAY) { try { Type ttt = tp.getElementType(); switch (ttt.getSort()) { case Type.BOOLEAN: case Type.BYTE: case Type.CHAR: case Type.DOUBLE: case Type.FLOAT: case Type.INT: case Type.LONG: case Type.SHORT: return; } String t = ttt.getInternalName().replace('/', '_').replace('$', '_'); ByteCodeClass.addArrayType(t, tp.getDimensions()); if (!dependencyList.contains(t)) { dependencyList.add(t); } } catch (Throwable t) { System.out.println("Non-fatal error when reading type: " + tp); t.printStackTrace(); } } } }
From source file:com.codename1.tools.translator.bytecodes.Ldc.java
License:Open Source License
public String getValueAsString() { StringBuilder b = new StringBuilder(); if (cst instanceof Integer) { //b.append("PUSH_INT("); b.append(((Number) cst).intValue()); //b.append("); /* LDC */\n"); } else if (cst instanceof Float) { Float f = (Float) cst; //b.append("PUSH_FLOAT("); if (f.isInfinite()) { if (f.floatValue() > 0) { b.append("1.0f / 0.0f"); } else { b.append("-1.0f / 0.0f"); }/*w ww.j a v a2 s. c om*/ } else { if (f.isNaN()) { b.append("0.0/0.0"); } else { b.append(f.floatValue()); } } //b.append("); /* LDC */\n"); } else if (cst instanceof Long) { //b.append("PUSH_LONG("); if (((Number) cst).longValue() == Long.MIN_VALUE) { // min value in C is 1 less (more really) b.append("LLONG_MIN"); } else { b.append(((Number) cst).longValue()).append("LL"); } //b.append("LL); /* LDC */\n"); } else if (cst instanceof Double) { Double d = (Double) cst; //b.append("PUSH_DOUBLE("); if (d.isInfinite()) { if (d.floatValue() > 0) { b.append("1.0 / 0.0"); } else { b.append("-1.0 / 0.0"); } } else { if (d.isNaN()) { b.append("0.0/0.0"); } else { b.append(d.doubleValue()); } } //b.append("); /* LDC */\n"); } else if (cst instanceof String) { //b.append("/* LDC: '"); //b.append(((String)cst).replace('\n', ' ').replace("*/", "*\\/")); //b.append("'*/\n PUSH_POINTER(STRING_FROM_CONSTANT_POOL_OFFSET("); b.append("STRING_FROM_CONSTANT_POOL_OFFSET("); b.append(Parser.addToConstantPool((String) cst)); b.append(")"); //b.append("));\n"); } else if (cst instanceof Type) { // TODO... int sort = ((Type) cst).getSort(); Type tp = (Type) cst; if (sort == Type.OBJECT) { //b.append("/* LDC: '"); //b.append(tp.getInternalName().replace('/', '_').replace('$', '_')); //b.append("'*/\n PUSH_POINTER((JAVA_OBJECT)&class__"); //b.append(tp.getInternalName().replace('/', '_').replace('$', '_')); //b.append(");\n"); b.append("(JAVA_OBJECT)&class__"); b.append(tp.getInternalName().replace('/', '_').replace('$', '_')); } else if (sort == Type.ARRAY) { //b.append("/* LDC Array: '"); //b.append(tp.getInternalName().replace('/', '_').replace('$', '_')); //b.append("'*/\n PUSH_POINTER((JAVA_OBJECT)&class_array"); b.append("(JAVA_OBJECT)&class_array"); b.append(tp.getDimensions()); b.append("__"); Type ttt = tp.getElementType(); switch (ttt.getSort()) { case Type.BOOLEAN: b.append("JAVA_BOOLEAN"); break; case Type.BYTE: b.append("JAVA_BYTE"); break; case Type.CHAR: b.append("JAVA_CHAR"); break; case Type.DOUBLE: b.append("JAVA_DOUBLE"); break; case Type.FLOAT: b.append("JAVA_FLOAT"); break; case Type.INT: b.append("JAVA_INT"); break; case Type.LONG: b.append("JAVA_LONG"); break; case Type.SHORT: b.append("JAVA_SHORT"); break; default: b.append(ttt.getInternalName().replace('/', '_').replace('$', '_')); break; } //b.append(");\n"); } else if (sort == Type.METHOD) { b.append("/* UNKNOWN CST type internal: "); b.append(tp.getInternalName()); b.append(" */"); } else { b.append("/* UNKNOWN CST type internal: "); b.append(tp.getInternalName()); b.append(" */"); } } else if (cst instanceof Handle) { //((Handle)cst). b.append("/* UNKNOWN CST type: "); b.append(cst.getClass().getName()); b.append(" */"); } return b.toString(); }
From source file:com.codename1.tools.translator.bytecodes.Ldc.java
License:Open Source License
@Override public void appendInstruction(StringBuilder b) { b.append(" "); if (cst instanceof Integer) { b.append("PUSH_INT("); b.append(((Number) cst).intValue()); b.append("); /* LDC */\n"); } else if (cst instanceof Float) { Float f = (Float) cst; b.append("PUSH_FLOAT("); if (f.isInfinite()) { if (f.floatValue() > 0) { b.append("1.0f / 0.0f"); } else { b.append("-1.0f / 0.0f"); }/* w w w . j a v a 2 s . c o m*/ } else { if (f.isNaN()) { b.append("0.0/0.0"); } else { b.append(f.floatValue()); } } b.append("); /* LDC */\n"); } else if (cst instanceof Long) { b.append("PUSH_LONG("); if (((Number) cst).longValue() == Long.MIN_VALUE) { // min value in C is 1 less (more really) b.append("LLONG_MIN"); } else { b.append(((Number) cst).longValue()).append("LL"); } b.append("); /* LDC */\n"); } else if (cst instanceof Double) { Double d = (Double) cst; b.append("PUSH_DOUBLE("); if (d.isInfinite()) { if (d.floatValue() > 0) { b.append("1.0 / 0.0"); } else { b.append("-1.0 / 0.0"); } } else { if (d.isNaN()) { b.append("0.0/0.0"); } else { b.append(d.doubleValue()); } } b.append("); /* LDC */\n"); } else if (cst instanceof String) { b.append("/* LDC: '"); b.append(((String) cst).replace('\n', ' ').replace("*/", "*\\/")); b.append("'*/\n PUSH_POINTER(STRING_FROM_CONSTANT_POOL_OFFSET("); b.append(Parser.addToConstantPool((String) cst)); b.append("));\n"); } else if (cst instanceof Type) { // TODO... int sort = ((Type) cst).getSort(); Type tp = (Type) cst; if (sort == Type.OBJECT) { b.append("/* LDC: '"); b.append(tp.getInternalName().replace('/', '_').replace('$', '_')); b.append("'*/\n PUSH_POINTER((JAVA_OBJECT)&class__"); b.append(tp.getInternalName().replace('/', '_').replace('$', '_')); b.append(");\n"); } else if (sort == Type.ARRAY) { b.append("/* LDC Array: '"); b.append(tp.getInternalName().replace('/', '_').replace('$', '_')); b.append("'*/\n PUSH_POINTER((JAVA_OBJECT)&class_array"); b.append(tp.getDimensions()); b.append("__"); Type ttt = tp.getElementType(); switch (ttt.getSort()) { case Type.BOOLEAN: b.append("JAVA_BOOLEAN"); break; case Type.BYTE: b.append("JAVA_BYTE"); break; case Type.CHAR: b.append("JAVA_CHAR"); break; case Type.DOUBLE: b.append("JAVA_DOUBLE"); break; case Type.FLOAT: b.append("JAVA_FLOAT"); break; case Type.INT: b.append("JAVA_INT"); break; case Type.LONG: b.append("JAVA_LONG"); break; case Type.SHORT: b.append("JAVA_SHORT"); break; default: b.append(ttt.getInternalName().replace('/', '_').replace('$', '_')); break; } b.append(");\n"); } else if (sort == Type.METHOD) { b.append("/* UNKNOWN CST type internal: "); b.append(tp.getInternalName()); b.append(" */"); } else { b.append("/* UNKNOWN CST type internal: "); b.append(tp.getInternalName()); b.append(" */"); } } else if (cst instanceof Handle) { //((Handle)cst). b.append("/* UNKNOWN CST type: "); b.append(cst.getClass().getName()); b.append(" */"); } }