当前位置: 首页 > news >正文

购物网站设计目标广州珈瑶公司是哪一年注册的

购物网站设计目标,广州珈瑶公司是哪一年注册的,二极管 东莞网站建设,宁波城乡建设网站什么是ASM #xff1a;ASM是一个用于处理Java字节码的开源Java库。 因此#xff0c;它具有与Apache BCEL相同的目的。 由于本文假定读者具有Java类文件格式的某些知识#xff0c;因此建议在此处进行阅读。 那么它与BCEL有何不同#xff1f; 首先#xff0c;它允许使用事件… 什么是ASM ASM是一个用于处理Java字节码的开源Java库。 因此它具有与Apache BCEL相同的目的。 由于本文假定读者具有Java类文件格式的某些知识因此建议在此处进行阅读。 那么它与BCEL有何不同 首先它允许使用事件驱动的方式来操作字节码而无需为增加少量内存而将整个类加载到内存中。 其次它没有针对每条指令的单独类。 相反它直接处理操作码并且只包含代表每个操作码的常量。 这在很大程度上减小了库的大小。 因此ASM更轻巧更智能。 但是ASM还具有通过将整个类加载到内存中来处理类文件的机制以防操作过于复杂而无法通过基于事件的处理来处理。 当前的ASM稳定版本是3.3。 但是4.0 RC2版本已经发布。 因此我将在这里讨论该版本。 基于事件的处理与内存处理 ASM支持事件驱动和内存处理。 事件驱动的处理是轻量级的但有一点限制。 另一方面在存储器中处理更灵活且易于使用但它的重量更重。 内存处理器内部使用事件驱动处理器就像DOM XML解析器内部使用SAX XML解析器一样。 下面的程序演示了侦听类处理事件。 ASMHelloWorld.java package com.geekyarticles.asm;import java.io.IOException; import java.io.InputStream; import java.util.Arrays;import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.Attribute; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes;public class ASMHelloWorld {/*** param args* throws IOException */public static void main(String[] args) throws IOException {ClassVisitor clnew ClassVisitor(Opcodes.ASM4) {/*** Called when a class is visited. This is the method called first*/Overridepublic void visit(int version, int access, String name,String signature, String superName, String[] interfaces) {System.out.println(Visiting class: name);System.out.println(Class Major Version: version);System.out.println(Super class: superName);super.visit(version, access, name, signature, superName, interfaces);}/*** Invoked only when the class being visited is an inner class*/Overridepublic void visitOuterClass(String owner, String name, String desc) {System.out.println(Outer class: owner);super.visitOuterClass(owner, name, desc);}/***Invoked when a class level annotation is encountered*/Overridepublic AnnotationVisitor visitAnnotation(String desc,boolean visible) {System.out.println(Annotation: desc);return super.visitAnnotation(desc, visible);}/*** When a class attribute is encountered */Overridepublic void visitAttribute(Attribute attr) {System.out.println(Class Attribute: attr.type);super.visitAttribute(attr);}/***When an inner class is encountered */Overridepublic void visitInnerClass(String name, String outerName,String innerName, int access) {System.out.println(Inner Class: innerName defined in outerName);super.visitInnerClass(name, outerName, innerName, access);}/*** When a field is encountered*/Overridepublic FieldVisitor visitField(int access, String name,String desc, String signature, Object value) {System.out.println(Field: name desc value:value);return super.visitField(access, name, desc, signature, value);}Overridepublic void visitEnd() {System.out.println(Method ends here);super.visitEnd();}/*** When a method is encountered*/Overridepublic MethodVisitor visitMethod(int access, String name,String desc, String signature, String[] exceptions) {System.out.println(Method: name desc);return super.visitMethod(access, name, desc, signature, exceptions);}/*** When the optional source is encountered*/Overridepublic void visitSource(String source, String debug) {System.out.println(Source: source);super.visitSource(source, debug);}};InputStream inASMHelloWorld.class.getResourceAsStream(/java/lang/String.class);ClassReader classReadernew ClassReader(in);classReader.accept(cl, 0);}} 上面的程序除了打印何时到达什么事件外什么也不做。 目前我们正在访问类java.lang.String。 请注意在Java类中事物按顺序出现。 例如方法总是出现在字段之后。 事件也以相同的顺序发生。 有关更多信息请阅读此处讨论的类文件格式。 代码本身非常简单不需要太多解释。 我们首先扩展ClassVisitor类并覆盖必要的方法。 然后我们设置一个ClassReader并调用其accept方法将ClassVisitor的对象作为参数传递。 版本4中的新功能 直到版本3.3为止ClassVisitor是一个接口因此我们必须实现所有方法。 为了使开发人员摆脱这种混乱局面有一个ClassAdapter它没有所有方法的op实现开发人员可以扩展这些方法。 在版本4中ClassVisitor已成为一个类并且ClassAdapter不再存在。 注意一些访问者方法返回其他方法的对象。 当遍历特定类型的对象时将调用那些Visitor对象的方法。 下面的示例演示如何使用MethodVisitor逐步遍历方法的代码。 DemoClassIntructionViewer.java package com.geekyarticles.asm;import java.io.InputStream;import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import org.objectweb.asm.commons.InstructionAdapter;public class DemoClassInstructionViewer {public static class MethodPrinterVisitor extends ClassVisitor{public MethodPrinterVisitor(int api, ClassVisitor cv) {super(api, cv);}public MethodPrinterVisitor(int api) {super(api);}Overridepublic MethodVisitor visitMethod(int access, String name, String desc,String signature, String[] exceptions) {System.out.println(\nnamedesc);MethodVisitor oriMv new MethodVisitor(4) {};//An instructionAdapter is a special MethodVisitor that//lets us process instructions easilyInstructionAdapter instMvnew InstructionAdapter(oriMv){Overridepublic void visitInsn(int opcode) {System.out.println(opcode);super.visitInsn(opcode);}};return instMv;}}public static void main(String[] args) throws Exception{InputStream inASMHelloWorld.class.getResourceAsStream(/com/geekyarticles/asm/ASMHelloWorld.class);ClassReader classReadernew ClassReader(in);classReader.accept(new MethodPrinterVisitor(4), 0);}} 以下是这种情况下的输出。 init()V 177main([Ljava/lang/String;)V 89 89 3 177 请注意这些指令是直接操作码。 生成类在讨论生成类的详细信息之前我将讨论ASM中提供的一个很酷的东西。 它称为ASMifier。 它是一个类用于打印生成给定类所需的代码。 以下示例显示如何使用ASMifier。 该类具有主要方法因此可以在命令提示符下使用。 java -cp asm-all-4.0_RC2.jar org.objectweb.asm.util.ASMifier java.lang.StringStringDump.java 以下是输出。 StringDump.java package asm.java.lang; import java.util.*; import org.objectweb.asm.*; import org.objectweb.asm.attrs.*; public class StringDump implements Opcodes {public static byte[] dump () throws Exception {ClassWriter cw new ClassWriter(0); FieldVisitor fv; MethodVisitor mv; AnnotationVisitor av0;cw.visit(V1_5, ACC_PUBLIC ACC_FINAL ACC_SUPER, java/lang/String, Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/ComparableLjava/lang/String;;Ljava/lang/CharSequence;, java/lang/Object, new String[] { java/io/Serializable, java/lang/Comparable, java/lang/CharSequence });cw.visitInnerClass(java/lang/String$1, java/lang/String, null, ACC_STATIC ACC_SYNTHETIC);cw.visitInnerClass(java/lang/String$CaseInsensitiveComparator, java/lang/String, CaseInsensitiveComparator, ACC_PRIVATE ACC_STATIC);{ fv cw.visitField(ACC_PRIVATE ACC_FINAL, value, [C, null, null); fv.visitEnd(); } { fv cw.visitField(ACC_PRIVATE ACC_FINAL, offset, I, null, null); fv.visitEnd(); } { fv cw.visitField(ACC_PRIVATE ACC_FINAL, count, I, null, null); fv.visitEnd(); } { fv cw.visitField(ACC_PRIVATE, hash, I, null, null); fv.visitEnd(); } { fv cw.visitField(ACC_PRIVATE ACC_FINAL ACC_STATIC, serialVersionUID, J, null, new Long(-6849794470754667710L)); fv.visitEnd(); } { fv cw.visitField(ACC_PRIVATE ACC_FINAL ACC_STATIC, serialPersistentFields, [Ljava/io/ObjectStreamField;, null, null); fv.visitEnd(); } { fv cw.visitField(ACC_PUBLIC ACC_FINAL ACC_STATIC, CASE_INSENSITIVE_ORDER, Ljava/util/Comparator;, Ljava/util/ComparatorLjava/lang/String;;, null); fv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ()V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitInsn(RETURN); mv.visitMaxs(2, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, (Ljava/lang/String;)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 2); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 3); mv.visitVarInsn(ALOAD, 3); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IF_ICMPLE, l0); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 5); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESTATIC, java/util/Arrays, copyOfRange, ([CII)[C); mv.visitVarInsn(ASTORE, 4); Label l1 new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ASTORE, 4); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 2); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 4); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitInsn(RETURN); mv.visitMaxs(4, 6); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ([C)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/lang/StringValue, from, ([C)[C); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitInsn(RETURN); mv.visitMaxs(2, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ([CII)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IFGE, l0); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 3); Label l1 new Label(); mv.visitJumpInsn(IFGE, l1); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(ISUB); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPLE, l2); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 3); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESTATIC, java/util/Arrays, copyOfRange, ([CII)[C); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitInsn(RETURN); mv.visitMaxs(5, 4); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ([III)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IFGE, l0); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 3); Label l1 new Label(); mv.visitJumpInsn(IFGE, l1); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(ISUB); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPLE, l2); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l2); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 4); mv.visitInsn(ICONST_1); mv.visitVarInsn(ISTORE, 5); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(IADD); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitVarInsn(ASTORE, 6); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ISTORE, 7); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 8); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 9); Label l3 new Label(); mv.visitLabel(l3); mv.visitVarInsn(ILOAD, 9); mv.visitVarInsn(ILOAD, 3); Label l4 new Label(); mv.visitJumpInsn(IF_ICMPGE, l4); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 7); mv.visitIincInsn(7, 1); mv.visitInsn(IALOAD); mv.visitVarInsn(ISTORE, 10); mv.visitVarInsn(ILOAD, 10); Label l5 new Label(); mv.visitJumpInsn(IFGE, l5); mv.visitTypeInsn(NEW, java/lang/IllegalArgumentException); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, java/lang/IllegalArgumentException, init, ()V); mv.visitInsn(ATHROW); mv.visitLabel(l5); mv.visitVarInsn(ILOAD, 5); Label l6 new Label(); mv.visitJumpInsn(IFGT, l6); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitVarInsn(ALOAD, 6); mv.visitInsn(ARRAYLENGTH); mv.visitJumpInsn(IF_ICMPLT, l6); mv.visitVarInsn(ILOAD, 4); Label l7 new Label(); mv.visitJumpInsn(IFNE, l7); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(INEG); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(IMUL); mv.visitIntInsn(BIPUSH, 10); mv.visitInsn(ISHL); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(IDIV); mv.visitVarInsn(ISTORE, 4); mv.visitVarInsn(ILOAD, 4); mv.visitIntInsn(BIPUSH, 10); mv.visitInsn(ISHR); mv.visitVarInsn(ISTORE, 4); mv.visitVarInsn(ILOAD, 4); Label l8 new Label(); mv.visitJumpInsn(IFGT, l8); mv.visitInsn(ICONST_1); mv.visitVarInsn(ISTORE, 4); mv.visitJumpInsn(GOTO, l8); mv.visitLabel(l7); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(ICONST_2); mv.visitInsn(IMUL); mv.visitVarInsn(ISTORE, 4); mv.visitLabel(l8); mv.visitVarInsn(ALOAD, 6); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(ICONST_2); mv.visitInsn(IMUL); mv.visitMethodInsn(INVOKESTATIC, java/lang/Math, min, (II)I); mv.visitVarInsn(ISTORE, 11); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ALOAD, 6); mv.visitInsn(ARRAYLENGTH); mv.visitInsn(ISUB); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(ISUB); mv.visitInsn(ISUB); mv.visitVarInsn(ISTORE, 5); mv.visitVarInsn(ALOAD, 6); mv.visitVarInsn(ILOAD, 11); mv.visitMethodInsn(INVOKESTATIC, java/util/Arrays, copyOf, ([CI)[C); mv.visitVarInsn(ASTORE, 6); mv.visitLabel(l6); mv.visitVarInsn(ILOAD, 10); mv.visitLdcInsn(new Integer(65536)); Label l9 new Label(); mv.visitJumpInsn(IF_ICMPGE, l9); mv.visitVarInsn(ALOAD, 6); mv.visitVarInsn(ILOAD, 8); mv.visitIincInsn(8, 1); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(I2C); mv.visitInsn(CASTORE); Label l10 new Label(); mv.visitJumpInsn(GOTO, l10); mv.visitLabel(l9); mv.visitVarInsn(ILOAD, 10); mv.visitLdcInsn(new Integer(1114111)); Label l11 new Label(); mv.visitJumpInsn(IF_ICMPGT, l11); mv.visitVarInsn(ILOAD, 10); mv.visitVarInsn(ALOAD, 6); mv.visitVarInsn(ILOAD, 8); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toSurrogates, (I[CI)V); mv.visitIincInsn(8, 2); mv.visitIincInsn(5, -1); mv.visitJumpInsn(GOTO, l10); mv.visitLabel(l11); mv.visitTypeInsn(NEW, java/lang/IllegalArgumentException); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, java/lang/IllegalArgumentException, init, ()V); mv.visitInsn(ATHROW); mv.visitLabel(l10); mv.visitIincInsn(9, 1); mv.visitJumpInsn(GOTO, l3); mv.visitLabel(l4); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 6); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 8); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitInsn(RETURN); mv.visitMaxs(4, 12); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_DEPRECATED, init, ([BIII)V, null, null); { av0 mv.visitAnnotation(Ljava/lang/Deprecated;, true); av0.visitEnd(); } mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ILOAD, 4); mv.visitMethodInsn(INVOKESTATIC, java/lang/String, checkBounds, ([BII)V); mv.visitVarInsn(ILOAD, 4); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IFNE, l0); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ISTORE, 6); Label l1 new Label(); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 6); mv.visitIincInsn(6, -1); Label l2 new Label(); mv.visitJumpInsn(IFLE, l2); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 6); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 6); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(IADD); mv.visitInsn(BALOAD); mv.visitIntInsn(SIPUSH, 255); mv.visitInsn(IAND); mv.visitInsn(I2C); mv.visitInsn(CASTORE); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l2); Label l3 new Label(); mv.visitJumpInsn(GOTO, l3); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 2); mv.visitIntInsn(BIPUSH, 8); mv.visitInsn(ISHL); mv.visitVarInsn(ISTORE, 2); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ISTORE, 6); Label l4 new Label(); mv.visitLabel(l4); mv.visitVarInsn(ILOAD, 6); mv.visitIincInsn(6, -1); mv.visitJumpInsn(IFLE, l3); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 6); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 6); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(IADD); mv.visitInsn(BALOAD); mv.visitIntInsn(SIPUSH, 255); mv.visitInsn(IAND); mv.visitInsn(IOR); mv.visitInsn(I2C); mv.visitInsn(CASTORE); mv.visitJumpInsn(GOTO, l4); mv.visitLabel(l3); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 4); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 5); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitInsn(RETURN); mv.visitMaxs(6, 7); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_DEPRECATED, init, ([BI)V, null, null); { av0 mv.visitAnnotation(Ljava/lang/Deprecated;, true); av0.visitEnd(); } mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, ([BIII)V); mv.visitInsn(RETURN); mv.visitMaxs(5, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PRIVATE ACC_STATIC, checkBounds, ([BII)V, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IFGE, l0); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 1); Label l1 new Label(); mv.visitJumpInsn(IFGE, l1); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(ISUB); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPLE, l2); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l2); mv.visitInsn(RETURN); mv.visitMaxs(4, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ([BIILjava/lang/String;)V, null, new String[] { java/io/UnsupportedEncodingException }); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 4); Label l0 new Label(); mv.visitJumpInsn(IFNONNULL, l0); mv.visitTypeInsn(NEW, java/lang/NullPointerException); mv.visitInsn(DUP); mv.visitLdcInsn(charsetName); mv.visitMethodInsn(INVOKESPECIAL, java/lang/NullPointerException, init, (Ljava/lang/String;)V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/String, checkBounds, ([BII)V); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/StringCoding, decode, (Ljava/lang/String;[BII)[C); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 5); mv.visitInsn(ARRAYLENGTH); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 5); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitInsn(RETURN); mv.visitMaxs(4, 6); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ([BIILjava/nio/charset/Charset;)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 4); Label l0 new Label(); mv.visitJumpInsn(IFNONNULL, l0); mv.visitTypeInsn(NEW, java/lang/NullPointerException); mv.visitInsn(DUP); mv.visitLdcInsn(charset); mv.visitMethodInsn(INVOKESPECIAL, java/lang/NullPointerException, init, (Ljava/lang/String;)V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/String, checkBounds, ([BII)V); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/StringCoding, decode, (Ljava/nio/charset/Charset;[BII)[C); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 5); mv.visitInsn(ARRAYLENGTH); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 5); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitInsn(RETURN); mv.visitMaxs(4, 6); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ([BLjava/lang/String;)V, null, new String[] { java/io/UnsupportedEncodingException }); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, ([BIILjava/lang/String;)V); mv.visitInsn(RETURN); mv.visitMaxs(5, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ([BLjava/nio/charset/Charset;)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, ([BIILjava/nio/charset/Charset;)V); mv.visitInsn(RETURN); mv.visitMaxs(5, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ([BII)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/String, checkBounds, ([BII)V); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/StringCoding, decode, ([BII)[C); mv.visitVarInsn(ASTORE, 4); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 4); mv.visitInsn(ARRAYLENGTH); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 4); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitInsn(RETURN); mv.visitMaxs(3, 5); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, ([B)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARRAYLENGTH); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, ([BII)V); mv.visitInsn(RETURN); mv.visitMaxs(4, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, (Ljava/lang/StringBuffer;)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/StringBuffer, toString, ()Ljava/lang/String;); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitInsn(RETURN); mv.visitMaxs(2, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, init, (Ljava/lang/StringBuilder;)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/StringBuilder, toString, ()Ljava/lang/String;); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitInsn(RETURN); mv.visitMaxs(2, 3); mv.visitEnd(); } { mv cw.visitMethod(0, init, (II[C)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 3); mv.visitFieldInsn(PUTFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitFieldInsn(PUTFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 2); mv.visitFieldInsn(PUTFIELD, java/lang/String, count, I); mv.visitInsn(RETURN); mv.visitMaxs(2, 4); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, length, ()I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(IRETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, isEmpty, ()Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l0 new Label(); mv.visitJumpInsn(IFNE, l0); mv.visitInsn(ICONST_1); Label l1 new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); mv.visitInsn(ICONST_0); mv.visitLabel(l1); mv.visitInsn(IRETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, charAt, (I)C, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLT, l1); mv.visitLabel(l0); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitInsn(IRETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, codePointAt, (I)I, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLT, l1); mv.visitLabel(l0); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IADD); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, codePointAtImpl, ([CII)I); mv.visitInsn(IRETURN); mv.visitMaxs(4, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, codePointBefore, (I)I, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitVarInsn(ISTORE, 2); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLT, l1); mv.visitLabel(l0); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IADD); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, codePointBeforeImpl, ([CII)I); mv.visitInsn(IRETURN); mv.visitMaxs(3, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, codePointCount, (II)I, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitJumpInsn(IF_ICMPGT, l0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLE, l1); mv.visitLabel(l0); mv.visitTypeInsn(NEW, java/lang/IndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, java/lang/IndexOutOfBoundsException, init, ()V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ISUB); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, codePointCountImpl, ([CII)I); mv.visitInsn(IRETURN); mv.visitMaxs(4, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, offsetByCodePoints, (II)I, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLE, l1); mv.visitLabel(l0); mv.visitTypeInsn(NEW, java/lang/IndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, java/lang/IndexOutOfBoundsException, init, ()V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, offsetByCodePointsImpl, ([CIIII)I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitInsn(ISUB); mv.visitInsn(IRETURN); mv.visitMaxs(5, 3); mv.visitEnd(); } { mv cw.visitMethod(0, getChars, ([CI)V, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitMethodInsn(INVOKESTATIC, java/lang/System, arraycopy, (Ljava/lang/Object;ILjava/lang/Object;II)V); mv.visitInsn(RETURN); mv.visitMaxs(5, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, getChars, (II[CI)V, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFGE, l0); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLE, l1); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPLE, l2); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ISUB); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IADD); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ISUB); mv.visitMethodInsn(INVOKESTATIC, java/lang/System, arraycopy, (Ljava/lang/Object;ILjava/lang/Object;II)V); mv.visitInsn(RETURN); mv.visitMaxs(6, 5); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_DEPRECATED, getBytes, (II[BI)V, null, null); { av0 mv.visitAnnotation(Ljava/lang/Deprecated;, true); av0.visitEnd(); } mv.visitCode(); mv.visitVarInsn(ILOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFGE, l0); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLE, l1); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPLE, l2); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ISUB); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l2); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ISTORE, 5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 6); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 7); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 8); Label l3 new Label(); mv.visitLabel(l3); mv.visitVarInsn(ILOAD, 7); mv.visitVarInsn(ILOAD, 6); Label l4 new Label(); mv.visitJumpInsn(IF_ICMPGE, l4); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 5); mv.visitIincInsn(5, 1); mv.visitVarInsn(ALOAD, 8); mv.visitVarInsn(ILOAD, 7); mv.visitIincInsn(7, 1); mv.visitInsn(CALOAD); mv.visitInsn(I2B); mv.visitInsn(BASTORE); mv.visitJumpInsn(GOTO, l3); mv.visitLabel(l4); mv.visitInsn(RETURN); mv.visitMaxs(4, 9); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, getBytes, (Ljava/lang/String;)[B, null, new String[] { java/io/UnsupportedEncodingException }); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFNONNULL, l0); mv.visitTypeInsn(NEW, java/lang/NullPointerException); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, java/lang/NullPointerException, init, ()V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitMethodInsn(INVOKESTATIC, java/lang/StringCoding, encode, (Ljava/lang/String;[CII)[B); mv.visitInsn(ARETURN); mv.visitMaxs(4, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, getBytes, (Ljava/nio/charset/Charset;)[B, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFNONNULL, l0); mv.visitTypeInsn(NEW, java/lang/NullPointerException); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, java/lang/NullPointerException, init, ()V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitMethodInsn(INVOKESTATIC, java/lang/StringCoding, encode, (Ljava/nio/charset/Charset;[CII)[B); mv.visitInsn(ARETURN); mv.visitMaxs(4, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, getBytes, ()[B, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitMethodInsn(INVOKESTATIC, java/lang/StringCoding, encode, ([CII)[B); mv.visitInsn(ARETURN); mv.visitMaxs(3, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, equals, (Ljava/lang/Object;)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IF_ACMPNE, l0); mv.visitInsn(ICONST_1); mv.visitInsn(IRETURN); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(INSTANCEOF, java/lang/String); Label l1 new Label(); mv.visitJumpInsn(IFEQ, l1); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, java/lang/String); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 3); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitJumpInsn(IF_ICMPNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 4); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 6); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 7); Label l2 new Label(); mv.visitLabel(l2); mv.visitVarInsn(ILOAD, 3); mv.visitIincInsn(3, -1); Label l3 new Label(); mv.visitJumpInsn(IFEQ, l3); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 6); mv.visitIincInsn(6, 1); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 7); mv.visitIincInsn(7, 1); mv.visitInsn(CALOAD); mv.visitJumpInsn(IF_ICMPEQ, l2); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l3); mv.visitInsn(ICONST_1); mv.visitInsn(IRETURN); mv.visitLabel(l1); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitMaxs(3, 8); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, contentEquals, (Ljava/lang/StringBuffer;)Z, null, null); mv.visitCode(); Label l0 new Label(); Label l1 new Label(); Label l2 new Label(); mv.visitTryCatchBlock(l0, l1, l2, null); Label l3 new Label(); mv.visitTryCatchBlock(l2, l3, l2, null); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(DUP); mv.visitVarInsn(ASTORE, 2); mv.visitInsn(MONITORENTER); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, contentEquals, (Ljava/lang/CharSequence;)Z); mv.visitVarInsn(ALOAD, 2); mv.visitInsn(MONITOREXIT); mv.visitLabel(l1); mv.visitInsn(IRETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 3); mv.visitVarInsn(ALOAD, 2); mv.visitInsn(MONITOREXIT); mv.visitLabel(l3); mv.visitVarInsn(ALOAD, 3); mv.visitInsn(ATHROW); mv.visitMaxs(2, 4); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, contentEquals, (Ljava/lang/CharSequence;)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEINTERFACE, java/lang/CharSequence, length, ()I); Label l0 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l0); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(INSTANCEOF, java/lang/AbstractStringBuilder); Label l1 new Label(); mv.visitJumpInsn(IFEQ, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, java/lang/AbstractStringBuilder); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/AbstractStringBuilder, getValue, ()[C); mv.visitVarInsn(ASTORE, 3); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 4); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 6); Label l2 new Label(); mv.visitLabel(l2); mv.visitVarInsn(ILOAD, 6); mv.visitIincInsn(6, -1); mv.visitJumpInsn(IFEQ, l1); mv.visitVarInsn(ALOAD, 2); mv.visitVarInsn(ILOAD, 4); mv.visitIincInsn(4, 1); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 5); mv.visitIincInsn(5, 1); mv.visitInsn(CALOAD); mv.visitJumpInsn(IF_ICMPEQ, l2); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/Object, equals, (Ljava/lang/Object;)Z); Label l3 new Label(); mv.visitJumpInsn(IFEQ, l3); mv.visitInsn(ICONST_1); mv.visitInsn(IRETURN); mv.visitLabel(l3); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 3); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 4); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 5); Label l4 new Label(); mv.visitLabel(l4); mv.visitVarInsn(ILOAD, 5); mv.visitIincInsn(5, -1); Label l5 new Label(); mv.visitJumpInsn(IFEQ, l5); mv.visitVarInsn(ALOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitIincInsn(3, 1); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ILOAD, 4); mv.visitIincInsn(4, 1); mv.visitMethodInsn(INVOKEINTERFACE, java/lang/CharSequence, charAt, (I)C); mv.visitJumpInsn(IF_ICMPEQ, l4); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l5); mv.visitInsn(ICONST_1); mv.visitInsn(IRETURN); mv.visitMaxs(3, 7); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, equalsIgnoreCase, (Ljava/lang/String;)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IF_ACMPNE, l0); mv.visitInsn(ICONST_1); Label l1 new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 1); Label l2 new Label(); mv.visitJumpInsn(IFNULL, l2); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitJumpInsn(IF_ICMPNE, l2); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_1); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, regionMatches, (ZILjava/lang/String;II)Z); mv.visitJumpInsn(IFEQ, l2); mv.visitInsn(ICONST_1); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l2); mv.visitInsn(ICONST_0); mv.visitLabel(l1); mv.visitInsn(IRETURN); mv.visitMaxs(6, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, compareTo, (Ljava/lang/String;)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 2); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 3); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/Math, min, (II)I); mv.visitVarInsn(ISTORE, 4); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 6); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 7); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 8); mv.visitVarInsn(ILOAD, 7); mv.visitVarInsn(ILOAD, 8); Label l0 new Label(); mv.visitJumpInsn(IF_ICMPNE, l0); mv.visitVarInsn(ILOAD, 7); mv.visitVarInsn(ISTORE, 9); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 7); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 10); Label l1 new Label(); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 9); mv.visitVarInsn(ILOAD, 10); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPGE, l2); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 11); mv.visitVarInsn(ALOAD, 6); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 12); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 12); Label l3 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l3); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 12); mv.visitInsn(ISUB); mv.visitInsn(IRETURN); mv.visitLabel(l3); mv.visitIincInsn(9, 1); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l2); Label l4 new Label(); mv.visitJumpInsn(GOTO, l4); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 4); mv.visitIincInsn(4, -1); mv.visitJumpInsn(IFEQ, l4); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 7); mv.visitIincInsn(7, 1); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 9); mv.visitVarInsn(ALOAD, 6); mv.visitVarInsn(ILOAD, 8); mv.visitIincInsn(8, 1); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 10); mv.visitVarInsn(ILOAD, 9); mv.visitVarInsn(ILOAD, 10); Label l5 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l5); mv.visitVarInsn(ILOAD, 9); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(ISUB); mv.visitInsn(IRETURN); mv.visitLabel(l5); mv.visitJumpInsn(GOTO, l0); mv.visitLabel(l4); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(ISUB); mv.visitInsn(IRETURN); mv.visitMaxs(2, 13); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, compareToIgnoreCase, (Ljava/lang/String;)I, null, null); mv.visitCode(); mv.visitFieldInsn(GETSTATIC, java/lang/String, CASE_INSENSITIVE_ORDER, Ljava/util/Comparator;); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEINTERFACE, java/util/Comparator, compare, (Ljava/lang/Object;Ljava/lang/Object;)I); mv.visitInsn(IRETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, regionMatches, (ILjava/lang/String;II)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 6); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 7); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 8); mv.visitVarInsn(ILOAD, 3); Label l0 new Label(); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(I2L); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(I2L); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(I2L); mv.visitInsn(LSUB); mv.visitInsn(LCMP); mv.visitJumpInsn(IFGT, l0); mv.visitVarInsn(ILOAD, 3); mv.visitInsn(I2L); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(I2L); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(I2L); mv.visitInsn(LSUB); mv.visitInsn(LCMP); Label l1 new Label(); mv.visitJumpInsn(IFLE, l1); mv.visitLabel(l0); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 4); mv.visitIincInsn(4, -1); Label l2 new Label(); mv.visitJumpInsn(IFLE, l2); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 6); mv.visitIincInsn(6, 1); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 7); mv.visitVarInsn(ILOAD, 8); mv.visitIincInsn(8, 1); mv.visitInsn(CALOAD); mv.visitJumpInsn(IF_ICMPEQ, l1); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l2); mv.visitInsn(ICONST_1); mv.visitInsn(IRETURN); mv.visitMaxs(6, 9); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, regionMatches, (ZILjava/lang/String;II)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 6); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 7); mv.visitVarInsn(ALOAD, 3); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 8); mv.visitVarInsn(ALOAD, 3); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 9); mv.visitVarInsn(ILOAD, 4); Label l0 new Label(); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 2); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(I2L); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(I2L); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(I2L); mv.visitInsn(LSUB); mv.visitInsn(LCMP); mv.visitJumpInsn(IFGT, l0); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(I2L); mv.visitVarInsn(ALOAD, 3); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(I2L); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(I2L); mv.visitInsn(LSUB); mv.visitInsn(LCMP); Label l1 new Label(); mv.visitJumpInsn(IFLE, l1); mv.visitLabel(l0); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 5); mv.visitIincInsn(5, -1); Label l2 new Label(); mv.visitJumpInsn(IFLE, l2); mv.visitVarInsn(ALOAD, 6); mv.visitVarInsn(ILOAD, 7); mv.visitIincInsn(7, 1); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 10); mv.visitVarInsn(ALOAD, 8); mv.visitVarInsn(ILOAD, 9); mv.visitIincInsn(9, 1); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 11); mv.visitVarInsn(ILOAD, 10); mv.visitVarInsn(ILOAD, 11); Label l3 new Label(); mv.visitJumpInsn(IF_ICMPNE, l3); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l3); mv.visitVarInsn(ILOAD, 1); Label l4 new Label(); mv.visitJumpInsn(IFEQ, l4); mv.visitVarInsn(ILOAD, 10); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toUpperCase, (C)C); mv.visitVarInsn(ISTORE, 12); mv.visitVarInsn(ILOAD, 11); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toUpperCase, (C)C); mv.visitVarInsn(ISTORE, 13); mv.visitVarInsn(ILOAD, 12); mv.visitVarInsn(ILOAD, 13); Label l5 new Label(); mv.visitJumpInsn(IF_ICMPNE, l5); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l5); mv.visitVarInsn(ILOAD, 12); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toLowerCase, (C)C); mv.visitVarInsn(ILOAD, 13); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toLowerCase, (C)C); mv.visitJumpInsn(IF_ICMPNE, l4); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l4); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l2); mv.visitInsn(ICONST_1); mv.visitInsn(IRETURN); mv.visitMaxs(6, 14); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, startsWith, (Ljava/lang/String;I)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 3); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 4); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 6); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 7); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IFLT, l0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ILOAD, 7); mv.visitInsn(ISUB); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLE, l1); mv.visitLabel(l0); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l1); mv.visitIincInsn(7, -1); mv.visitVarInsn(ILOAD, 7); Label l2 new Label(); mv.visitJumpInsn(IFLT, l2); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 4); mv.visitIincInsn(4, 1); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 6); mv.visitIincInsn(6, 1); mv.visitInsn(CALOAD); mv.visitJumpInsn(IF_ICMPEQ, l1); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); mv.visitLabel(l2); mv.visitInsn(ICONST_1); mv.visitInsn(IRETURN); mv.visitMaxs(3, 8); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, startsWith, (Ljava/lang/String;)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_0); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, startsWith, (Ljava/lang/String;I)Z); mv.visitInsn(IRETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, endsWith, (Ljava/lang/String;)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(ISUB); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, startsWith, (Ljava/lang/String;I)Z); mv.visitInsn(IRETURN); mv.visitMaxs(4, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, hashCode, ()I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, hash, I); mv.visitVarInsn(ISTORE, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 2); mv.visitVarInsn(ILOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFNE, l0); mv.visitVarInsn(ILOAD, 2); mv.visitJumpInsn(IFLE, l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 3); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 4); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 5); Label l1 new Label(); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ILOAD, 2); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPGE, l2); mv.visitIntInsn(BIPUSH, 31); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IMUL); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 3); mv.visitIincInsn(3, 1); mv.visitInsn(CALOAD); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 1); mv.visitIincInsn(5, 1); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitFieldInsn(PUTFIELD, java/lang/String, hash, I); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IRETURN); mv.visitMaxs(3, 6); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, indexOf, (I)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ICONST_0); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, indexOf, (II)I); mv.visitInsn(IRETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, indexOf, (II)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 3); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 4); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IFGE, l0); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 2); Label l1 new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitJumpInsn(IF_ICMPLT, l1); mv.visitInsn(ICONST_M1); mv.visitInsn(IRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 5); mv.visitVarInsn(ILOAD, 1); mv.visitLdcInsn(new Integer(65536)); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPGE, l2); Label l3 new Label(); mv.visitLabel(l3); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ILOAD, 3); Label l4 new Label(); mv.visitJumpInsn(IF_ICMPGE, l4); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(CALOAD); mv.visitVarInsn(ILOAD, 1); Label l5 new Label(); mv.visitJumpInsn(IF_ICMPNE, l5); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitInsn(ISUB); mv.visitInsn(IRETURN); mv.visitLabel(l5); mv.visitIincInsn(5, 1); mv.visitJumpInsn(GOTO, l3); mv.visitLabel(l4); mv.visitInsn(ICONST_M1); mv.visitInsn(IRETURN); mv.visitLabel(l2); mv.visitVarInsn(ILOAD, 1); mv.visitLdcInsn(new Integer(1114111)); Label l6 new Label(); mv.visitJumpInsn(IF_ICMPGT, l6); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toChars, (I)[C); mv.visitVarInsn(ASTORE, 6); Label l7 new Label(); mv.visitLabel(l7); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ILOAD, 3); mv.visitJumpInsn(IF_ICMPGE, l6); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 6); mv.visitInsn(ICONST_0); mv.visitInsn(CALOAD); Label l8 new Label(); mv.visitJumpInsn(IF_ICMPNE, l8); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 3); Label l9 new Label(); mv.visitJumpInsn(IF_ICMPNE, l9); mv.visitJumpInsn(GOTO, l6); mv.visitLabel(l9); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 6); mv.visitInsn(ICONST_1); mv.visitInsn(CALOAD); mv.visitJumpInsn(IF_ICMPNE, l8); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitInsn(ISUB); mv.visitInsn(IRETURN); mv.visitLabel(l8); mv.visitIincInsn(5, 1); mv.visitJumpInsn(GOTO, l7); mv.visitLabel(l6); mv.visitInsn(ICONST_M1); mv.visitInsn(IRETURN); mv.visitMaxs(3, 7); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, lastIndexOf, (I)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, lastIndexOf, (II)I); mv.visitInsn(IRETURN); mv.visitMaxs(4, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, lastIndexOf, (II)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 3); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 4); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l0 new Label(); mv.visitJumpInsn(IF_ICMPLT, l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); Label l1 new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 2); mv.visitLabel(l1); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 5); mv.visitVarInsn(ILOAD, 1); mv.visitLdcInsn(new Integer(65536)); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPGE, l2); Label l3 new Label(); mv.visitLabel(l3); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ILOAD, 3); Label l4 new Label(); mv.visitJumpInsn(IF_ICMPLT, l4); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(CALOAD); mv.visitVarInsn(ILOAD, 1); Label l5 new Label(); mv.visitJumpInsn(IF_ICMPNE, l5); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitInsn(ISUB); mv.visitInsn(IRETURN); mv.visitLabel(l5); mv.visitIincInsn(5, -1); mv.visitJumpInsn(GOTO, l3); mv.visitLabel(l4); mv.visitInsn(ICONST_M1); mv.visitInsn(IRETURN); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 6); mv.visitVarInsn(ILOAD, 1); mv.visitLdcInsn(new Integer(1114111)); Label l6 new Label(); mv.visitJumpInsn(IF_ICMPGT, l6); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toChars, (I)[C); mv.visitVarInsn(ASTORE, 7); Label l7 new Label(); mv.visitLabel(l7); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ILOAD, 3); mv.visitJumpInsn(IF_ICMPLT, l6); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 7); mv.visitInsn(ICONST_0); mv.visitInsn(CALOAD); Label l8 new Label(); mv.visitJumpInsn(IF_ICMPNE, l8); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 6); Label l9 new Label(); mv.visitJumpInsn(IF_ICMPNE, l9); mv.visitJumpInsn(GOTO, l6); mv.visitLabel(l9); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 7); mv.visitInsn(ICONST_1); mv.visitInsn(CALOAD); mv.visitJumpInsn(IF_ICMPNE, l8); mv.visitVarInsn(ILOAD, 5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitInsn(ISUB); mv.visitInsn(IRETURN); mv.visitLabel(l8); mv.visitIincInsn(5, -1); mv.visitJumpInsn(GOTO, l7); mv.visitLabel(l6); mv.visitInsn(ICONST_M1); mv.visitInsn(IRETURN); mv.visitMaxs(3, 8); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, indexOf, (Ljava/lang/String;)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_0); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, indexOf, (Ljava/lang/String;I)I); mv.visitInsn(IRETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, indexOf, (Ljava/lang/String;I)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESTATIC, java/lang/String, indexOf, ([CII[CIII)I); mv.visitInsn(IRETURN); mv.visitMaxs(7, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_STATIC, indexOf, ([CII[CIII)I, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 6); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IF_ICMPLT, l0); mv.visitVarInsn(ILOAD, 5); Label l1 new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ILOAD, 2); Label l2 new Label(); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l1); mv.visitInsn(ICONST_M1); mv.visitLabel(l2); mv.visitInsn(IRETURN); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 6); Label l3 new Label(); mv.visitJumpInsn(IFGE, l3); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 6); mv.visitLabel(l3); mv.visitVarInsn(ILOAD, 5); Label l4 new Label(); mv.visitJumpInsn(IFNE, l4); mv.visitVarInsn(ILOAD, 6); mv.visitInsn(IRETURN); mv.visitLabel(l4); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 7); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(ISUB); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 8); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 6); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 9); Label l5 new Label(); mv.visitLabel(l5); mv.visitVarInsn(ILOAD, 9); mv.visitVarInsn(ILOAD, 8); Label l6 new Label(); mv.visitJumpInsn(IF_ICMPGT, l6); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(CALOAD); mv.visitVarInsn(ILOAD, 7); Label l7 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l7); Label l8 new Label(); mv.visitLabel(l8); mv.visitIincInsn(9, 1); mv.visitVarInsn(ILOAD, 9); mv.visitVarInsn(ILOAD, 8); mv.visitJumpInsn(IF_ICMPGT, l7); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(CALOAD); mv.visitVarInsn(ILOAD, 7); mv.visitJumpInsn(IF_ICMPEQ, l7); mv.visitJumpInsn(GOTO, l8); mv.visitLabel(l7); mv.visitVarInsn(ILOAD, 9); mv.visitVarInsn(ILOAD, 8); Label l9 new Label(); mv.visitJumpInsn(IF_ICMPGT, l9); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 10); mv.visitVarInsn(ILOAD, 10); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(IADD); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitVarInsn(ISTORE, 11); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 12); Label l10 new Label(); mv.visitLabel(l10); mv.visitVarInsn(ILOAD, 10); mv.visitVarInsn(ILOAD, 11); Label l11 new Label(); mv.visitJumpInsn(IF_ICMPGE, l11); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 12); mv.visitInsn(CALOAD); mv.visitJumpInsn(IF_ICMPNE, l11); mv.visitIincInsn(10, 1); mv.visitIincInsn(12, 1); mv.visitJumpInsn(GOTO, l10); mv.visitLabel(l11); mv.visitVarInsn(ILOAD, 10); mv.visitVarInsn(ILOAD, 11); mv.visitJumpInsn(IF_ICMPNE, l9); mv.visitVarInsn(ILOAD, 9); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ISUB); mv.visitInsn(IRETURN); mv.visitLabel(l9); mv.visitIincInsn(9, 1); mv.visitJumpInsn(GOTO, l5); mv.visitLabel(l6); mv.visitInsn(ICONST_M1); mv.visitInsn(IRETURN); mv.visitMaxs(3, 13); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, lastIndexOf, (Ljava/lang/String;)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, lastIndexOf, (Ljava/lang/String;I)I); mv.visitInsn(IRETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, lastIndexOf, (Ljava/lang/String;I)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESTATIC, java/lang/String, lastIndexOf, ([CII[CIII)I); mv.visitInsn(IRETURN); mv.visitMaxs(7, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_STATIC, lastIndexOf, ([CII[CIII)I, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(ISUB); mv.visitVarInsn(ISTORE, 7); mv.visitVarInsn(ILOAD, 6); Label l0 new Label(); mv.visitJumpInsn(IFGE, l0); mv.visitInsn(ICONST_M1); mv.visitInsn(IRETURN); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 6); mv.visitVarInsn(ILOAD, 7); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLE, l1); mv.visitVarInsn(ILOAD, 7); mv.visitVarInsn(ISTORE, 6); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 5); Label l2 new Label(); mv.visitJumpInsn(IFNE, l2); mv.visitVarInsn(ILOAD, 6); mv.visitInsn(IRETURN); mv.visitLabel(l2); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(IADD); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitVarInsn(ISTORE, 8); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 9); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(IADD); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitVarInsn(ISTORE, 10); mv.visitVarInsn(ILOAD, 10); mv.visitVarInsn(ILOAD, 6); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 11); Label l3 new Label(); mv.visitLabel(l3); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 10); Label l4 new Label(); mv.visitJumpInsn(IF_ICMPLT, l4); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 11); mv.visitInsn(CALOAD); mv.visitVarInsn(ILOAD, 9); mv.visitJumpInsn(IF_ICMPEQ, l4); mv.visitIincInsn(11, -1); mv.visitJumpInsn(GOTO, l3); mv.visitLabel(l4); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 10); Label l5 new Label(); mv.visitJumpInsn(IF_ICMPGE, l5); mv.visitInsn(ICONST_M1); mv.visitInsn(IRETURN); mv.visitLabel(l5); mv.visitVarInsn(ILOAD, 11); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitVarInsn(ISTORE, 12); mv.visitVarInsn(ILOAD, 12); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitInsn(ISUB); mv.visitVarInsn(ISTORE, 13); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitVarInsn(ISTORE, 14); Label l6 new Label(); mv.visitLabel(l6); mv.visitVarInsn(ILOAD, 12); mv.visitVarInsn(ILOAD, 13); Label l7 new Label(); mv.visitJumpInsn(IF_ICMPLE, l7); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 12); mv.visitIincInsn(12, -1); mv.visitInsn(CALOAD); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 14); mv.visitIincInsn(14, -1); mv.visitInsn(CALOAD); mv.visitJumpInsn(IF_ICMPEQ, l6); mv.visitIincInsn(11, -1); mv.visitJumpInsn(GOTO, l3); mv.visitLabel(l7); mv.visitVarInsn(ILOAD, 13); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ISUB); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitInsn(IRETURN); mv.visitMaxs(3, 15); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, substring, (I)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, substring, (II)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, substring, (II)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFGE, l0); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPLE, l1); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPLE, l2); mv.visitTypeInsn(NEW, java/lang/StringIndexOutOfBoundsException); mv.visitInsn(DUP); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ISUB); mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringIndexOutOfBoundsException, init, (I)V); mv.visitInsn(ATHROW); mv.visitLabel(l2); mv.visitVarInsn(ILOAD, 1); Label l3 new Label(); mv.visitJumpInsn(IFNE, l3); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitJumpInsn(IF_ICMPNE, l3); mv.visitVarInsn(ALOAD, 0); Label l4 new Label(); mv.visitJumpInsn(GOTO, l4); mv.visitLabel(l3); mv.visitTypeInsn(NEW, java/lang/String); mv.visitInsn(DUP); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(ISUB); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, (II[C)V); mv.visitLabel(l4); mv.visitInsn(ARETURN); mv.visitMaxs(5, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, subSequence, (II)Ljava/lang/CharSequence;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, substring, (II)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(3, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, concat, (Ljava/lang/String;)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, length, ()I); mv.visitVarInsn(ISTORE, 2); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IFNE, l0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitVarInsn(ASTORE, 3); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 3); mv.visitInsn(ICONST_0); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, getChars, (II[CI)V); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, getChars, (II[CI)V); mv.visitTypeInsn(NEW, java/lang/String); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, (II[C)V); mv.visitInsn(ARETURN); mv.visitMaxs(5, 4); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, replace, (CC)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); Label l0 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 3); mv.visitInsn(ICONST_M1); mv.visitVarInsn(ISTORE, 4); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 6); Label l1 new Label(); mv.visitLabel(l1); mv.visitIincInsn(4, 1); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 3); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPGE, l2); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 6); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitVarInsn(ILOAD, 1); mv.visitJumpInsn(IF_ICMPNE, l1); mv.visitJumpInsn(GOTO, l2); mv.visitLabel(l2); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 3); mv.visitJumpInsn(IF_ICMPGE, l0); mv.visitVarInsn(ILOAD, 3); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitVarInsn(ASTORE, 7); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 8); Label l3 new Label(); mv.visitLabel(l3); mv.visitVarInsn(ILOAD, 8); mv.visitVarInsn(ILOAD, 4); Label l4 new Label(); mv.visitJumpInsn(IF_ICMPGE, l4); mv.visitVarInsn(ALOAD, 7); mv.visitVarInsn(ILOAD, 8); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 6); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitInsn(CASTORE); mv.visitIincInsn(8, 1); mv.visitJumpInsn(GOTO, l3); mv.visitLabel(l4); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 3); Label l5 new Label(); mv.visitJumpInsn(IF_ICMPGE, l5); mv.visitVarInsn(ALOAD, 5); mv.visitVarInsn(ILOAD, 6); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 8); mv.visitVarInsn(ALOAD, 7); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 8); mv.visitVarInsn(ILOAD, 1); Label l6 new Label(); mv.visitJumpInsn(IF_ICMPNE, l6); mv.visitVarInsn(ILOAD, 2); Label l7 new Label(); mv.visitJumpInsn(GOTO, l7); mv.visitLabel(l6); mv.visitVarInsn(ILOAD, 8); mv.visitLabel(l7); mv.visitInsn(CASTORE); mv.visitIincInsn(4, 1); mv.visitJumpInsn(GOTO, l4); mv.visitLabel(l5); mv.visitTypeInsn(NEW, java/lang/String); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ALOAD, 7); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, (II[C)V); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARETURN); mv.visitMaxs(5, 9); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, matches, (Ljava/lang/String;)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, java/util/regex/Pattern, matches, (Ljava/lang/String;Ljava/lang/CharSequence;)Z); mv.visitInsn(IRETURN); mv.visitMaxs(2, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, contains, (Ljava/lang/CharSequence;)Z, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/Object, toString, ()Ljava/lang/String;); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, indexOf, (Ljava/lang/String;)I); mv.visitInsn(ICONST_M1); Label l0 new Label(); mv.visitJumpInsn(IF_ICMPLE, l0); mv.visitInsn(ICONST_1); Label l1 new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); mv.visitInsn(ICONST_0); mv.visitLabel(l1); mv.visitInsn(IRETURN); mv.visitMaxs(2, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, replaceFirst, (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/util/regex/Pattern, compile, (Ljava/lang/String;)Ljava/util/regex/Pattern;); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/regex/Pattern, matcher, (Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/regex/Matcher, replaceFirst, (Ljava/lang/String;)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(2, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, replaceAll, (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/util/regex/Pattern, compile, (Ljava/lang/String;)Ljava/util/regex/Pattern;); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/regex/Pattern, matcher, (Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/regex/Matcher, replaceAll, (Ljava/lang/String;)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(2, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, replace, (Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/Object, toString, ()Ljava/lang/String;); mv.visitIntInsn(BIPUSH, 16); mv.visitMethodInsn(INVOKESTATIC, java/util/regex/Pattern, compile, (Ljava/lang/String;I)Ljava/util/regex/Pattern;); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/regex/Pattern, matcher, (Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/Object, toString, ()Ljava/lang/String;); mv.visitMethodInsn(INVOKESTATIC, java/util/regex/Matcher, quoteReplacement, (Ljava/lang/String;)Ljava/lang/String;); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/regex/Matcher, replaceAll, (Ljava/lang/String;)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(2, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, split, (Ljava/lang/String;I)[Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/util/regex/Pattern, compile, (Ljava/lang/String;)Ljava/util/regex/Pattern;); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/regex/Pattern, split, (Ljava/lang/CharSequence;I)[Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(3, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, split, (Ljava/lang/String;)[Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_0); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, split, (Ljava/lang/String;I)[Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, toLowerCase, (Ljava/util/Locale;)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFNONNULL, l0); mv.visitTypeInsn(NEW, java/lang/NullPointerException); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, java/lang/NullPointerException, init, ()V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 2); Label l1 new Label(); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPGE, l2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 3); mv.visitVarInsn(ILOAD, 3); mv.visitLdcInsn(new Integer(55296)); Label l3 new Label(); mv.visitJumpInsn(IF_ICMPLT, l3); mv.visitVarInsn(ILOAD, 3); mv.visitLdcInsn(new Integer(56319)); mv.visitJumpInsn(IF_ICMPGT, l3); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, codePointAt, (I)I); mv.visitVarInsn(ISTORE, 4); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 4); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toLowerCase, (I)I); Label l4 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l4); Label l5 new Label(); mv.visitJumpInsn(GOTO, l5); mv.visitLabel(l4); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 4); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, charCount, (I)I); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 2); Label l6 new Label(); mv.visitJumpInsn(GOTO, l6); mv.visitLabel(l3); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toLowerCase, (C)C); Label l7 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l7); mv.visitJumpInsn(GOTO, l5); mv.visitLabel(l7); mv.visitIincInsn(2, 1); mv.visitLabel(l6); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARETURN); mv.visitLabel(l5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitVarInsn(ASTORE, 3); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 4); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 3); mv.visitInsn(ICONST_0); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESTATIC, java/lang/System, arraycopy, (Ljava/lang/Object;ILjava/lang/Object;II)V); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/Locale, getLanguage, ()Ljava/lang/String;); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ALOAD, 5); mv.visitLdcInsn(tr); Label l8 new Label(); mv.visitJumpInsn(IF_ACMPEQ, l8); mv.visitVarInsn(ALOAD, 5); mv.visitLdcInsn(az); mv.visitJumpInsn(IF_ACMPEQ, l8); mv.visitVarInsn(ALOAD, 5); mv.visitLdcInsn(lt); Label l9 new Label(); mv.visitJumpInsn(IF_ACMPNE, l9); mv.visitLabel(l8); mv.visitInsn(ICONST_1); Label l10 new Label(); mv.visitJumpInsn(GOTO, l10); mv.visitLabel(l9); mv.visitInsn(ICONST_0); mv.visitLabel(l10); mv.visitVarInsn(ISTORE, 6); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ISTORE, 11); Label l11 new Label(); mv.visitLabel(l11); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l12 new Label(); mv.visitJumpInsn(IF_ICMPGE, l12); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 11); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 9); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(I2C); mv.visitLdcInsn(new Integer(55296)); Label l13 new Label(); mv.visitJumpInsn(IF_ICMPLT, l13); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(I2C); mv.visitLdcInsn(new Integer(56319)); mv.visitJumpInsn(IF_ICMPGT, l13); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 11); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, codePointAt, (I)I); mv.visitVarInsn(ISTORE, 9); mv.visitVarInsn(ILOAD, 9); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, charCount, (I)I); mv.visitVarInsn(ISTORE, 10); Label l14 new Label(); mv.visitJumpInsn(GOTO, l14); mv.visitLabel(l13); mv.visitInsn(ICONST_1); mv.visitVarInsn(ISTORE, 10); mv.visitLabel(l14); mv.visitVarInsn(ILOAD, 6); Label l15 new Label(); mv.visitJumpInsn(IFNE, l15); mv.visitVarInsn(ILOAD, 9); mv.visitIntInsn(SIPUSH, 931); Label l16 new Label(); mv.visitJumpInsn(IF_ICMPNE, l16); mv.visitLabel(l15); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/lang/ConditionalSpecialCasing, toLowerCaseEx, (Ljava/lang/String;ILjava/util/Locale;)I); mv.visitVarInsn(ISTORE, 8); Label l17 new Label(); mv.visitJumpInsn(GOTO, l17); mv.visitLabel(l16); mv.visitVarInsn(ILOAD, 9); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toLowerCase, (I)I); mv.visitVarInsn(ISTORE, 8); mv.visitLabel(l17); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(ICONST_M1); Label l18 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l18); mv.visitVarInsn(ILOAD, 8); mv.visitLdcInsn(new Integer(65536)); Label l19 new Label(); mv.visitJumpInsn(IF_ICMPLT, l19); mv.visitLabel(l18); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(ICONST_M1); Label l20 new Label(); mv.visitJumpInsn(IF_ICMPNE, l20); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/lang/ConditionalSpecialCasing, toLowerCaseCharArray, (Ljava/lang/String;ILjava/util/Locale;)[C); mv.visitVarInsn(ASTORE, 7); Label l21 new Label(); mv.visitJumpInsn(GOTO, l21); mv.visitLabel(l20); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(ICONST_2); Label l22 new Label(); mv.visitJumpInsn(IF_ICMPNE, l22); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 8); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toChars, (I[CI)I); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(ISUB); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 4); Label l23 new Label(); mv.visitJumpInsn(GOTO, l23); mv.visitLabel(l22); mv.visitVarInsn(ILOAD, 8); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toChars, (I)[C); mv.visitVarInsn(ASTORE, 7); mv.visitLabel(l21); mv.visitVarInsn(ALOAD, 7); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ISTORE, 12); mv.visitVarInsn(ILOAD, 12); mv.visitVarInsn(ILOAD, 10); Label l24 new Label(); mv.visitJumpInsn(IF_ICMPLE, l24); mv.visitVarInsn(ALOAD, 3); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ILOAD, 12); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(ISUB); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitVarInsn(ASTORE, 13); mv.visitVarInsn(ALOAD, 3); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 13); mv.visitInsn(ICONST_0); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESTATIC, java/lang/System, arraycopy, (Ljava/lang/Object;ILjava/lang/Object;II)V); mv.visitVarInsn(ALOAD, 13); mv.visitVarInsn(ASTORE, 3); mv.visitLabel(l24); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 13); Label l25 new Label(); mv.visitLabel(l25); mv.visitVarInsn(ILOAD, 13); mv.visitVarInsn(ILOAD, 12); Label l26 new Label(); mv.visitJumpInsn(IF_ICMPGE, l26); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 13); mv.visitInsn(IADD); mv.visitVarInsn(ALOAD, 7); mv.visitVarInsn(ILOAD, 13); mv.visitInsn(CALOAD); mv.visitInsn(CASTORE); mv.visitIincInsn(13, 1); mv.visitJumpInsn(GOTO, l25); mv.visitLabel(l26); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 12); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(ISUB); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 4); mv.visitJumpInsn(GOTO, l23); mv.visitLabel(l19); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(I2C); mv.visitInsn(CASTORE); mv.visitLabel(l23); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 11); mv.visitJumpInsn(GOTO, l11); mv.visitLabel(l12); mv.visitTypeInsn(NEW, java/lang/String); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, (II[C)V); mv.visitInsn(ARETURN); mv.visitMaxs(6, 14); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, toLowerCase, ()Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, java/util/Locale, getDefault, ()Ljava/util/Locale;); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, toLowerCase, (Ljava/util/Locale;)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(2, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, toUpperCase, (Ljava/util/Locale;)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); Label l0 new Label(); mv.visitJumpInsn(IFNONNULL, l0); mv.visitTypeInsn(NEW, java/lang/NullPointerException); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, java/lang/NullPointerException, init, ()V); mv.visitInsn(ATHROW); mv.visitLabel(l0); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 2); Label l1 new Label(); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPGE, l2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 3); mv.visitVarInsn(ILOAD, 3); mv.visitLdcInsn(new Integer(55296)); Label l3 new Label(); mv.visitJumpInsn(IF_ICMPLT, l3); mv.visitVarInsn(ILOAD, 3); mv.visitLdcInsn(new Integer(56319)); mv.visitJumpInsn(IF_ICMPGT, l3); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, codePointAt, (I)I); mv.visitVarInsn(ISTORE, 3); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, charCount, (I)I); mv.visitVarInsn(ISTORE, 4); Label l4 new Label(); mv.visitJumpInsn(GOTO, l4); mv.visitLabel(l3); mv.visitInsn(ICONST_1); mv.visitVarInsn(ISTORE, 4); mv.visitLabel(l4); mv.visitVarInsn(ILOAD, 3); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toUpperCaseEx, (I)I); mv.visitVarInsn(ISTORE, 5); mv.visitVarInsn(ILOAD, 5); mv.visitInsn(ICONST_M1); Label l5 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l5); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ILOAD, 5); Label l6 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l6); mv.visitJumpInsn(GOTO, l5); mv.visitLabel(l6); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 2); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARETURN); mv.visitLabel(l5); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitVarInsn(ASTORE, 3); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 4); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ALOAD, 3); mv.visitInsn(ICONST_0); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESTATIC, java/lang/System, arraycopy, (Ljava/lang/Object;ILjava/lang/Object;II)V); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/Locale, getLanguage, ()Ljava/lang/String;); mv.visitVarInsn(ASTORE, 5); mv.visitVarInsn(ALOAD, 5); mv.visitLdcInsn(tr); Label l7 new Label(); mv.visitJumpInsn(IF_ACMPEQ, l7); mv.visitVarInsn(ALOAD, 5); mv.visitLdcInsn(az); mv.visitJumpInsn(IF_ACMPEQ, l7); mv.visitVarInsn(ALOAD, 5); mv.visitLdcInsn(lt); Label l8 new Label(); mv.visitJumpInsn(IF_ACMPNE, l8); mv.visitLabel(l7); mv.visitInsn(ICONST_1); Label l9 new Label(); mv.visitJumpInsn(GOTO, l9); mv.visitLabel(l8); mv.visitInsn(ICONST_0); mv.visitLabel(l9); mv.visitVarInsn(ISTORE, 6); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ISTORE, 11); Label l10 new Label(); mv.visitLabel(l10); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l11 new Label(); mv.visitJumpInsn(IF_ICMPGE, l11); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ILOAD, 11); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitVarInsn(ISTORE, 9); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(I2C); mv.visitLdcInsn(new Integer(55296)); Label l12 new Label(); mv.visitJumpInsn(IF_ICMPLT, l12); mv.visitVarInsn(ILOAD, 9); mv.visitInsn(I2C); mv.visitLdcInsn(new Integer(56319)); mv.visitJumpInsn(IF_ICMPGT, l12); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 11); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, codePointAt, (I)I); mv.visitVarInsn(ISTORE, 9); mv.visitVarInsn(ILOAD, 9); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, charCount, (I)I); mv.visitVarInsn(ISTORE, 10); Label l13 new Label(); mv.visitJumpInsn(GOTO, l13); mv.visitLabel(l12); mv.visitInsn(ICONST_1); mv.visitVarInsn(ISTORE, 10); mv.visitLabel(l13); mv.visitVarInsn(ILOAD, 6); Label l14 new Label(); mv.visitJumpInsn(IFEQ, l14); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/lang/ConditionalSpecialCasing, toUpperCaseEx, (Ljava/lang/String;ILjava/util/Locale;)I); mv.visitVarInsn(ISTORE, 8); Label l15 new Label(); mv.visitJumpInsn(GOTO, l15); mv.visitLabel(l14); mv.visitVarInsn(ILOAD, 9); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toUpperCaseEx, (I)I); mv.visitVarInsn(ISTORE, 8); mv.visitLabel(l15); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(ICONST_M1); Label l16 new Label(); mv.visitJumpInsn(IF_ICMPEQ, l16); mv.visitVarInsn(ILOAD, 8); mv.visitLdcInsn(new Integer(65536)); Label l17 new Label(); mv.visitJumpInsn(IF_ICMPLT, l17); mv.visitLabel(l16); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(ICONST_M1); Label l18 new Label(); mv.visitJumpInsn(IF_ICMPNE, l18); mv.visitVarInsn(ILOAD, 6); Label l19 new Label(); mv.visitJumpInsn(IFEQ, l19); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, java/lang/ConditionalSpecialCasing, toUpperCaseCharArray, (Ljava/lang/String;ILjava/util/Locale;)[C); mv.visitVarInsn(ASTORE, 7); Label l20 new Label(); mv.visitJumpInsn(GOTO, l20); mv.visitLabel(l19); mv.visitVarInsn(ILOAD, 9); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toUpperCaseCharArray, (I)[C); mv.visitVarInsn(ASTORE, 7); mv.visitJumpInsn(GOTO, l20); mv.visitLabel(l18); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(ICONST_2); Label l21 new Label(); mv.visitJumpInsn(IF_ICMPNE, l21); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 8); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toChars, (I[CI)I); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(ISUB); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 4); Label l22 new Label(); mv.visitJumpInsn(GOTO, l22); mv.visitLabel(l21); mv.visitVarInsn(ILOAD, 8); mv.visitMethodInsn(INVOKESTATIC, java/lang/Character, toChars, (I)[C); mv.visitVarInsn(ASTORE, 7); mv.visitLabel(l20); mv.visitVarInsn(ALOAD, 7); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ISTORE, 12); mv.visitVarInsn(ILOAD, 12); mv.visitVarInsn(ILOAD, 10); Label l23 new Label(); mv.visitJumpInsn(IF_ICMPLE, l23); mv.visitVarInsn(ALOAD, 3); mv.visitInsn(ARRAYLENGTH); mv.visitVarInsn(ILOAD, 12); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(ISUB); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitVarInsn(ASTORE, 13); mv.visitVarInsn(ALOAD, 3); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 13); mv.visitInsn(ICONST_0); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitMethodInsn(INVOKESTATIC, java/lang/System, arraycopy, (Ljava/lang/Object;ILjava/lang/Object;II)V); mv.visitVarInsn(ALOAD, 13); mv.visitVarInsn(ASTORE, 3); mv.visitLabel(l23); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 13); Label l24 new Label(); mv.visitLabel(l24); mv.visitVarInsn(ILOAD, 13); mv.visitVarInsn(ILOAD, 12); Label l25 new Label(); mv.visitJumpInsn(IF_ICMPGE, l25); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 13); mv.visitInsn(IADD); mv.visitVarInsn(ALOAD, 7); mv.visitVarInsn(ILOAD, 13); mv.visitInsn(CALOAD); mv.visitInsn(CASTORE); mv.visitIincInsn(13, 1); mv.visitJumpInsn(GOTO, l24); mv.visitLabel(l25); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(ILOAD, 12); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(ISUB); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 4); mv.visitJumpInsn(GOTO, l22); mv.visitLabel(l17); mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitVarInsn(ILOAD, 8); mv.visitInsn(I2C); mv.visitInsn(CASTORE); mv.visitLabel(l22); mv.visitVarInsn(ILOAD, 11); mv.visitVarInsn(ILOAD, 10); mv.visitInsn(IADD); mv.visitVarInsn(ISTORE, 11); mv.visitJumpInsn(GOTO, l10); mv.visitLabel(l11); mv.visitTypeInsn(NEW, java/lang/String); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ILOAD, 4); mv.visitInsn(IADD); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, (II[C)V); mv.visitInsn(ARETURN); mv.visitMaxs(6, 14); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, toUpperCase, ()Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, java/util/Locale, getDefault, ()Ljava/util/Locale;); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, toUpperCase, (Ljava/util/Locale;)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(2, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, trim, ()Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ISTORE, 1); mv.visitInsn(ICONST_0); mv.visitVarInsn(ISTORE, 2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, offset, I); mv.visitVarInsn(ISTORE, 3); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, value, [C); mv.visitVarInsn(ASTORE, 4); Label l0 new Label(); mv.visitLabel(l0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 1); Label l1 new Label(); mv.visitJumpInsn(IF_ICMPGE, l1); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ILOAD, 2); mv.visitInsn(IADD); mv.visitInsn(CALOAD); mv.visitIntInsn(BIPUSH, 32); mv.visitJumpInsn(IF_ICMPGT, l1); mv.visitIincInsn(2, 1); mv.visitJumpInsn(GOTO, l0); mv.visitLabel(l1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 1); Label l2 new Label(); mv.visitJumpInsn(IF_ICMPGE, l2); mv.visitVarInsn(ALOAD, 4); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ILOAD, 1); mv.visitInsn(IADD); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitInsn(CALOAD); mv.visitIntInsn(BIPUSH, 32); mv.visitJumpInsn(IF_ICMPGT, l2); mv.visitIincInsn(1, -1); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l2); mv.visitVarInsn(ILOAD, 2); Label l3 new Label(); mv.visitJumpInsn(IFGT, l3); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); Label l4 new Label(); mv.visitJumpInsn(IF_ICMPGE, l4); mv.visitLabel(l3); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, substring, (II)Ljava/lang/String;); Label l5 new Label(); mv.visitJumpInsn(GOTO, l5); mv.visitLabel(l4); mv.visitVarInsn(ALOAD, 0); mv.visitLabel(l5); mv.visitInsn(ARETURN); mv.visitMaxs(3, 5); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, toString, ()Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC, toCharArray, ()[C, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, java/lang/String, count, I); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ICONST_0); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, getChars, (II[CI)V); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(ARETURN); mv.visitMaxs(5, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC ACC_VARARGS, format, (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitTypeInsn(NEW, java/util/Formatter); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, java/util/Formatter, init, ()V); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/Formatter, format, (Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/Formatter, toString, ()Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC ACC_VARARGS, format, (Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitTypeInsn(NEW, java/util/Formatter); mv.visitInsn(DUP); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/util/Formatter, init, (Ljava/util/Locale;)V); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/Formatter, format, (Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;); mv.visitMethodInsn(INVOKEVIRTUAL, java/util/Formatter, toString, ()Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(3, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, valueOf, (Ljava/lang/Object;)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); Label l0 new Label(); mv.visitJumpInsn(IFNONNULL, l0); mv.visitLdcInsn(null); Label l1 new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/Object, toString, ()Ljava/lang/String;); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, valueOf, ([C)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitTypeInsn(NEW, java/lang/String); mv.visitInsn(DUP); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, ([C)V); mv.visitInsn(ARETURN); mv.visitMaxs(3, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, valueOf, ([CII)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitTypeInsn(NEW, java/lang/String); mv.visitInsn(DUP); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, ([CII)V); mv.visitInsn(ARETURN); mv.visitMaxs(5, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, copyValueOf, ([CII)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitTypeInsn(NEW, java/lang/String); mv.visitInsn(DUP); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, ([CII)V); mv.visitInsn(ARETURN); mv.visitMaxs(5, 3); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, copyValueOf, ([C)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARRAYLENGTH); mv.visitMethodInsn(INVOKESTATIC, java/lang/String, copyValueOf, ([CII)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(3, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, valueOf, (Z)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 0); Label l0 new Label(); mv.visitJumpInsn(IFEQ, l0); mv.visitLdcInsn(true); Label l1 new Label(); mv.visitJumpInsn(GOTO, l1); mv.visitLabel(l0); mv.visitLdcInsn(false); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, valueOf, (C)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitInsn(ICONST_1); mv.visitIntInsn(NEWARRAY, T_CHAR); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ILOAD, 0); mv.visitInsn(CASTORE); mv.visitVarInsn(ASTORE, 1); mv.visitTypeInsn(NEW, java/lang/String); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String, init, (II[C)V); mv.visitInsn(ARETURN); mv.visitMaxs(5, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, valueOf, (I)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(ILOAD, 0); mv.visitIntInsn(BIPUSH, 10); mv.visitMethodInsn(INVOKESTATIC, java/lang/Integer, toString, (II)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(2, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, valueOf, (J)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(LLOAD, 0); mv.visitIntInsn(BIPUSH, 10); mv.visitMethodInsn(INVOKESTATIC, java/lang/Long, toString, (JI)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, valueOf, (F)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(FLOAD, 0); mv.visitMethodInsn(INVOKESTATIC, java/lang/Float, toString, (F)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_STATIC, valueOf, (D)Ljava/lang/String;, null, null); mv.visitCode(); mv.visitVarInsn(DLOAD, 0); mv.visitMethodInsn(INVOKESTATIC, java/lang/Double, toString, (D)Ljava/lang/String;); mv.visitInsn(ARETURN); mv.visitMaxs(2, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_NATIVE, intern, ()Ljava/lang/String;, null, null); mv.visitEnd(); } { mv cw.visitMethod(ACC_PUBLIC ACC_BRIDGE ACC_SYNTHETIC, compareTo, (Ljava/lang/Object;)I, null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, java/lang/String); mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/String, compareTo, (Ljava/lang/String;)I); mv.visitInsn(IRETURN); mv.visitMaxs(2, 2); mv.visitEnd(); } { mv cw.visitMethod(ACC_STATIC, clinit, ()V, null, null); mv.visitCode(); mv.visitInsn(ICONST_0); mv.visitTypeInsn(ANEWARRAY, java/io/ObjectStreamField); mv.visitFieldInsn(PUTSTATIC, java/lang/String, serialPersistentFields, [Ljava/io/ObjectStreamField;); mv.visitTypeInsn(NEW, java/lang/String$CaseInsensitiveComparator); mv.visitInsn(DUP); mv.visitInsn(ACONST_NULL); mv.visitMethodInsn(INVOKESPECIAL, java/lang/String$CaseInsensitiveComparator, init, (Ljava/lang/String$1;)V); mv.visitFieldInsn(PUTSTATIC, java/lang/String, CASE_INSENSITIVE_ORDER, Ljava/util/Comparator;); mv.visitInsn(RETURN); mv.visitMaxs(3, 0); mv.visitEnd(); } cw.visitEnd();return cw.toByteArray(); } } 该代码显示了如何创建大多数类构件。 我现在将解释部分代码。 但是我将使用一个更简单的类进行演示并且还希望添加适当的注释。 我之所以讨论上述内容是为了防止万一您无法创建特定的工件您可以简单地编译一个包含该工件的类然后使用ASMifier生成代码以查看其创建方式。 我将使用以下代码作为示例。 ClassCreationDemoMaker类创建一个类该类将是对ClassCreationDemo类进行编译的结果。 ClassCreationDemo.java package com.geekyarticles.asm;public class ClassCreationDemo {private int version;public int getVersion() {return version;}public void setVersion(int version) {this.version version;}Overridepublic String toString(){return ClassCreationDemo: version;} } ClassCreationDemoMaker.java package com.geekyarticles.asm; import java.io.DataOutputStream; import java.io.FileOutputStream; import static org.objectweb.asm.Opcodes.*; import org.objectweb.asm.*;public class ClassCreationDemoMaker {public static byte[] dump () throws Exception {//ClassWriter is a class visitor that generates the code for the classClassWriter cw new ClassWriter(0);FieldVisitor fv;MethodVisitor mv;//Start creating the class. cw.visit(V1_6, ACC_PUBLIC ACC_SUPER, com/geekyarticles/asm/ClassCreationDemo, null, java/lang/Object, null);{//version fieldfv cw.visitField(ACC_PRIVATE, version, I, null, null);fv.visitEnd();}{//Implementing the constructormv cw.visitMethod(ACC_PUBLIC, init, ()V, null, null);mv.visitCode();mv.visitVarInsn(ALOAD, 0);mv.visitMethodInsn(INVOKESPECIAL, java/lang/Object, init, ()V);mv.visitInsn(RETURN);mv.visitMaxs(1, 1);mv.visitEnd();}{//getVersion Methodmv cw.visitMethod(ACC_PUBLIC, getVersion, ()I, null, null);mv.visitCode();mv.visitVarInsn(ALOAD, 0);mv.visitFieldInsn(GETFIELD, com/geekyarticles/asm/ClassCreationDemo, version, I);mv.visitInsn(IRETURN);mv.visitMaxs(1, 1);mv.visitEnd();}{//setVersion Methodmv cw.visitMethod(ACC_PUBLIC, setVersion, (I)V, null, null);mv.visitCode();mv.visitVarInsn(ALOAD, 0);mv.visitVarInsn(ILOAD, 1);mv.visitFieldInsn(PUTFIELD, com/geekyarticles/asm/ClassCreationDemo, version, I);mv.visitInsn(RETURN);mv.visitMaxs(2, 2);mv.visitEnd();}{//toString methodmv cw.visitMethod(ACC_PUBLIC, toString, ()Ljava/lang/String;, null, null);mv.visitCode();mv.visitTypeInsn(NEW, java/lang/StringBuilder);mv.visitInsn(DUP);mv.visitLdcInsn(ClassCreationDemo: );mv.visitMethodInsn(INVOKESPECIAL, java/lang/StringBuilder, init, (Ljava/lang/String;)V);mv.visitVarInsn(ALOAD, 0);mv.visitFieldInsn(GETFIELD, com/geekyarticles/asm/ClassCreationDemo, version, I);mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/StringBuilder, append, (I)Ljava/lang/StringBuilder;);mv.visitMethodInsn(INVOKEVIRTUAL, java/lang/StringBuilder, toString, ()Ljava/lang/String;);mv.visitInsn(ARETURN);mv.visitMaxs(3, 1);mv.visitEnd();}cw.visitEnd();return cw.toByteArray();}public static void main(String [] args) throws Exception{DataOutputStream doutnew DataOutputStream(new FileOutputStream(ClassCreationDemo.class));dout.write(dump());dout.flush();dout.close();} } 创建类的基本原理是使用ClassWriter对象即ClassVisitor然后以适当的顺序在其中调用不同的访问方法。 在这种情况下我们只创建了一个字段和三个方法。 必须创建构造函数。 该代码很容易理解。 请注意在ClassWriter中调用visitMethod方法之后我们已使用从其返回的MethodWriter在该方法中编写代码。 这里还要注意我们已经为每种方法手动分配了最大堆栈大小。 我们也可以在ClassWriter构造函数中使用ClassWriter.COMPUTE_MAXS标志来避免这样做。 编写课程始终是一个记忆过程。 这是因为在类中使用的常量始终需要位于常量池中该常量池靠近该类的开头并且它存储所有字段和方法名称以及所有其他内容。 修改类老实说这是ASM的亮点因为它非常易于使用。 在本节中我们将创建类ClassModifierDemo该类将修改类ClassModificationDemo。 修饰符的工作是在每个方法调用包括构造函数中插入一个打印其名称的代码。 ClassModifierDemo.java package com.geekyarticles.asm;import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream;import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes;public class ClassModifierDemo {public static class ModifierMethodWriter extends MethodVisitor{private String methodName;public ModifierMethodWriter(int api, MethodVisitor mv, String methodName) {super(api, mv);this.methodNamemethodName;}//This is the point we insert the code. Note that the instructions are added right after//the visitCode method of the super class. This ordering is very important.Overridepublic void visitCode() {super.visitCode();super.visitFieldInsn(Opcodes.GETSTATIC, java/lang/System, out, Ljava/io/PrintStream;);super.visitLdcInsn(method: methodName);super.visitMethodInsn(Opcodes.INVOKEVIRTUAL, java/io/PrintStream, println, (Ljava/lang/String;)V);}}//Our class modifier class visitor. It delegate all calls to the super class//Only makes sure that it returns our MethodVisitor for every methodpublic static class ModifierClassWriter extends ClassVisitor{private int api;public ModifierClassWriter(int api, ClassWriter cv) {super(api, cv);this.apiapi;}Overridepublic MethodVisitor visitMethod(int access, String name, String desc,String signature, String[] exceptions) {MethodVisitor mv super.visitMethod(access, name, desc, signature, exceptions);ModifierMethodWriter mvwnew ModifierMethodWriter(api, mv, name);return mvw;}}public static void main(String[] args) throws IOException {InputStream inASMHelloWorld.class.getResourceAsStream(/com/geekyarticles/asm/ClassModificationDemo.class);ClassReader classReadernew ClassReader(in);ClassWriter cwnew ClassWriter(ClassWriter.COMPUTE_MAXS);//Wrap the ClassWriter with our custom ClassVisitorModifierClassWriter mcwnew ModifierClassWriter(Opcodes.ASM4, cw);classReader.accept(mcw, 0);//Write the output to a class fileFile outputDirnew File(out/com/geekyarticles/asm);outputDir.mkdirs();DataOutputStream doutnew DataOutputStream(new FileOutputStream(new File(outputDir,ClassModificationDemo.class)));dout.write(cw.toByteArray());}} ClassModificationDemo.java package com.geekyarticles.asm;public class ClassModificationDemo {private int version;public int getVersion() {return version;}public void setVersion(int version) {this.version version;}Overridepublic String toString(){return ClassCreationDemo: version;}public static void main(String[] args) {System.out.println(new ClassModificationDemo());}} 此示例是阅读和创建类的组合。 在这种情况下我们只需用自己的ClassVisitor包装ClassWriter。 它简单地将所有调用直接委派给ClassWriter但visitMethod除外后者被编写为将ClassWriter返回的MethodVisitor用我们自己的包装。 MethodVisitor还将直接将所有调用委派给超类但visitCode除外它用于插入自定义代码。 运行该程序后将在out目录中使用适当的包结构创建新版本的ClassModificationDemo。 现在我们可以从out目录运行ClassModificationDemo类并查看结果。 它将打印何时调用哪个方法。 参考 使用ASM 4处理Java类文件–第一部分Hello World 来自我们的JCG合作伙伴   极客文章博客上的Debasish Ray Chawdhuri。 翻译自: https://www.javacodegeeks.com/2012/02/manipulating-java-class-files-with-asm.html
http://www.pierceye.com/news/631796/

相关文章:

  • 自助网站建设技术支持如何做网站代码
  • 企业数据查询网站word 没有安装wordpress
  • 注册一个设计公司需要多少钱重庆网站建设及优化
  • 青岛企业建设网站公司如何传图片做网站
  • 手机网站源码教程个人博客系统的设计与实现
  • 高端网站改版南京网站如何制作
  • 个人网站建设课程专业彩票网站开发 APP开发
  • 学网站开发首先学哪些基础兰州网站设计哪个平台好
  • 网站后台看不到部分内容桐庐建设局网站
  • 宁夏网站建设费用地址wordpress建站好用吗
  • 微信网站制作哪个好吕梁网站制作
  • 手机怎么制作自己的网站线上运营推广方案
  • 泉州企业制作网站wordpress上传顶部图像
  • php建立网站广州创意设计公司
  • 东营专业网站建设济南天桥区网站建设公司
  • 鹤壁做网站多少钱网站开发 简单留言板
  • 网站建设 阿里东莞seo建站优化公司
  • logo设计竞标网站wordpress攻击跳转
  • 专门做瑜伽的网站wordpress docker镜像
  • 中国航天建设集团有限公司网站wordpress建站 防攻击
  • 买邮箱的网站网站与系统对接图文方案
  • 网页和网站区别wordpress展示企业主题免费
  • 网站制作过程个人网站吗
  • gta5网站建设中温州建设局老网站
  • 凤岗仿做网站专业网站设计制作优化排名
  • 企业网站seo优化德国设计网站大全
  • 重庆网站制作公司电话whois域名查询
  • 六安网站自然排名优化价格自己做网站前端开发
  • 网站发布与推广怎么写广东省城乡建设厅网站
  • 用ipv6地址做网站访问上海网址推广