< prev index next >

src/java.base/share/classes/jdk/internal/org/objectweb/asm/commons/MethodRemapper.java

Print this page
rev 47452 : imported patch jdk-new-asmv6.patch


  59 
  60 package jdk.internal.org.objectweb.asm.commons;
  61 
  62 import jdk.internal.org.objectweb.asm.AnnotationVisitor;
  63 import jdk.internal.org.objectweb.asm.Handle;
  64 import jdk.internal.org.objectweb.asm.Label;
  65 import jdk.internal.org.objectweb.asm.MethodVisitor;
  66 import jdk.internal.org.objectweb.asm.Opcodes;
  67 import jdk.internal.org.objectweb.asm.TypePath;
  68 
  69 /**
  70  * A {@link LocalVariablesSorter} for type mapping.
  71  *
  72  * @author Eugene Kuleshov
  73  */
  74 public class MethodRemapper extends MethodVisitor {
  75 
  76     protected final Remapper remapper;
  77 
  78     public MethodRemapper(final MethodVisitor mv, final Remapper remapper) {
  79         this(Opcodes.ASM5, mv, remapper);
  80     }
  81 
  82     protected MethodRemapper(final int api, final MethodVisitor mv,
  83             final Remapper remapper) {
  84         super(api, mv);
  85         this.remapper = remapper;
  86     }
  87 
  88     @Override
  89     public AnnotationVisitor visitAnnotationDefault() {
  90         AnnotationVisitor av = super.visitAnnotationDefault();
  91         return av == null ? av : new AnnotationRemapper(av, remapper);
  92     }
  93 
  94     @Override
  95     public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
  96         AnnotationVisitor av = super.visitAnnotation(remapper.mapDesc(desc),
  97                 visible);
  98         return av == null ? av : new AnnotationRemapper(av, remapper);
  99     }


 105                 remapper.mapDesc(desc), visible);
 106         return av == null ? av : new AnnotationRemapper(av, remapper);
 107     }
 108 
 109     @Override
 110     public AnnotationVisitor visitParameterAnnotation(int parameter,
 111             String desc, boolean visible) {
 112         AnnotationVisitor av = super.visitParameterAnnotation(parameter,
 113                 remapper.mapDesc(desc), visible);
 114         return av == null ? av : new AnnotationRemapper(av, remapper);
 115     }
 116 
 117     @Override
 118     public void visitFrame(int type, int nLocal, Object[] local, int nStack,
 119             Object[] stack) {
 120         super.visitFrame(type, nLocal, remapEntries(nLocal, local), nStack,
 121                 remapEntries(nStack, stack));
 122     }
 123 
 124     private Object[] remapEntries(int n, Object[] entries) {

 125         for (int i = 0; i < n; i++) {
 126             if (entries[i] instanceof String) {
 127                 Object[] newEntries = new Object[n];
 128                 if (i > 0) {
 129                     System.arraycopy(entries, 0, newEntries, 0, i);
 130                 }
 131                 do {
 132                     Object t = entries[i];
 133                     newEntries[i++] = t instanceof String ? remapper
 134                             .mapType((String) t) : t;
 135                 } while (i < n);
 136                 return newEntries;
 137             }
 138         }

 139         return entries;
 140     }
 141 
 142     @Override
 143     public void visitFieldInsn(int opcode, String owner, String name,
 144             String desc) {
 145         super.visitFieldInsn(opcode, remapper.mapType(owner),
 146                 remapper.mapFieldName(owner, name, desc),
 147                 remapper.mapDesc(desc));
 148     }
 149 
 150     @Deprecated
 151     @Override
 152     public void visitMethodInsn(final int opcode, final String owner,
 153             final String name, final String desc) {
 154         if (api >= Opcodes.ASM5) {
 155             super.visitMethodInsn(opcode, owner, name, desc);
 156             return;
 157         }
 158         doVisitMethodInsn(opcode, owner, name, desc,




  59 
  60 package jdk.internal.org.objectweb.asm.commons;
  61 
  62 import jdk.internal.org.objectweb.asm.AnnotationVisitor;
  63 import jdk.internal.org.objectweb.asm.Handle;
  64 import jdk.internal.org.objectweb.asm.Label;
  65 import jdk.internal.org.objectweb.asm.MethodVisitor;
  66 import jdk.internal.org.objectweb.asm.Opcodes;
  67 import jdk.internal.org.objectweb.asm.TypePath;
  68 
  69 /**
  70  * A {@link LocalVariablesSorter} for type mapping.
  71  *
  72  * @author Eugene Kuleshov
  73  */
  74 public class MethodRemapper extends MethodVisitor {
  75 
  76     protected final Remapper remapper;
  77 
  78     public MethodRemapper(final MethodVisitor mv, final Remapper remapper) {
  79         this(Opcodes.ASM6, mv, remapper);
  80     }
  81 
  82     protected MethodRemapper(final int api, final MethodVisitor mv,
  83             final Remapper remapper) {
  84         super(api, mv);
  85         this.remapper = remapper;
  86     }
  87 
  88     @Override
  89     public AnnotationVisitor visitAnnotationDefault() {
  90         AnnotationVisitor av = super.visitAnnotationDefault();
  91         return av == null ? av : new AnnotationRemapper(av, remapper);
  92     }
  93 
  94     @Override
  95     public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
  96         AnnotationVisitor av = super.visitAnnotation(remapper.mapDesc(desc),
  97                 visible);
  98         return av == null ? av : new AnnotationRemapper(av, remapper);
  99     }


 105                 remapper.mapDesc(desc), visible);
 106         return av == null ? av : new AnnotationRemapper(av, remapper);
 107     }
 108 
 109     @Override
 110     public AnnotationVisitor visitParameterAnnotation(int parameter,
 111             String desc, boolean visible) {
 112         AnnotationVisitor av = super.visitParameterAnnotation(parameter,
 113                 remapper.mapDesc(desc), visible);
 114         return av == null ? av : new AnnotationRemapper(av, remapper);
 115     }
 116 
 117     @Override
 118     public void visitFrame(int type, int nLocal, Object[] local, int nStack,
 119             Object[] stack) {
 120         super.visitFrame(type, nLocal, remapEntries(nLocal, local), nStack,
 121                 remapEntries(nStack, stack));
 122     }
 123 
 124     private Object[] remapEntries(int n, Object[] entries) {
 125         if (entries != null) {
 126             for (int i = 0; i < n; i++) {
 127                 if (entries[i] instanceof String) {
 128                     Object[] newEntries = new Object[n];
 129                     if (i > 0) {
 130                         System.arraycopy(entries, 0, newEntries, 0, i);
 131                     }
 132                     do {
 133                         Object t = entries[i];
 134                         newEntries[i++] = t instanceof String ? remapper
 135                                 .mapType((String) t) : t;
 136                     } while (i < n);
 137                     return newEntries;
 138                 }
 139             }
 140         }
 141         return entries;
 142     }
 143 
 144     @Override
 145     public void visitFieldInsn(int opcode, String owner, String name,
 146             String desc) {
 147         super.visitFieldInsn(opcode, remapper.mapType(owner),
 148                 remapper.mapFieldName(owner, name, desc),
 149                 remapper.mapDesc(desc));
 150     }
 151 
 152     @Deprecated
 153     @Override
 154     public void visitMethodInsn(final int opcode, final String owner,
 155             final String name, final String desc) {
 156         if (api >= Opcodes.ASM5) {
 157             super.visitMethodInsn(opcode, owner, name, desc);
 158             return;
 159         }
 160         doVisitMethodInsn(opcode, owner, name, desc,


< prev index next >