日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

使用ASM 4处理Java类文件–第一部分:世界,您好!

發布時間:2023/12/3 java 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用ASM 4处理Java类文件–第一部分:世界,您好! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是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 cl=new 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 in=ASMHelloWorld.class.getResourceAsStream("/java/lang/String.class");ClassReader classReader=new 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("\n"+name+desc);MethodVisitor oriMv= new MethodVisitor(4) {};//An instructionAdapter is a special MethodVisitor that//lets us process instructions easilyInstructionAdapter instMv=new 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 in=ASMHelloWorld.class.getResourceAsStream("/com/geekyarticles/asm/ASMHelloWorld.class");ClassReader classReader=new 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.String>>StringDump.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/Comparable<Ljava/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/Comparator<Ljava/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 dout=new 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.methodName=methodName;}//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.api=api;}@Overridepublic MethodVisitor visitMethod(int access, String name, String desc,String signature, String[] exceptions) {MethodVisitor mv= super.visitMethod(access, name, desc, signature, exceptions);ModifierMethodWriter mvw=new ModifierMethodWriter(api, mv, name);return mvw;}}public static void main(String[] args) throws IOException {InputStream in=ASMHelloWorld.class.getResourceAsStream("/com/geekyarticles/asm/ClassModificationDemo.class");ClassReader classReader=new ClassReader(in);ClassWriter cw=new ClassWriter(ClassWriter.COMPUTE_MAXS);//Wrap the ClassWriter with our custom ClassVisitorModifierClassWriter mcw=new ModifierClassWriter(Opcodes.ASM4, cw);classReader.accept(mcw, 0);//Write the output to a class fileFile outputDir=new File("out/com/geekyarticles/asm");outputDir.mkdirs();DataOutputStream dout=new 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

總結

以上是生活随笔為你收集整理的使用ASM 4处理Java类文件–第一部分:世界,您好!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

99久久网站 | 中文字幕91视频 | 一区二区三区在线观看 | 97超级碰碰碰碰久久久久 | 日韩在线观看视频网站 | 五月婷社区 | 欧美日韩另类在线观看 | 日日夜夜网 | 国产高清不卡av | 亚洲黄色在线观看 | 国产综合福利在线 | 丁香激情综合国产 | 久久电影色| 成年人黄色免费看 | 欧美激情精品 | 中文一区二区三区在线观看 | 日本韩国在线不卡 | 中文字幕在线看片 | www在线观看视频 | 日韩一二三区不卡 | 久久久国产精品亚洲一区 | 综合天天色 | 西西www444 | 九九免费在线看完整版 | 久久久久久久久久久免费av | 色多视频在线观看 | 亚洲资源在线网 | 狠狠色丁香婷婷综合久小说久 | 亚洲第一区在线播放 | 欧美日韩国产精品一区二区 | 国产精品一区二区视频 | 国产精品尤物 | 911免费视频 | 青青河边草免费 | 高清视频一区 | 99国产精品视频免费观看一公开 | 99久久久久久久 | 久久av观看| 美女免费黄视频网站 | 奇米网网址 | 亚洲一级黄色av | 亚洲精品乱码久久久久久 | 国产成人精品一区二区三区免费 | 国产探花在线看 | 亚洲视频免费在线观看 | 三级免费黄 | 天天天在线综合网 | 99国产精品免费网站 | 人人添人人澡人人澡人人人爽 | 日日干天天| 中文国产字幕在线观看 | 国产精品福利无圣光在线一区 | 500部大龄熟乱视频 欧美日本三级 | 久草在线播放视频 | 奇米网777| 九九九九九精品 | 69热国产视频 | 国产不卡片 | 日本不卡一区二区三区在线观看 | 特黄特黄的视频 | 349k.cc看片app | 久久爱资源网 | 精品国产成人在线 | 国产一区二区三区高清播放 | 激情五月六月婷婷 | 久久久精品福利视频 | 在线免费观看欧美日韩 | 久热只有精品 | 欧美坐爱视频 | 天天操天天干天天玩 | 玖草影院| 黄色软件视频大全免费下载 | av高清在线观看 | 中文字幕中文字幕在线中文字幕三区 | 国内外成人在线视频 | 久久大片 | 9在线观看免费高清完整版在线观看明 | 精品国产乱码久久久久久天美 | 成年人黄色大片在线 | 黄网站色成年免费观看 | 成人一级片视频 | 一本一本久久a久久精品综合妖精 | 在线视频手机国产 | 91香蕉嫩草 | 亚洲视频在线观看网站 | 国产精品黄网站在线观看 | av电影中文字幕 | 国产精品久久久久久久久岛 | 怡红院久久 | 国产精品成人av电影 | 精品一区二区免费在线观看 | 中文字幕av在线不卡 | 在线观看av大片 | 日日干网| 久久国产精品免费视频 | 久久综合久久综合久久 | 少妇视频一区 | 久久午夜视频 | 久久午夜精品 | 日本久久久久久科技有限公司 | 欧美精品久久久久久久久久 | 久久久精品二区 | 成人三级视频 | 久久精彩免费视频 | 久久伦理电影网 | 日韩网站中文字幕 | 亚洲午夜精品久久久久久久久久久久 | 超碰在线免费97 | 成人av影院在线观看 | 日韩中文字幕视频在线观看 | 国产精品99久久久久久有的能看 | 国产在线观看免费 | 国产麻豆果冻传媒在线观看 | 深爱激情综合 | 99亚洲精品 | 午夜黄色大片 | 日韩免费电影一区二区三区 | www国产一区 | 色吊丝av中文字幕 | 在线中文字幕观看 | 激情婷婷色 | 久久精品免费电影 | 91桃色视频 | 欧美日韩国产一二 | 人人cao| 国产第页 | 91探花国产综合在线精品 | 欧美一区中文字幕 | 国产成人精品不卡 | 好看的国产精品视频 | 在线观看91视频 | 天天操网址| 成人小视频在线观看免费 | 欧美性色网站 | 成人性生交大片免费观看网站 | 黄网站免费久久 | 亚洲高清视频在线观看 | 黄色午夜 | 久草免费在线视频 | 免费在线黄色av | 精品在线观看一区二区 | 久久久久成人精品免费播放动漫 | 日韩av高潮| 国产区精品视频 | 亚洲成人精品久久 | 日韩艹 | 午夜在线免费观看视频 | 精品一区二区免费在线观看 | 国产一在线精品一区在线观看 | 91视视频在线直接观看在线看网页在线看 | 日韩在线电影一区二区 | 国产免费午夜 | 91九色视频在线 | 久久国产精品99久久久久久进口 | 精品成人久久 | 国产在线观看免 | 久久久久久久久久久久电影 | 日日爽夜夜操 | 五月婷婷久久丁香 | 亚洲视频一区二区三区在线观看 | 久久久久免费精品国产 | 久久久久免费精品 | 麻豆精品视频在线观看免费 | 国产99一区| 久久午夜网 | 成人av网站在线观看 | 亚洲精品在线观看网站 | 美女网站视频一区 | av噜噜噜在线播放 | av中文字幕网站 | 久久久免费看视频 | 欧美日韩视频一区二区三区 | 成人av在线影院 | 久草在线免费资源站 | 粉嫩av一区二区三区四区五区 | 中文字幕在线观看1 | 最近免费观看的电影完整版 | 我要看黄色一级片 | 日本bbbb摸bbbb | 西西大胆免费视频 | 色综合久久久久综合体桃花网 | 香蕉97视频观看在线观看 | 国产精品麻豆三级一区视频 | 日韩 在线观看 | 成人app在线播放 | 国产又粗又猛又色又黄网站 | 日韩中文字幕电影 | 久久一区精品 | 婷婷色九月| adn—256中文在线观看 | 91视频在线看 | 在线电影日韩 | 欧美与欧洲交xxxx免费观看 | 四虎成人网 | 亚洲深爱激情 | 国产婷婷精品av在线 | 国内成人精品2018免费看 | 亚洲女在线 | 午夜影院三级 | 久久久官网 | www.干| 国产成人精品免高潮在线观看 | 特级毛片网 | 午夜av激情 | 麻豆91在线看 | 最新av在线播放 | 精品一区在线 | 日日夜夜精品视频天天综合网 | 黄色小说视频在线 | 91中文字幕在线 | 国产91在线播放 | 欧美性色黄大片在线观看 | 在线影视 一区 二区 三区 | 日韩av电影中文字幕在线观看 | 成人午夜电影免费在线观看 | 亚洲一区二区三区在线看 | 97超视频免费观看 | 久青草国产在线 | 天天插视频| 成人羞羞视频在线观看免费 | 精品国产乱码久久久久久天美 | 久久好看| 五月婷婷一级片 | 97成人资源站 | 亚洲国产精品99久久久久久久久 | 国产美女精彩久久 | 99在线观看免费视频精品观看 | 亚洲性xxxx | 天天天天天天干 | 亚洲精品福利在线 | 天天草天天摸 | 日韩在线一二三区 | av在线播放不卡 | 亚洲japanese制服美女 | 久久狠狠亚洲综合 | 欧美另类巨大 | 91精品国产综合久久久久久久 | 九九热在线免费观看 | 91精品久久久久久综合五月天 | 国产亚洲激情视频在线 | 欧美一区二视频在线免费观看 | 精品国产免费一区二区三区五区 | 五月婷婷六月丁香激情 | 一区中文字幕在线观看 | 黄网站色成年免费观看 | 91精品国产99久久久久久久 | 免费三级黄色 | 精品免费99久久 | 亚洲国产影院av久久久久 | 欧美最猛性xxxxx亚洲精品 | 亚洲国产网址 | 国产精品美女999 | 亚洲人成在线电影 | av中文资源在线 | 国产精品久久久久久久99 | 天天草天天草 | 免费看三片| 国产精品毛片一区视频播不卡 | 国产韩国精品一区二区三区 | 黄色免费在线视频 | a天堂中文在线 | 国产一区视频在线 | 黄色av电影网 | 欧洲亚洲激情 | 亚洲国产成人精品久久 | 欧美坐爱视频 | 久久精品亚洲国产 | 国产在线观看高清视频 | 亚洲视频播放 | 国产麻豆电影在线观看 | a√天堂中文在线 | 欧美男同网站 | 日本女人逼 | 91豆花在线 | 九九热视频在线播放 | 亚洲人在线7777777精品 | 日韩精品高清视频 | 中文字幕 婷婷 | 免费日韩 精品中文字幕视频在线 | 麻豆久久久久 | 国产91在线免费视频 | 成人国产网址 | 最近日韩免费视频 | 欧美专区亚洲专区 | 久久精品3| 亚洲精品av在线 | 国产精品久久久久久久婷婷 | 亚州精品在线视频 | 国产精品第一视频 | 成人在线观看资源 | 亚洲片在线观看 | 在线观看免费黄视频 | 日日干视频 | 亚洲国产一二三 | 国产一级黄色电影 | 麻豆国产在线播放 | a在线观看免费视频 | 97在线免费观看 | 97国产精品一区二区 | 欧美另类交人妖 | 中文字幕在线网址 | 一区二区在线不卡 | 国产精品女人久久久 | 中文字幕精品一区久久久久 | 久草在线手机视频 | 日日日日干 | 人人干人人搞 | 最近日本字幕mv免费观看在线 | 麻豆94tv免费版 | 国产亚洲精品综合一区91 | 久草在线看片 | 日韩影片在线观看 | www.夜夜| 中文字幕在线观看你懂的 | 成人动图 | 亚洲国内精品在线 | 国产精品九九久久99视频 | 国内一区二区视频 | 亚洲精品在线免费看 | 久久久www成人免费精品 | 天天爱天天射 | av高清免费在线 | 天天干天天做天天操 | 亚洲国产高清在线观看视频 | 中文在线www | 激情影院在线观看 | 91色九色 | 国产电影一区二区三区四区 | 91九色免费视频 | 国产精品一区免费在线观看 | 毛片二区 | 91香蕉嫩草 | 中文电影网| 天天干天天碰 | 中文字幕区 | 亚洲精品永久免费视频 | 99久久99久久精品免费 | a亚洲视频| 黄色在线观看网站 | 在线免费观看视频一区 | 黄色在线观看www | 婷婷色综合色 | 免费av一级电影 | 日本午夜在线观看 | 免费人成在线观看网站 | 日韩免费一二三区 | 99久免费精品视频在线观看 | 精品在线二区 | 国产精品视频线看 | 波多野结衣视频一区二区三区 | 国产视频 亚洲精品 | 免费在线中文字幕 | 亚洲黄色激情小说 | 欧美激情综合五月色丁香小说 | 不卡视频在线看 | 欧美与欧洲交xxxx免费观看 | 看片网站黄| 国产一级免费播放 | 成人av在线一区二区 | 欧美做受xxx | 亚洲综合成人婷婷小说 | av免费看在线| 国产一区视频导航 | 国产黄在线 | 精品国产1区2区 | 国产 在线 高清 精品 | 激情网五月天 | www黄色com| 国产综合视频在线观看 | 天天色综合天天 | a视频免费看 | 免费看国产曰批40分钟 | 日本久久久影视 | 亚洲有 在线 | 视频在线观看日韩 | 欧美日韩国产网站 | 丁香花在线视频观看免费 | a级片在线播放 | 天天干天天上 | 久久精品视频免费播放 | 欧美一级日韩三级 | 久久大视频 | 91丨九色丨蝌蚪丰满 | 久久国产精品99精国产 | 日韩精品久久久久 | 探花在线观看 | 国际精品久久 | 久久久久久高潮国产精品视 | 香蕉视频在线视频 | 久久成人高清 | 青草视频网 | 久久伊人婷婷 | 日韩在线一区二区免费 | 久久都是精品 | 亚洲区视频在线观看 | 超级碰视频 | 久久成熟 | 国产在线p | 久艹视频在线免费观看 | 亚洲天堂网在线视频 | 国产中文字幕国产 | 天天天操操操 | 欧美成人亚洲 | 中文伊人 | 天天干天天操天天爱 | 欧美做受高潮1 | 亚洲午夜久久久久久久久久久 | 日韩理论在线播放 | 成人h在线| 欧美日韩一区二区在线观看 | 91漂亮少妇露脸在线播放 | 国产中文字幕网 | 久久99久久99精品中文字幕 | 国产亚洲精品久久久久久大师 | 欧美va天堂va视频va在线 | 91精品免费在线 | 国产精品久久久久婷婷二区次 | 激情久久久久久久久久久久久久久久 | 日韩aa视频| 国产高清视频在线观看 | 国产黄色一级大片 | 国产精品美女免费视频 | 天天干,天天操 | 久草在线免 | 国产精品久久久久久久久岛 | 欧美一区二区三区在线 | 国产在线小视频 | 9在线观看免费高清完整 | 99视频国产精品 | 国产精品久久久久久久久久久久午 | 玖操| 国产精品成人一区二区三区吃奶 | 爱色婷婷 | 欧美一区影院 | 岛国精品一区二区 | 懂色av一区二区三区蜜臀 | 免费视频久久久久 | 激情小说久久 | 色婷婷亚洲综合 | 日韩三级久久 | 免费男女羞羞的视频网站中文字幕 | 成人精品在线 | 日韩欧美在线免费观看 | 国产一二区免费视频 | 一区中文字幕在线观看 | 最新国产在线视频 | 婷婷av在线 | 在线久热 | av女优中文字幕在线观看 | 美女精品久久久 | 伊人久久av | 天天激情综合网 | 欧美日韩久 | 久久免费视频6 | 国产精品久久久久久超碰 | a√天堂中文在线 | 国产五月色婷婷六月丁香视频 | 久久久久久久久黄色 | 久综合网 | 国产精品美女999 | 看av免费 | 久久久综合九色合综国产精品 | 狠狠88综合久久久久综合网 | 国产字幕在线观看 | av电影中文字幕在线观看 | 香蕉视频网站在线观看 | 色全色在线资源网 | 国产一区二区在线精品 | 久久久久久久久综合 | 五月天综合激情网 | 久久国产精品免费观看 | 成人网中文字幕 | 国产精品久久久久久久久毛片 | 亚洲色图激情文学 | 久久久一本精品99久久精品 | 丝袜少妇在线 | 色综合天天天天做夜夜夜夜做 | 黄色毛片网站在线观看 | 亚洲国产日韩精品 | 中文字幕乱码一区二区 | 2019中文 | 激情五月伊人 | 婷婷在线免费视频 | 久久精品一区二区国产 | 国产精品成人国产乱一区 | 国产一区二区在线免费播放 | 国产91成人在在线播放 | 久久男女视频 | 美女黄频 | 综合久久久久久久久 | 国产字幕在线看 | 日韩a级黄色片 | 国产欧美三级 | 国产精品久久久久久久久久不蜜月 | 久久免费福利视频 | 成人黄色免费在线观看 | 永久免费观看视频 | 久久精品一二区 | 中文字幕一区二区三区精华液 | 91在线亚洲 | 亚洲经典在线 | 四虎影视成人永久免费观看亚洲欧美 | 六月婷婷久香在线视频 | 亚洲成人黄色在线 | 久久综合综合久久综合 | 亚洲日本va午夜在线电影 | www.神马久久 | 片黄色毛片黄色毛片 | 国产女人40精品一区毛片视频 | 中文字幕中文中文字幕 | 亚洲欧美日韩国产一区二区三区 | 美女国产网站 | 成人一级片视频 | 麻豆视频在线 | 久久久高清一区二区三区 | 黄色免费大全 | 久草免费资源 | 偷拍福利视频一区二区三区 | 午夜视频免费在线观看 | 欧美色图狠狠干 | 99在线精品视频 | 精品九九久久 | 精品免费久久久久久 | 久久黄页 | 亚洲精品综合欧美二区变态 | 中文字幕色网站 | 日韩欧美一区视频 | 亚洲欧美日韩精品久久奇米一区 | 亚洲日韩精品欧美一区二区 | www免费看片com | 一级电影免费在线观看 | 亚洲精品视频在线播放 | 天天操狠狠操夜夜操 | 三级av免费 | 亚洲国产精品激情在线观看 | 色欧美视频 | 欧美另类调教 | 我爱av激情网 | 亚洲精品一区二区三区新线路 | 91亚洲精品久久久蜜桃 | 免费在线色视频 | 久久视频精品 | 国产成人福利在线 | 日本精品久久久久影院 | 中文字幕av有码 | 福利视频一区二区 | 中文字幕不卡在线88 | 欧美有色 | 91在线看 | 91精品国产乱码 | 国产成人在线观看 | 午夜婷婷在线观看 | 91cn国产在线 | 久草精品免费 | 国产一区二区手机在线观看 | 国产成人精品免费在线观看 | 亚洲a在线观看 | 日韩综合在线观看 | 国产综合婷婷 | 婷婷中文在线 | 久草网免费 | 在线观看黄色的网站 | 久久久久亚洲精品中文字幕 | 国产精品一区二区美女视频免费看 | 激情一区二区三区欧美 | 免费在线国产 | 人人爽人人爽av | 麻花豆传媒mv在线观看网站 | 精品成人在线 | 亚洲黄色片 | 国产精品中文字幕在线观看 | 婷婷资源站 | 六月激情丁香 | 日韩一区二区三区在线观看 | 久草资源免费 | 狠狠色丁香婷婷综合视频 | 亚洲专区免费观看 | 久久综合九色综合97婷婷女人 | 欧美日韩免费看 | 播五月综合| 超碰在线97观看 | 久草在线官网 | 91av资源在线 | 久久久一本精品99久久精品66 | 国产精品激情 | 一区二区三区四区五区在线视频 | 九九综合九九 | 久久久www成人免费精品 | 91九色porny蝌蚪视频 | 九月婷婷综合网 | 国产黄色大片 | 国产精品乱码久久久 | 成人国产精品电影 | 免费中午字幕无吗 | 97av在线视频免费播放 | 国产美女无遮挡永久免费 | 特级a毛片| 亚洲麻豆精品 | 国产中文欧美日韩在线 | 欧美日韩视频免费 | 五月综合网 | 精品国产乱码久久久久久1区二区 | 久草在线资源观看 | 国产免费激情久久 | 在线草| 国产在线理论片 | 国产精品白浆视频 | 色a资源在线 | 青春草免费在线视频 | 精品一区二区久久久久久久网站 | 久久99精品国产麻豆婷婷 | 成人网看片 | 天天综合色天天综合 | 久久精品免费电影 | 亚洲欧美日本国产 | 中文字幕在线观看免费高清完整版 | 国产欧美精品一区二区三区 | 97狠狠干| 91插插视频| 在线观看av小说 | 国产精品一区二区久久 | 亚洲精品国产精品国产 | 激情久久久 | 国产香蕉视频 | 日韩av免费一区二区 | 午夜精品一区二区三区可下载 | 亚洲精品动漫成人3d无尽在线 | 精品国内自产拍在线观看视频 | 区一区二区三在线观看 | 高清中文字幕av | 夜夜骑日日操 | 在线国产视频观看 | 日韩av不卡播放 | 国产激情电影综合在线看 | 精品一区二区视频 | 亚洲综合激情小说 | 欧美一级乱黄 | 国产亚洲无 | 成人福利在线 | 国产91在线 | 美洲 | 亚洲午夜精品久久久 | 黄色视屏av | 国产精品久久久久999 | 97精品国产一二三产区 | 亚洲黄色在线播放 | 国产成人一区二区三区影院在线 | 91一区啪爱嗯打偷拍欧美 | 亚洲国产偷 | 亚洲欧美国产日韩在线观看 | 在线看黄色的网站 | 91精彩视频在线观看 | 天天操夜夜操 | 亚洲视屏一区 | 日韩精品免费一线在线观看 | 在线观看www91 | 国产精品久久久久久久电影 | 国产精品精品国产婷婷这里av | 精品视频在线观看 | 99久久久国产精品 | 色狠狠干 | 日本精品久久久久中文字幕5 | 91精品国产亚洲 | 91精品国产自产在线观看永久 | 国产精品亚洲综合久久 | 亚洲三级在线播放 | 97超级碰碰碰视频在线观看 | 日本在线h | 一区二区三区高清在线 | 亚洲女欲精品久久久久久久18 | 欧美亚洲另类在线视频 | 亚洲国产精品成人av | 天天爽天天爽 | 深爱婷婷网 | 高清av免费看 | 欧美日韩国语 | 特级xxxxx欧美 | 91网址在线观看 | 99久久日韩精品视频免费在线观看 | 久久躁日日躁aaaaxxxx | 久久综合九色综合久99 | 日韩毛片在线一区二区毛片 | 91精品国 | 日韩午夜视频在线观看 | 8x成人免费视频 | 中文字幕av全部资源www中文字幕在线观看 | 九色精品免费永久在线 | 精品在线观看免费 | 久久男人免费视频 | 久久高清视频免费 | 国产在线传媒 | 久久不卡视频 | 欧美日韩国产网站 | 91女神的呻吟细腰翘臀美女 | 久久激情视频 久久 | 色天堂在线视频 | 久草爱视频 | 91视频在线观看免费 | 国产精品美女久久久久久 | 精品成人免费 | 天天操人人干 | 在线播放一区二区三区 | 99在线视频观看 | 天天玩天天干天天操 | 久久精品中文字幕少妇 | 午夜狠狠操 | 久久综合久色欧美综合狠狠 | 国产精品久久人 | 日韩毛片在线免费观看 | 69精品视频在线观看 | 91麻豆视频网站 | 久久久久久网站 | 免费网站黄色 | 91人人网 | 国产精品亚州 | se婷婷| 亚洲精区二区三区四区麻豆 | 超碰人人舔 | 欧美男同视频网站 | 成人免费视频网站在线观看 | 欧美a级在线免费观看 | 97天堂| 成人av影视在线 | 丁香六月中文字幕 | 91精品国产91久久久久 | 狠狠狠干狠狠 | 久久中文字幕视频 | 国内精品久久久久影院日本资源 | 中文字幕永久免费 | 激情婷婷在线观看 | 精品国产乱码久久久久久浪潮 | 日本69hd | 日韩精品中文字幕av | 中文字幕成人网 | 色干综合| 三级小视频在线观看 | 成人av在线直播 | 日本精品视频免费观看 | 日日爱网址 | 91九色自拍| 中文字幕日韩国产 | 成人中文字幕+乱码+中文字幕 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日韩欧美在线观看一区二区三区 | 99爱爱| 精品一区二区在线看 | 亚洲日本中文字幕在线观看 | 欧美国产亚洲精品久久久8v | 伊人资源站| 亚洲免费在线播放视频 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 日本高清久久久 | aaa亚洲精品一二三区 | 国产黄色片久久 | 中文字幕一区二区三区在线观看 | 亚洲综合网 | 蜜桃麻豆www久久囤产精品 | 国产精品福利午夜在线观看 | 久久精久久精 | 免费观看特级毛片 | 免费日韩视 | 中文字幕91视频 | 黄色高清视频在线观看 | 黄网站色视频 | 国产精品成人一区二区三区 | 色综合中文综合网 | 在线日韩 | 天堂av免费在线 | 黄色一区三区 | 天天色天天艹 | 一区中文字幕 | 亚洲第一伊人 | 丁香花在线视频观看免费 | 天天天色 | 国产二区精品 | 国产精品黄色 | 免费男女羞羞的视频网站中文字幕 | 亚洲精品免费在线观看 | 久久伦理影院 | av电影免费看 | 亚洲精品乱码久久久久久蜜桃欧美 | a黄色片| 色婷婷福利视频 | 成人久久 | 色94色欧美 | 天天天色综合 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 国产精品福利在线播放 | 日狠狠| 欧美日韩精品在线播放 | 日韩在线不卡视频 | 激情婷婷网| 97国产精品免费 | 91天堂素人约啪 | www.狠狠| 亚洲成av人影片在线观看 | 欧美日韩高清不卡 | 欧美精品中文在线免费观看 | 国产成人精品不卡 | 九九免费在线看完整版 | 亚洲精品在线视频播放 | 久久视频6 | 日韩精品一区在线播放 | 99精品久久久久久久久久综合 | av一区二区三区在线播放 | 久久狠狠亚洲综合 | 国产99黄| 国产精品久久久久久久婷婷 | 4hu视频 | 欧美天堂视频在线 | 欧美一区二区三区四区夜夜大片 | 久久久国产精品一区二区中文 | 亚洲va欧美va人人爽春色影视 | 欧美性黑人 | 91成人短视频在线观看 | 久久人视频 | 91精品蜜桃| 日日摸日日 | 国产成人333kkk | 久久国产二区 | 色综合天天色综合 | 夜色成人网 | 国产一区二区视频在线播放 | 国产精品福利在线观看 | 中文字幕视频网 | 久久这里只有精品首页 | 国产日韩精品一区二区 | 国产成人久久精品亚洲 | 4438全国亚洲精品观看视频 | 偷拍精品一区二区三区 | 中文字幕 91 | 中文字幕国产视频 | 91在线免费播放视频 | 亚洲经典在线 | 丁香电影小说免费视频观看 | 狠狠做深爱婷婷综合一区 | 国产不卡在线观看 | 久青草电影 | 五月天激情视频在线观看 | av导航福利 | 欧美天天干 | 黄色大全免费观看 | 中文字幕免费看 | 99精品在线免费视频 | 探花视频免费在线观看 | 天堂在线一区 | 久久精品—区二区三区 | 日韩久久久久久久久久 | 国产视频综合在线 | 亚洲午夜久久久久久久久久久 | 91资源在线| 国产小视频91 | 激情欧美丁香 | 久久久精品国产一区二区电影四季 | 国产精品一区二区中文字幕 | 天天射天天射天天射 | 99这里只有 | 97碰碰碰| 国产成人免费精品 | 日韩av女优视频 | 日日碰狠狠躁久久躁综合网 | 久久艹国产视频 | 男女啪啪免费网站 | 久久综合九色综合97_ 久久久 | 国产视频资源 | 国产精品国产三级国产专区53 | 亚洲欧洲成人精品av97 | 九九热中文字幕 | 91中文字幕网 | 91av网站在线观看 | 狠狠色噜噜狠狠狠狠 | 国产精品久久毛片 | 亚洲资源在线网 | avove黑丝| 午夜国产福利在线观看 | 成人小电影在线看 | 欧美一二区在线 | 91视频在线 | 国产精品每日更新 | 黄网站色成年免费观看 | 成人久久| 中文字幕国产在线 | 在线精品观看国产 | 久久这里只有精品视频首页 | 午夜精品一区二区三区免费视频 | 色一色在线 | 奇米影视8888在线观看大全免费 | 免费国产黄线在线观看视频 | 国产91学生粉嫩喷水 | 色婷婷狠狠 | 天天综合成人 | 久艹在线免费观看 | 在线中文字母电影观看 | 久久爽久久爽久久av东京爽 | 91成人精品一区在线播放69 | 精品伦理一区二区三区 | 黄网站大全| 亚洲欧洲精品一区二区精品久久久 | 欧美在线视频一区二区 | 丁香婷婷久久久综合精品国产 | 精品一二| 日韩欧美精品一区 | 欧美精品九九99久久 | 亚洲欧美国产精品 | 亚洲专区免费观看 | 视频一区在线播放 | 欧美大片大全 | 91中文字幕视频 | 久久久在线视频 | 免费在线观看a v | 丁香久久五月 | 中文字幕第一 | 欧美少妇bbwhd | 久久激情视频 久久 | 正在播放久久 | 中文区中文字幕免费看 | 亚洲美女视频在线 | 狠狠干美女 | 99久久激情视频 | 日本精品在线视频 | 黄色大全在线观看 | 日韩欧美成 | 久草视频视频在线播放 | 国产小视频在线免费观看视频 | 国产日韩欧美在线 | av在线电影播放 | 人人澡人人草 | 欧美性生活小视频 | 久久精品电影 | 在线成人欧美 | 欧美一区二区在线刺激视频 | 国产精品久久久视频 | 欧美国产在线看 | 99热这里有精品 | 国产无遮挡又黄又爽馒头漫画 | 午夜手机电影 | 国产麻豆剧果冻传媒视频播放量 | 91精品久久久久久久91蜜桃 | 国产一区二区免费在线观看 | 五月天综合色 | 国产精品久久久久久久毛片 | av一级片在线观看 | 国产精品精品久久久 | 国产精品视频区 | 99久久精品久久亚洲精品 | 久草视频免费在线播放 | 色婷婷中文 | 91日韩精品一区 | 久久综合网色—综合色88 | 免费成人在线网站 | 国产成人久久精品一区二区三区 | 亚洲情影院 | www.国产在线| 日日碰狠狠添天天爽超碰97久久 | 毛片网免费 | 久久九九久久精品 | 在线观看黄av | 欧美一级日韩三级 | 美女天天操 | 日韩一区二区三免费高清在线观看 | 久草免费看 | 亚洲 综合 专区 | 99热最新地址 | 99免费精品| 久久精品国产一区二区 | 99人久久精品视频最新地址 | 少妇激情久久 | 在线观看黄网站 | 欧美大jb| 97人人添人澡人人爽超碰动图 | 成人cosplay福利网站 | 天堂久色 | 中文字幕在线观看第三页 | 欧美视频国产视频 | 麻豆免费视频观看 | 日韩av电影免费观看 | 久久久久久久久久久久亚洲 | 国产精久久久久久妇女av | 亚洲精品综合欧美二区变态 | 热久久最新地址 | 九九九九热精品免费视频点播观看 | 97超碰在线人人 | 欧美孕妇视频 | 香蕉精品在线观看 | 精品国产综合区久久久久久 | 免费看污的网站 | 亚洲精品免费在线观看 | 国产日韩欧美在线 | 亚洲免费视频在线观看 | 深夜国产福利 | 91麻豆传媒 | 欧美一二三四在线 | 一区二区欧美激情 | 丁香花在线视频观看免费 | 91成人精品观看 | 成人一级在线观看 | 一区二区精品在线 | 黄色软件视频网站 | 天堂资源在线观看视频 |