public void visitInsn(int opcode) { if ((opcode >= IRETURN && opcode <= RETURN)) { Type tp = returnType; if (tp.getSort() == Type.ARRAY && tp.getElementType().getSort() == Type.BYTE) { mv.visitInsn(Opcodes.DUP); mv.visitVarInsn(Opcodes.ALOAD, 1);// stat mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACEMAIN, START_METHOD, START_SIGNATURE, false); } } mv.visitInsn(opcode); } }
public void visitInsn(int opcode) { if ((opcode >= IRETURN && opcode <= RETURN)) { Type tp = returnType; if (tp.getSort() == Type.ARRAY && tp.getElementType().getSort() == Type.BYTE) { mv.visitInsn(Opcodes.DUP); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, this.className, KEY_ELEMENT_FIELD, "Ljava/lang/Object;"); mv.visitMethodInsn(Opcodes.INVOKESTATIC, TRACEMAIN, START_METHOD, START_SIGNATURE, false); } } mv.visitInsn(opcode); } }
public static void main(String[] args) { Type type = Type.getReturnType("(Z)[I"); System.out.println("type = " + type.getSort()); System.out.println("dim = " + type.getDimensions()); System.out.println("element = " + type.getElementType()); }
private void addType(Type t) { switch (t.getSort()) { case Type.ARRAY: addType(t.getElementType()); break; case Type.OBJECT: parseClassName(t.getClassName().replace('.', '/')); break; default: // Do nothing break; } }
return "double"; case ARRAY: StringBuilder stringBuilder = new StringBuilder(getElementType().getClassName()); for (int i = getDimensions(); i > 0; --i) { stringBuilder.append("[]");
return "char"; case Type.ARRAY: { StringBuilder sb = new StringBuilder(printType(type.getElementType())); for (int i = 0; i < type.getDimensions(); ++i) { sb.append("[]");
switch (returnType.getSort()) { case Type.ARRAY: if(returnType.getElementType().getSort() == Type.INT) { lvPosReturn = newLocal(returnType); mv.visitVarInsn(Opcodes.ASTORE, lvPosReturn);
switch (returnType.getSort()) { case Type.ARRAY: if(returnType.getElementType().getSort() == Type.INT) {
private static void loadArrayType(MethodVisitor mv, Type type, Type ownerType) { loadType(mv, type.getElementType(), ownerType); mv.visitLdcInsn(type.getDimensions()); mv.visitMethodInsn(INVOKESTATIC, bytecodeUtilType.getInternalName(), "getArrayClass", "(Ljava/lang/Class;I)Ljava/lang/Class;", false); }
processType(sourceType, type.getElementType()); return toReturn;
private static Class<?> getType(Type type) throws ClassNotFoundException { switch (type.getSort()) { case Type.VOID: return void.class; case Type.BOOLEAN: return boolean.class; case Type.CHAR: return char.class; case Type.BYTE: return byte.class; case Type.SHORT: return short.class; case Type.INT: return int.class; case Type.FLOAT: return float.class; case Type.LONG: return long.class; case Type.DOUBLE: return double.class; case Type.ARRAY: return Util.getArrayClass(getType(type.getElementType()), type.getDimensions()); default: return Class.forName(type.getClassName(), false, null); } }
private static Type getArrayElementType(Type arrayType) { int dim = arrayType.getDimensions(); if(dim < 1) throw new IllegalArgumentException("Not an array type: " + arrayType); if(dim > 1) { String descr = arrayType.getDescriptor(); return Type.getType(descr.substring(1)); } return arrayType.getElementType(); }
static Optional<String> getClassName(Type aType) { switch (aType.getSort()) { case Type.ARRAY: return getClassName(aType.getElementType()); case Type.OBJECT: return Optional.of(aType.getClassName()); default: return Optional.empty(); } }
private void addType(final Type t) { switch (t.getSort()) { case Type.ARRAY: addType( t.getElementType() ); break; case Type.OBJECT: addName( t.getClassName().replace( '.', '/' ) ); break; } }
private String getReturnTypeDesc(Type t) { if(t.getSort() == Type.OBJECT) { return "Ljava/lang/Object;"; } else if(t.getSort() == Type.ARRAY) { return "["+getReturnTypeDesc(t.getElementType()); } else return t.getDescriptor(); }
private void addType(Type type) { if (type.getSort() == Type.ARRAY) { type = type.getElementType(); } if (type.getSort() == Type.OBJECT) { addClass(type.getInternalName()); } }
public static String getFullyQualifiedTypeName(Type type) { if (type.getSort() == Type.OBJECT) { return type.getClassName(); } else if (type.getSort() == Type.ARRAY) { return getFullyQualifiedTypeName(type.getElementType()); } else { return null; } }
public static String getFullyQualifiedTypeName(Type type) { if (type.getSort() == Type.OBJECT) { return type.getClassName(); } else if (type.getSort() == Type.ARRAY) { return getFullyQualifiedTypeName(type.getElementType()); } else { return null; } }
private void addType(Type t) { switch (t.getSort()) { case Type.ARRAY: addType(t.getElementType()); break; case Type.OBJECT: addNameInternal(t.getClassName(), false); break; } }
private void visitType(Type type) { // FIXME: Scan arrays too! if (type.getSort() == Type.OBJECT) { String name = type.getInternalName(); if (jar.containsClass(name)) { classes.add(name); } } if (type.getSort() == Type.ARRAY) { visitType(type.getElementType()); } }