From 794423af519bb410ca87414d5f75bfc4ab68ce31 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 23 Nov 2013 12:06:12 +1100 Subject: [PATCH] Just subclass remapper --- pom.xml | 2 +- .../md_5/specialsource/CustomRemapper.java | 52 ++++ .../net/md_5/specialsource/JarRemapper.java | 4 +- .../specialsource/RemappingClassAdapter.java | 8 +- .../UnsortedRemappingMethodAdapter.java | 7 +- .../org/objectweb/asm/commons/Remapper.java | 233 ------------------ 6 files changed, 62 insertions(+), 244 deletions(-) create mode 100644 src/main/java/net/md_5/specialsource/CustomRemapper.java delete mode 100644 src/main/java/org/objectweb/asm/commons/Remapper.java diff --git a/pom.xml b/pom.xml index 395098f..d7576fa 100644 --- a/pom.xml +++ b/pom.xml @@ -50,7 +50,7 @@ org.projectlombok lombok - 0.11.8 + 1.12.2 provided diff --git a/src/main/java/net/md_5/specialsource/CustomRemapper.java b/src/main/java/net/md_5/specialsource/CustomRemapper.java new file mode 100644 index 0000000..d189acc --- /dev/null +++ b/src/main/java/net/md_5/specialsource/CustomRemapper.java @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2012, md_5. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * The name of the author may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +package net.md_5.specialsource; + +import org.objectweb.asm.commons.Remapper; + +public abstract class CustomRemapper extends Remapper { + + @Override + public String mapMethodName(String owner, String name, String desc) { + return mapMethodName(owner, name, desc, 0); + } + + public String mapMethodName(String owner, String name, String desc, int access) { + return name; + } + + @Override + public String mapFieldName(String owner, String name, String desc) { + return mapFieldName(owner, name, desc, 0); + } + + public String mapFieldName(String owner, String name, String desc, int access) { + return name; + } +} diff --git a/src/main/java/net/md_5/specialsource/JarRemapper.java b/src/main/java/net/md_5/specialsource/JarRemapper.java index 94ed805..ab9b5c5 100644 --- a/src/main/java/net/md_5/specialsource/JarRemapper.java +++ b/src/main/java/net/md_5/specialsource/JarRemapper.java @@ -45,12 +45,12 @@ import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.commons.Remapper; +import net.md_5.specialsource.CustomRemapper; import org.objectweb.asm.tree.ClassNode; import static org.objectweb.asm.ClassWriter.*; -public class JarRemapper extends Remapper { +public class JarRemapper extends CustomRemapper { private static final int CLASS_LEN = ".class".length(); public final JarMapping jarMapping; diff --git a/src/main/java/net/md_5/specialsource/RemappingClassAdapter.java b/src/main/java/net/md_5/specialsource/RemappingClassAdapter.java index eb6105d..1e1f804 100644 --- a/src/main/java/net/md_5/specialsource/RemappingClassAdapter.java +++ b/src/main/java/net/md_5/specialsource/RemappingClassAdapter.java @@ -67,7 +67,7 @@ import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; -import org.objectweb.asm.commons.Remapper; +import net.md_5.specialsource.CustomRemapper; import org.objectweb.asm.commons.RemappingAnnotationAdapter; /** @@ -77,16 +77,16 @@ import org.objectweb.asm.commons.RemappingAnnotationAdapter; */ public class RemappingClassAdapter extends ClassVisitor { - protected final Remapper remapper; + protected final CustomRemapper remapper; protected ClassRepo repo; protected String className; - public RemappingClassAdapter(final ClassVisitor cv, final Remapper remapper, ClassRepo repo) { + public RemappingClassAdapter(final ClassVisitor cv, final CustomRemapper remapper, ClassRepo repo) { this(Opcodes.ASM4, cv, remapper); this.repo = repo; } - protected RemappingClassAdapter(final int api, final ClassVisitor cv, final Remapper remapper) { + protected RemappingClassAdapter(final int api, final ClassVisitor cv, final CustomRemapper remapper) { super(api, cv); this.remapper = remapper; } diff --git a/src/main/java/net/md_5/specialsource/UnsortedRemappingMethodAdapter.java b/src/main/java/net/md_5/specialsource/UnsortedRemappingMethodAdapter.java index e523898..af8fd33 100644 --- a/src/main/java/net/md_5/specialsource/UnsortedRemappingMethodAdapter.java +++ b/src/main/java/net/md_5/specialsource/UnsortedRemappingMethodAdapter.java @@ -35,7 +35,6 @@ import org.objectweb.asm.Handle; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; -import org.objectweb.asm.commons.Remapper; import org.objectweb.asm.commons.RemappingAnnotationAdapter; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.FieldNode; @@ -53,16 +52,16 @@ import org.objectweb.asm.tree.MethodNode; */ public class UnsortedRemappingMethodAdapter extends MethodVisitor { //Lex: Changed LocalVariablesSorter to MethodVisitor - protected final Remapper remapper; + protected final CustomRemapper remapper; private final ClassRepo classRepo; public UnsortedRemappingMethodAdapter(final int access, final String desc, - final MethodVisitor mv, final Remapper remapper, ClassRepo classRepo) { + final MethodVisitor mv, final CustomRemapper remapper, ClassRepo classRepo) { this(Opcodes.ASM4, access, desc, mv, remapper, classRepo); } protected UnsortedRemappingMethodAdapter(final int api, final int access, - final String desc, final MethodVisitor mv, final Remapper remapper, ClassRepo classRepo) { + final String desc, final MethodVisitor mv, final CustomRemapper remapper, ClassRepo classRepo) { super(api, mv); //Lex: Removed access, desc this.remapper = remapper; this.classRepo = classRepo; diff --git a/src/main/java/org/objectweb/asm/commons/Remapper.java b/src/main/java/org/objectweb/asm/commons/Remapper.java deleted file mode 100644 index b32f5f1..0000000 --- a/src/main/java/org/objectweb/asm/commons/Remapper.java +++ /dev/null @@ -1,233 +0,0 @@ -/** - * Copyright (c) 2012, md_5. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * The name of the author may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -package org.objectweb.asm.commons; - -import org.objectweb.asm.Handle; -import org.objectweb.asm.Type; -import org.objectweb.asm.signature.SignatureReader; -import org.objectweb.asm.signature.SignatureVisitor; -import org.objectweb.asm.signature.SignatureWriter; - -/** - * A class responsible for remapping types and names. Subclasses can override - * the following methods: - * - * - * - * @author Eugene Kuleshov - */ -public abstract class Remapper { - - public String mapDesc(String desc) { - Type t = Type.getType(desc); - switch (t.getSort()) { - case Type.ARRAY: - String s = mapDesc(t.getElementType().getDescriptor()); - for (int i = 0; i < t.getDimensions(); ++i) { - s = '[' + s; - } - return s; - case Type.OBJECT: - String newType = map(t.getInternalName()); - if (newType != null) { - return 'L' + newType + ';'; - } - } - return desc; - } - - private Type mapType(Type t) { - switch (t.getSort()) { - case Type.ARRAY: - String s = mapDesc(t.getElementType().getDescriptor()); - for (int i = 0; i < t.getDimensions(); ++i) { - s = '[' + s; - } - return Type.getType(s); - case Type.OBJECT: - s = map(t.getInternalName()); - return s != null ? Type.getObjectType(s) : t; - case Type.METHOD: - return Type.getMethodType(mapMethodDesc(t.getDescriptor())); - } - return t; - } - - public String mapType(String type) { - if (type == null) { - return null; - } - return mapType(Type.getObjectType(type)).getInternalName(); - } - - public String[] mapTypes(String[] types) { - String[] newTypes = null; - boolean needMapping = false; - for (int i = 0; i < types.length; i++) { - String type = types[i]; - String newType = map(type); - if (newType != null && newTypes == null) { - newTypes = new String[types.length]; - if (i > 0) { - System.arraycopy(types, 0, newTypes, 0, i); - } - needMapping = true; - } - if (needMapping) { - newTypes[i] = newType == null ? type : newType; - } - } - return needMapping ? newTypes : types; - } - - public String mapMethodDesc(String desc) { - if ("()V".equals(desc)) { - return desc; - } - - Type[] args = Type.getArgumentTypes(desc); - StringBuffer s = new StringBuffer("("); - for (int i = 0; i < args.length; i++) { - s.append(mapDesc(args[i].getDescriptor())); - } - Type returnType = Type.getReturnType(desc); - if (returnType == Type.VOID_TYPE) { - s.append(")V"); - return s.toString(); - } - s.append(')').append(mapDesc(returnType.getDescriptor())); - return s.toString(); - } - - public Object mapValue(Object value) { - if (value instanceof Type) { - return mapType((Type) value); - } - if (value instanceof Handle) { - Handle h = (Handle) value; - return new Handle(h.getTag(), mapType(h.getOwner()), mapMethodName( - h.getOwner(), h.getName(), h.getDesc()), - mapMethodDesc(h.getDesc())); - } - return value; - } - - /** - * - * @param typeSignature - * true if signature is a FieldTypeSignature, such as the - * signature parameter of the ClassVisitor.visitField or - * MethodVisitor.visitLocalVariable methods - */ - public String mapSignature(String signature, boolean typeSignature) { - if (signature == null) { - return null; - } - SignatureReader r = new SignatureReader(signature); - SignatureWriter w = new SignatureWriter(); - SignatureVisitor a = createRemappingSignatureAdapter(w); - if (typeSignature) { - r.acceptType(a); - } else { - r.accept(a); - } - return w.toString(); - } - - protected SignatureVisitor createRemappingSignatureAdapter( - SignatureVisitor v) { - return new RemappingSignatureAdapter(v, this); - } - - /** - * Map method name to the new name. Subclasses can override. - * - * @param owner - * owner of the method. - * @param name - * name of the method. - * @param desc - * descriptor of the method. - * @return new name of the method - */ - public String mapMethodName(String owner, String name, String desc) { - return mapMethodName(owner, name, desc, 0); // SS - } - - // SS Start - public String mapMethodName(String owner, String name, String desc, int access) { - return name; - } - // SS End - - /** - * Map invokedynamic method name to the new name. Subclasses can override. - * - * @param name - * name of the invokedynamic. - * @param desc - * descriptor of the invokedynamic. - * @return new invokdynamic name. - */ - public String mapInvokeDynamicMethodName(String name, String desc) { - return name; - } - - /** - * Map field name to the new name. Subclasses can override. - * - * @param owner - * owner of the field. - * @param name - * name of the field - * @param desc - * descriptor of the field - * @return new name of the field. - */ - public String mapFieldName(String owner, String name, String desc) { - return mapFieldName(owner, name, desc, 0); // SS - } - - // SS Start - public String mapFieldName(String owner, String name, String desc, int access) { - return name; - } - // SS End - - /** - * Map type name to the new name. Subclasses can override. - */ - public String map(String typeName) { - return typeName; - } -}