1 32 package net.sf.retrotranslator.transformer; 33 34 import net.sf.retrotranslator.runtime.asm.*; 35 36 39 class ArrayCloningVisitor extends ClassAdapter { 40 41 public ArrayCloningVisitor(ClassVisitor visitor) { 42 super(visitor); 43 } 44 45 public MethodVisitor visitMethod(int access, String name, String desc, String signature, String [] exceptions) { 46 MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions); 47 return visitor == null ? null : new MethodAdapter(visitor) { 48 49 public void visitMethodInsn(int opcode, String owner, String name, String desc) { 50 if (opcode == Opcodes.INVOKEVIRTUAL && owner.charAt(0) == '[' && 51 name.equals("clone") && desc.equals(TransformerTools.descriptor(Object .class))) { 52 owner = Type.getInternalName(Object .class); 53 } 54 super.visitMethodInsn(opcode, owner, name, desc); 55 } 56 57 }; 58 } 59 } 60 | Popular Tags |