使用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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373642.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373642.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373642.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(轉)C#程序開發中經常遇到的10條實用的代碼

原文地址&#xff1a;http://www.cnblogs.com/JamesLi2015/p/3147986.html 1 讀取操作系統和CLR的版本 OperatingSystem os System.Environment.OSVersion; Console.WriteLine(“Platform: {0}”, os.Platform); Console.WriteLine(“Service Pack: {0}”, os.ServicePack); …

Ueditor的配置及使用

Ueditor官網&#xff1a;http://ueditor.baidu.com/website/ &#xff08;項目需要JSP版本&#xff1a;UTF-8版&#xff09; 1.配置 <script type"text/javascript" charset"utf-8">window.UEDITOR_HOME_URL "${ctx}/assets/plugins/uedi…

努比亞z17s刷原生安卓_電腦運行手機APP,不會沒關系,我推薦你使用顯卡服務器運行安卓模擬器...

很多人都想用電腦端運行手機APP&#xff0c;但是又不知道怎么操作。縱橫170yun小編推薦大家使用顯卡服務器&#xff0c;在顯卡服務器上運行安卓模擬器。讓你輕輕松松在電腦端運行手機APP&#xff0c;甚至還可以多開噢 。如果你的電腦沒有顯卡&#xff0c;也沒有關系&#xff0c…

Linux入門筆記——系統目錄結構

目錄 評論 / 根目錄&#xff0c;萬物起源。 /bin 包含系統啟動和運行所必須的二進制程序。 /boot 包含 Linux 內核&#xff0c;最初的 RAM 磁盤映像&#xff08;系統啟動時&#xff0c;由驅動程序所需&#xff09;&#xff0c;和 啟動加載程序。 有趣的文件&#xff1a; /boot/…

線程故事:關于健壯的線程池

我的主題系列的另一個博客。 這次是關于線程池&#xff0c;尤其是可靠的線程池設置。 在Java中&#xff0c;線程池由Java 5中引入的ThreadPoolExecutor類實現。該類的Javadoc組織得很好。 因此&#xff0c;我不遺余力地在此處進行概述。 基本上&#xff0c; ThreadPoolExecutor…

css縮寫

顏色&#xff1a; 16進制的色彩值為六位數&#xff0c;如果每兩位的值相同&#xff0c;可以縮寫一半。 如&#xff1a;#000000#000&#xff1b; #223344#234&#xff1b; 盒子的尺寸&#xff1a; 如margin:value; 一個值表示所有邊&#xff0c;兩個值表示上下&#xff0c;左右&…

win10改成ubundu主題_如何將ubuntu引導win10,修改為win10引導ubuntu

、首先用LiveCD進入ubuntu2、打開終端&#xff0c;輸入&#xff1a;fdisk -l 查看自己linux的分區情況&#xff0c;我的分了4個區&#xff0c;swap&#xff0c;boot&#xff0c;/&#xff0c;home&#xff0c;對應的分別是&#xff1a;/dev/sda9 swap/dev/sda10 boot/dev/sda11…

Linux入門筆記——文件操作命令1

pwd Print name of current working directory&#xff08;打印出當前工作目錄名&#xff09; cd Change directory&#xff08;更改目錄&#xff09;例子&#xff1a;cd 更改工作目錄到你的家目錄&#xff08;和cd ~命令的運行結果是等同的 &#xff09;cd - 更…

使用MJRefresh自定義下拉刷新,上拉加載動畫

有時候我們需要自己設置下拉刷新,上拉加載動畫的實現,這里主要是記錄下使用MJRefresh自定義下拉刷新,上拉加載動畫..... 下拉刷新我們只需要繼承MJRefreshGifHeader即可: 實現代碼如下: - (void)prepare{[super prepare];self.stateLabel.hidden NO;self.lastUpdatedTimeLabel…

2.mybatis入門實例 連接數據庫進行查詢

1.新建項目&#xff0c;添加mybatis和mysql的jar包 2.在mysql中新建表user[id,name,age] CREATE TABLE users (id int(11) NOT NULL auto_increment,NAME varchar(50) default NULL,age int(11) default NULL,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8 3.新建User類…

使用JacpFX和JavaFX2構建富客戶端

創建快速且可擴展的桌面客戶端始終是一個挑戰&#xff0c;特別是在處理大量數據和長時間運行的任務時。 盡管Eclipse RCP和Netbeans RCP是已建立的平臺&#xff0c;但其想法是建立一個輕量級的框架來異步處理組件&#xff0c;類似于Web組件。 開發人員在線程主題上的工作應較少…

lob移表空間 oracle_Oracle數據庫(1)Oracle體系結構概述(一)

Oracle數據庫的體系結構主要包括&#xff1a;物理存儲結構、邏輯存儲結構、內存結構和實例進程結構。了解了Oracle的體系結構&#xff0c;就可以對Oracle數據庫有一個整體認識&#xff0c;這樣有利于后續Oracle的學習。下面我們分別來了解邏輯存儲結構、物理存儲結構、內存結構…

Linux入門筆記——文件操作命令2

cp Copy files and directories&#xff08;復制文件和目錄&#xff09; cp 選項&#xff1a; 選項 意義 -a, --archive 復制文件和目錄&#xff0c;以及它們的屬性&#xff0c;包括所有權和權限。 通常&#xff0c;復本具有用戶所操作文件的默認屬性。 -i, --interactive 在…

java 對象的上轉型對象(父類)

Example5_10.java class 類人猿 {void crySpeak(String s) {System.out.println(s); } } class People extends 類人猿 {void computer(int a,int b) { int ca*b;System.out.println(c); }void crySpeak(String s) {System.out.println("***"s"***"); }…

EnglishLeaning

今天看了些hadoop官方reference感覺自己詞匯量和語法真是又回到解放前了。于是&#xff0c;痛下決心要好好學習英語。找到了一些學習的方法&#xff0c;自己記錄下來&#xff0c;也和大家一起借鑒 努力目標&#xff1a; 掌握大量的計算機英語術語和縮略語&#xff1b;熟練掌握計…

雇用Java EE開發人員的一些面試問題

互聯網上充斥著Java開發人員的面試問題。 這些問題的主要問題是&#xff0c;它們僅證明候選人具有良好的記憶力&#xff0c;并且記住所有語法&#xff0c;結構&#xff0c;常量等。對他/她的邏輯推理沒有真正的評估。 我在下面列舉了一些面試問題的示例&#xff0c;這些示例根據…

手機mstsc遠程工具_遠程桌面連接,只需3步,輕松遠程操控電腦!

遠程桌面的好處遠程桌面有很多好處的1.對于運維技術人員來說&#xff0c;可以隨時隨地管理遠程主機&#xff0c;查看系統信息和硬件信息等系統性能診斷&#xff0c;遠程應用管理內存、CPU等敏感信息報警提醒&#xff0c;對遠程主機的一切盡收眼2.對于客戶服務來說&#xff0c;可…

Linux入門筆記——type、switch、help、man、apropos、whatis、info

type 顯示命令的類型switch 顯示可執行程序的位置help 得到shell 內部命令的幫助文檔例如&#xff1a;help cd--help 許多可執行程序支持一個 --help 選項&#xff0c;這個選項是顯示命令所支持的語法和選項說明。例如&#xff1a;mkdir --helpman 顯示程序手冊頁許多希望被命令…

linux上的常用的進程與內存優化命令

進程 ps命令 f 以樹狀結構顯示 u 顯示詳細信息 a 顯示所有進程 -A 顯示所有進程 -u 用戶名 是顯示該用戶下的進程 -l 更多進程詳細信息 例子1. 以樹狀結構顯示root用戶下進程的詳細信息 $ps fu -u root 顯示結果如下 USER PID %CPU %MEM VSZ RSS TTY STAT STAR…

qbytearry有數據上限嗎_金仕達大數據開發崗位面試題

金仕達-上海(1)自我介紹(2)在離線數倉&#xff0c;實時數倉中擔任的角色是什么&#xff0c;介紹項目&#xff1f;數據量有多大&#xff1f;(3)實時的指標和離線指標怎么消除掉&#xff1f;有沒有必要一致&#xff1f;(4)Flink上有多少個指標&#xff0c;一個指標一個jar包嗎&am…