/** * Visits a local variable declaration. * * @param name * the name of a local variable. * @param desc * the type descriptor of this local variable. * @param signature * the type signature of this local variable. May be * <tt>null</tt> if the local variable type does not use generic * types. * @param start * the first instruction corresponding to the scope of this local * variable (inclusive). * @param end * the last instruction corresponding to the scope of this local * variable (exclusive). * @param index * the local variable's index. * @throws IllegalArgumentException * if one of the labels has not already been visited by this * visitor (by the {@link #visitLabel visitLabel} method). */ public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { if (mv != null) { mv.visitLocalVariable(name, desc, signature, start, end, index); } }
mv.visitLocalVariable(readUTF8(u + 4, c), readUTF8(u + 6, c), vsignature, labels[start], labels[start + length], index);
@Override public void visitLocalVariable(final String name, final String desc, final String signature, final Label start, final Label end, final int index) { p.visitLocalVariable(name, desc, signature, start, end, index); super.visitLocalVariable(name, desc, signature, start, end, index); }
/** * Makes the given visitor visit this local variable declaration. * * @param mv * a method visitor. */ public void accept(final MethodVisitor mv) { mv.visitLocalVariable(name, desc, signature, start.getLabel(), end.getLabel(), index); } }
@Override public void visitLocalVariable(final String name, final String desc, final String signature, final Label start, final Label end, final int index) { int newIndex = remap(index, Type.getType(desc)); mv.visitLocalVariable(name, desc, signature, start, end, newIndex); }
private static void defineNewArray(Class<?> clazz, String classNameInternal,ClassWriter cw){ MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "newArray", "(I)Ljava/lang/Object;", null, null); Label l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 1); if(clazz.isPrimitive()){ mv.visitIntInsn(Opcodes.NEWARRAY,getPrimitiveTypeCode(clazz)); }else{ mv.visitTypeInsn(ANEWARRAY, classNameInternal); } mv.visitInsn(ARETURN); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("this", A_CLASS_NAME, null, l0, l1, 0); mv.visitLocalVariable("length", "I", null, l0, l1, 1); mv.visitMaxs(1, 2); mv.visitEnd(); }
Label l2 = new Label(); mv.visitLabel(l2); mv.visitLocalVariable("this", A_CLASS_NAME, null, l0, l2, 0); mv.visitLocalVariable("array", "Ljava/lang/Object;", null, l0, l2, 1); mv.visitLocalVariable("index", "I", null, l0, l2, 2); mv.visitLocalVariable("value", "Ljava/lang/Object;", null, l0, l2, 3); mv.visitMaxs(3, 4); mv.visitEnd(); Label l2 = new Label(); mv.visitLabel(l2); mv.visitLocalVariable("this", A_CLASS_NAME, null, l0, l2, 0); mv.visitLocalVariable("array", "Ljava/lang/Object;", null, l0, l2, 1); mv.visitLocalVariable("index", "I", null, l0, l2, 2); mv.visitLocalVariable("value", "Ljava/lang/Object;", null, l0, l2, 3); mv.visitMaxs(3, 4); mv.visitEnd();
Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("this", A_CLASS_NAME, null, l0, l1, 0); mv.visitLocalVariable("array", "Ljava/lang/Object;", null, l0, l1, 1); mv.visitLocalVariable("index", "I", null, l0, l1, 2); mv.visitMaxs(2, 3); mv.visitEnd(); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("this", A_CLASS_NAME, null, l0, l1, 0); mv.visitLocalVariable("array", "Ljava/lang/Object;", null, l0, l1, 1); mv.visitLocalVariable("index", "I", null, l0, l1, 2); mv.visitMaxs(2, 3); mv.visitEnd();
Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("this", A_CLASS_NAME, null, l0, l1, 0); mv.visitLocalVariable("array", "Ljava/lang/Object;", null, l0, l1, 1); mv.visitMaxs(1, 2); mv.visitEnd(); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("this", A_CLASS_NAME, null, l0, l1, 0); mv.visitLocalVariable("array", "Ljava/lang/Object;", null, l0, l1, 1); mv.visitMaxs(1, 2); mv.visitEnd();