List of usage examples for org.objectweb.asm Type getSort
public int getSort()
From source file:analysis.ReferenceGenerator.java
License:Open Source License
private void addTypeClassRef(Type type) { if (type.getSort() == Type.OBJECT) { addClassRef(type.getInternalName()); } }
From source file:apb.processors.NotNullClassInstrumenter.java
License:Apache License
private static boolean isReferenceType(Type type) { return type.getSort() == 10 || type.getSort() == 9; }
From source file:ca.weblite.asm.JavaSourceMirrorLoader.java
@Override public MirrorType findMirror(Type type) { MirrorType out = super.findMirror(type); if (out != null) { return out; }/* w ww . j av a 2 s.co m*/ if (type.getSort() == Type.ARRAY) { return findArrayMirror(Type.getType(type.getDescriptor().substring(1))); } ClassNode node = loader.findClass(type); if (node != null) { BytecodeMirror mirror = new BytecodeMirror(context, node, ancestorLoader); return mirror; } return null; }
From source file:ca.weblite.mirah.ant.mirrors.JavaSourceMirrorLoader.java
@Override public MirrorType findMirror(Type type) { MirrorType out = null;/*from www . j av a 2 s. c om*/ if ((out = super.findMirror(type)) == null) { if (type.getSort() == Type.ARRAY) { return findArrayMirror(Type.getType(type.getDescriptor().substring(1))); } String path = null; String[] parts = type.getInternalName().split("/"); int len = parts.length; while (path == null && len > 0) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < len; i++) { sb.append(parts[i]).append("/"); } String test = sb.substring(0, sb.length() - 1) + ".java"; path = findInClassPath(test); } ClassNode node = new ClassNode(); } return out; }
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 . ja v a 2 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
private Object[] addReturnTypeTo(Object[] stackContent, Type returnType) { int sort = returnType.getSort(); if (sort == Type.VOID) return stackContent; if (sort == Type.ARRAY || sort == Type.OBJECT) return addTo(stackContent, returnType.getInternalName()); // else primitive type switch (sort) { case Type.BOOLEAN: case Type.BYTE: case Type.CHAR: case Type.SHORT: case Type.INT: return addTo(stackContent, Opcodes.INTEGER); case Type.LONG: return addTo(stackContent, Opcodes.LONG); //return addTo(addTo(stackContent, Opcodes.LONG), Opcodes.TOP); }//from w w w . j av a2 s .c o m return stackContent; }
From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java
License:Apache License
private static void explodeOnStack(MethodVisitor mv, ConversionContext cc, boolean wantTheConversion) { Type[] args = wantTheConversion ? cc.outArgs : cc.inArgs; // stack >> ... allParamsArr for (int i = 0; i < args.length; i++) { // stack >> ... allParamsArr Type oa = args[i]; int oaSort = oa.getSort(); mv.visitInsn(DUP);/*w ww . j a v a2 s . c o m*/ mv.visitLdcInsn(i); mv.visitInsn(AALOAD); boolean keepBothVersions = (oa.getSort() == Type.ARRAY); if (keepBothVersions) { mv.visitTypeInsn(CHECKCAST, "[" + OBJ_TYPE.getDescriptor()); mv.visitLdcInsn(wantTheConversion ? 1 : 0); mv.visitInsn(AALOAD); } if (oaSort == Type.ARRAY || oaSort == Type.OBJECT) { // else: primitive type mv.visitTypeInsn(CHECKCAST, oa.getInternalName()); } else { String jWrapperName = getJWrapper(oa).getInternalName(); mv.visitTypeInsn(CHECKCAST, jWrapperName); mv.visitMethodInsn(INVOKEVIRTUAL, jWrapperName, getWrapperToPrimitiveMethod(oa), "()" + oa.getDescriptor(), false); } if (oa.getSize() == 2) { // Object DD Swap when double or long mv.visitInsn(DUP2_X1); // DD Object DD mv.visitInsn(POP2); // DD Object } else { mv.visitInsn(SWAP); } // stack >> ... nprmI allParamsArr } mv.visitInsn(POP); // stack >> ... nprm0 nprm1 nprm2... }
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 . java2 s . 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
private void createConvertMethod(String convertDesc, ConversionContext cc) { if (ccv.isProxyMethod(COJAC_TYPE_CONVERT_NAME, convertDesc)) return; // the method already exists MethodVisitor newMv = ccv.addProxyMethod(ACC_STATIC, COJAC_TYPE_CONVERT_NAME, convertDesc, null, null); int varIndex = 0; newMv.visitLdcInsn(cc.outArgs.length + 1); // additional cell for the AllAsObjects array newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName()); // stack >> prmsArr newMv.visitInsn(DUP);/*from w ww . ja va 2 s .c o m*/ newMv.visitLdcInsn(cc.outArgs.length); newMv.visitInsn(DUP); newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName()); // stack >> prmsArr prmsArr n asObjArr newMv.visitInsn(AASTORE); // stack >> prmsArr for (int i = 0; i < cc.outArgs.length; i++) { Type ia = cc.inArgs[i]; newMv.visitInsn(DUP); newMv.visitInsn(DUP); newMv.visitLdcInsn(cc.outArgs.length); // stack >> prmsArr prmsArr prmsArr n newMv.visitInsn(AALOAD); newMv.visitTypeInsn(CHECKCAST, "[" + OBJ_TYPE.getDescriptor()); // stack >> prmsArr prmsArr asObjArr newMv.visitLdcInsn(i); // stack >> prmsArr prmsArr asObjArr i newMv.visitVarInsn(getLoadOpcode(ia), varIndex); convertPrimitiveToObject(newMv, cc.inArgs[i]); // stack >> prmsArr prmsArr asObjArr i pi newMv.visitInsn(AASTORE); // stack >> prmsArr prmsArr newMv.visitLdcInsn(i); // stack >> prmsArr prmsArr i newMv.visitVarInsn(getLoadOpcode(ia), varIndex); varIndex += cc.inArgs[i].getSize(); // stack >> prmsArr prmsArr i pi boolean keepBothVersions = (ia.getSort() == Type.ARRAY); if (keepBothVersions) { // keep the old reference (the Cojac one) newMv.visitLdcInsn(2); newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName()); // stack >> prmsArr prmsArr i pi piArr newMv.visitInsn(DUP_X1); // stack >> prmsArr prmsArr i piArr pi piArr newMv.visitInsn(SWAP); // stack >> prmsArr prmsArr i piArr piArr pi newMv.visitInsn(DUP_X1); newMv.visitLdcInsn(0); newMv.visitInsn(SWAP); // stack >> prmsArr prmsArr i piArr pi piArr pi 0 newMv.visitInsn(AASTORE); // stack >> prmsArr prmsArr i piArr } // stack >> prmsArr prmsArr i pi if (cc.needsConversion(i)) { convertCojacToRealType(cc.asOriginalJavaType(i), newMv); } else if (cc.shouldObjParamBeConverted && (ia.equals(OBJ_TYPE) || ia.equals(OBJ_ARRAY_TYPE))) { convertObjectToReal(newMv, ia); } /* This is where we could decide to convert back to JavaWrapper * when the argument is declared as Object * We don't do that to keep "enriched numbers" in collections * but sometimes we would like to convert, eg printf, format... */ convertPrimitiveToObject(newMv, cc.outArgs[i]); // stack >> prmsArr prmsArr i pi if (keepBothVersions) { // keep the new reference (the java one) newMv.visitInsn(SWAP); newMv.visitInsn(DUP_X1); newMv.visitInsn(SWAP); newMv.visitLdcInsn(1); newMv.visitInsn(SWAP); newMv.visitInsn(AASTORE); } // stack >> prmsArr prmsArr i pi newMv.visitInsn(AASTORE); // stack >> prmsArr } newMv.visitInsn(ARETURN); newMv.visitMaxs(0, 0); }
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; }