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

Print this page




  47  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  48  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  49  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  50  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  51  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  52  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  53  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  54  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  55  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  56  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  57  * THE POSSIBILITY OF SUCH DAMAGE.
  58  */
  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.ClassVisitor;
  64 import jdk.internal.org.objectweb.asm.FieldVisitor;
  65 import jdk.internal.org.objectweb.asm.MethodVisitor;
  66 import jdk.internal.org.objectweb.asm.Opcodes;

  67 
  68 /**
  69  * A {@link ClassVisitor} for type remapping.
  70  *
  71  * @author Eugene Kuleshov
  72  */
  73 public class RemappingClassAdapter extends ClassVisitor {
  74 
  75     protected final Remapper remapper;
  76 
  77     protected String className;
  78 
  79     public RemappingClassAdapter(final ClassVisitor cv, final Remapper remapper)
  80     {
  81         this(Opcodes.ASM4, cv, remapper);
  82     }
  83 
  84     protected RemappingClassAdapter(
  85         final int api,
  86         final ClassVisitor cv,
  87         final Remapper remapper)
  88     {
  89         super(api, cv);
  90         this.remapper = remapper;
  91     }
  92 
  93     @Override
  94     public void visit(
  95         int version,
  96         int access,
  97         String name,
  98         String signature,
  99         String superName,
 100         String[] interfaces)
 101     {
 102         this.className = name;
 103         super.visit(version,
 104                 access,
 105                 remapper.mapType(name),
 106                 remapper.mapSignature(signature, false),
 107                 remapper.mapType(superName),
 108                 interfaces == null ? null
 109                         : remapper.mapTypes(interfaces));
 110     }
 111 
 112     @Override
 113     public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
 114         AnnotationVisitor av;
 115         av = super.visitAnnotation(remapper.mapDesc(desc), visible);
 116         return av == null ? null : createRemappingAnnotationAdapter(av);
 117     }
 118 
 119     @Override
 120     public FieldVisitor visitField(
 121         int access,
 122         String name,
 123         String desc,
 124         String signature,
 125         Object value)
 126     {



 127         FieldVisitor fv = super.visitField(access,
 128                 remapper.mapFieldName(className, name, desc),
 129                 remapper.mapDesc(desc),
 130                 remapper.mapSignature(signature, true),
 131                 remapper.mapValue(value));
 132         return fv == null ? null : createRemappingFieldAdapter(fv);
 133     }
 134 
 135     @Override
 136     public MethodVisitor visitMethod(
 137         int access,
 138         String name,
 139         String desc,
 140         String signature,
 141         String[] exceptions)
 142     {
 143         String newDesc = remapper.mapMethodDesc(desc);
 144         MethodVisitor mv = super.visitMethod(access,
 145                 remapper.mapMethodName(className, name, desc),
 146                 newDesc,
 147                 remapper.mapSignature(signature, false),
 148                 exceptions == null ? null : remapper.mapTypes(exceptions));
 149         return mv == null ? null : createRemappingMethodAdapter(access, newDesc, mv);

 150     }
 151 
 152     @Override
 153     public void visitInnerClass(
 154         String name,
 155         String outerName,
 156         String innerName,
 157         int access)
 158     {
 159         super.visitInnerClass(remapper.mapType(name),
 160                 outerName == null ? null : remapper.mapType(outerName),
 161                 innerName, // TODO should it be changed?
 162                 access);
 163     }
 164 
 165     @Override
 166     public void visitOuterClass(String owner, String name, String desc) {
 167         super.visitOuterClass(remapper.mapType(owner),
 168                 name == null ? null : remapper.mapMethodName(owner, name, desc),
 169                 desc == null ? null : remapper.mapMethodDesc(desc));
 170     }
 171 
 172     protected FieldVisitor createRemappingFieldAdapter(FieldVisitor fv) {
 173         return new RemappingFieldAdapter(fv, remapper);
 174     }
 175 
 176     protected MethodVisitor createRemappingMethodAdapter(
 177         int access,
 178         String newDesc,
 179         MethodVisitor mv)
 180     {
 181         return new RemappingMethodAdapter(access, newDesc, mv, remapper);
 182     }
 183 
 184     protected AnnotationVisitor createRemappingAnnotationAdapter(
 185         AnnotationVisitor av)
 186     {
 187         return new RemappingAnnotationAdapter(av, remapper);
 188     }
 189 }


  47  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  48  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  49  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  50  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  51  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  52  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  53  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  54  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  55  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  56  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  57  * THE POSSIBILITY OF SUCH DAMAGE.
  58  */
  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.ClassVisitor;
  64 import jdk.internal.org.objectweb.asm.FieldVisitor;
  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 ClassVisitor} for type remapping.
  71  *
  72  * @author Eugene Kuleshov
  73  */
  74 public class RemappingClassAdapter extends ClassVisitor {
  75 
  76     protected final Remapper remapper;
  77 
  78     protected String className;
  79 
  80     public RemappingClassAdapter(final ClassVisitor cv, final Remapper remapper) {
  81         this(Opcodes.ASM5, cv, remapper);

  82     }
  83 
  84     protected RemappingClassAdapter(final int api, final ClassVisitor cv,
  85             final Remapper remapper) {



  86         super(api, cv);
  87         this.remapper = remapper;
  88     }
  89 
  90     @Override
  91     public void visit(int version, int access, String name, String signature,
  92             String superName, String[] interfaces) {






  93         this.className = name;
  94         super.visit(version, access, remapper.mapType(name), remapper
  95                 .mapSignature(signature, false), remapper.mapType(superName),
  96                 interfaces == null ? null : remapper.mapTypes(interfaces));




  97     }
  98 
  99     @Override
 100     public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
 101         AnnotationVisitor av = super.visitAnnotation(remapper.mapDesc(desc),
 102                 visible);
 103         return av == null ? null : createRemappingAnnotationAdapter(av);
 104     }
 105 
 106     @Override
 107     public AnnotationVisitor visitTypeAnnotation(int typeRef,
 108             TypePath typePath, String desc, boolean visible) {
 109         AnnotationVisitor av = super.visitTypeAnnotation(typeRef, typePath,
 110                 remapper.mapDesc(desc), visible);
 111         return av == null ? null : createRemappingAnnotationAdapter(av);
 112     }
 113 
 114     @Override
 115     public FieldVisitor visitField(int access, String name, String desc,
 116             String signature, Object value) {
 117         FieldVisitor fv = super.visitField(access,
 118                 remapper.mapFieldName(className, name, desc),
 119                 remapper.mapDesc(desc), remapper.mapSignature(signature, true),

 120                 remapper.mapValue(value));
 121         return fv == null ? null : createRemappingFieldAdapter(fv);
 122     }
 123 
 124     @Override
 125     public MethodVisitor visitMethod(int access, String name, String desc,
 126             String signature, String[] exceptions) {





 127         String newDesc = remapper.mapMethodDesc(desc);
 128         MethodVisitor mv = super.visitMethod(access, remapper.mapMethodName(
 129                 className, name, desc), newDesc, remapper.mapSignature(
 130                 signature, false),

 131                 exceptions == null ? null : remapper.mapTypes(exceptions));
 132         return mv == null ? null : createRemappingMethodAdapter(access,
 133                 newDesc, mv);
 134     }
 135 
 136     @Override
 137     public void visitInnerClass(String name, String outerName,
 138             String innerName, int access) {
 139         // TODO should innerName be changed?
 140         super.visitInnerClass(remapper.mapType(name), outerName == null ? null
 141                 : remapper.mapType(outerName), innerName, access);





 142     }
 143 
 144     @Override
 145     public void visitOuterClass(String owner, String name, String desc) {
 146         super.visitOuterClass(remapper.mapType(owner), name == null ? null
 147                 : remapper.mapMethodName(owner, name, desc),
 148                 desc == null ? null : remapper.mapMethodDesc(desc));
 149     }
 150 
 151     protected FieldVisitor createRemappingFieldAdapter(FieldVisitor fv) {
 152         return new RemappingFieldAdapter(fv, remapper);
 153     }
 154 
 155     protected MethodVisitor createRemappingMethodAdapter(int access,
 156             String newDesc, MethodVisitor mv) {



 157         return new RemappingMethodAdapter(access, newDesc, mv, remapper);
 158     }
 159 
 160     protected AnnotationVisitor createRemappingAnnotationAdapter(
 161             AnnotationVisitor av) {

 162         return new RemappingAnnotationAdapter(av, remapper);
 163     }
 164 }