List of usage examples for org.objectweb.asm Type getElementType
public Type getElementType()
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) {// www. j a v a 2 s . c om 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
private static void convertReturnType(MethodVisitor mv, String desc) { Type returnType = Type.getReturnType(desc); Type cojacType = afterFloatReplacement(returnType); if (returnType.equals(cojacType) == false) { convertRealToCojacType(returnType, mv); }/*from w w w . j a v a 2s .c o m*/ if (returnType.equals(OBJ_TYPE)) { convertObjectToCojac(mv, returnType); } else if (returnType.getSort() == Type.ARRAY && returnType.getElementType().equals(OBJ_TYPE)) { convertObjectToCojac(mv, returnType); } }
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); }/*from w w w.ja v a2s .com*/ mv.visitTypeInsn(CHECKCAST, afterFloatReplacement(realType).getInternalName()); } }
From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java
License:Apache License
private static boolean isPrimitiveFloatOrDoubleArray(Type realType) { if (realType.getSort() != Type.ARRAY) return false; Type t = realType.getElementType(); if (t.equals(Type.FLOAT_TYPE) || t.equals(Type.DOUBLE_TYPE)) return true; return false; }
From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java
License:Apache License
private static boolean isJWrapperFloatOrDoubleArray(Type realType) { if (realType.getSort() != Type.ARRAY) return false; Type t = realType.getElementType(); if (t.equals(JWRAPPER_DOUBLE_TYPE) || t.equals(JWRAPPER_FLOAT_TYPE)) return true; return false; }
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); }//from ww w.ja va2 s . com 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 a2 s . co 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);/*w ww . j av a2s . c o m*/ 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:co.cask.cdap.internal.app.runtime.batch.distributed.MapReduceContainerHelper.java
License:Apache License
/** * Rewrites the TwillLauncher bytecode as described * in {@link #saveLauncher(Configuration, File, List)}. * * @param hConf the hadoop configuration * @param sourceByteCode the original bytecode of the TwillLauncher * @param output output stream for writing the modified bytecode. * @throws IOException/* ww w . ja v a 2s . c o m*/ */ private static void rewriteLauncher(Configuration hConf, InputStream sourceByteCode, OutputStream output) throws IOException { URI frameworkURI = getFrameworkURI(hConf); if (frameworkURI == null) { ByteStreams.copy(sourceByteCode, output); return; } // It is localized as archive, and due to TWILL-144, a suffix is added. We need to reverse the effect of it // by creating an extra symlink as the first line in the TwillLauncher.main() method. String ext = Paths.getExtension(frameworkURI.getPath()); if (ext.isEmpty()) { ByteStreams.copy(sourceByteCode, output); return; } final String sourceName = frameworkURI.getFragment(); final String targetName = sourceName + "." + ext; ClassReader cr = new ClassReader(sourceByteCode); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); cr.accept(new ClassVisitor(Opcodes.ASM5, cw) { @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); if (!name.equals("main")) { return mv; } Type[] argTypes = Type.getArgumentTypes(desc); if (argTypes.length != 1) { return mv; } Type argType = argTypes[0]; if (argType.getSort() != Type.ARRAY || !String.class.getName().equals(argType.getElementType().getClassName())) { return mv; } return new AdviceAdapter(Opcodes.ASM5, mv, access, name, desc) { @Override protected void onMethodEnter() { visitLdcInsn(sourceName); visitLdcInsn(targetName); invokeStatic(Type.getType(MapReduceContainerSymLinker.class), Methods.getMethod(void.class, "symlink", String.class, String.class)); } }; } }, ClassReader.EXPAND_FRAMES); output.write(cw.toByteArray()); }
From source file:com.android.build.gradle.shrinker.DependencyFinderVisitor.java
License:Apache License
/** * Extracts a dependency target from a {@link Type} object. Ignores SDK classes. * * @param type A {@link Type} object, encountered by the visitor. Cannot be of sort METHOD. * @return If the {@link Type} is for a class or an object array, the internal name of that * class. Null if the that class is an SDK class. * @see AbstractShrinker#isSdkPackage(String) *//*from www.jav a 2 s .c om*/ @Nullable private static String getTargetClassName(Type type) { switch (type.getSort()) { case Type.VOID: case Type.SHORT: case Type.INT: case Type.LONG: case Type.FLOAT: case Type.BOOLEAN: case Type.BYTE: case Type.DOUBLE: case Type.CHAR: return null; case Type.ARRAY: return getTargetClassName(type.getElementType()); case Type.OBJECT: String name = type.getInternalName(); return isSdkPackage(name) ? null : name; case Type.METHOD: throw new IllegalArgumentException("Can't extract one class from a METHOD Type."); default: throw new AssertionError("Unknown Type sort " + type.getSort()); } }