diff --git a/src/org/objectweb/asm/commons/AnnotationRemapper.java b/src/org/objectweb/asm/commons/AnnotationRemapper.java index 4398f7fa7ecab907d2486055d5d16508a6b47122..2bc8b0f35a5ab23ead3e0a909ff20a1b582cf340 100644 --- a/src/org/objectweb/asm/commons/AnnotationRemapper.java +++ b/src/org/objectweb/asm/commons/AnnotationRemapper.java @@ -62,12 +62,12 @@ public class AnnotationRemapper extends AnnotationVisitor { @Override public AnnotationVisitor visitAnnotation(String name, String desc) { AnnotationVisitor v = av.visitAnnotation(name, remapper.mapDesc(desc)); - return v == null ? null : (v == av ? this : new AnnotationRemapper(v, remapper)); + return v == null ? null : (v == av ? this : new AnnotationRemapper(api, v, remapper)); } @Override public AnnotationVisitor visitArray(String name) { AnnotationVisitor v = av.visitArray(name); - return v == null ? null : (v == av ? this : new AnnotationRemapper(v, remapper)); + return v == null ? null : (v == av ? this : new AnnotationRemapper(api, v, remapper)); } } diff --git a/src/org/objectweb/asm/commons/ClassRemapper.java b/src/org/objectweb/asm/commons/ClassRemapper.java index acb6514dce37da23941845cc2d9203ded9351315..b2d807992976c8ae436d97b4608460c0d1cc5e92 100644 --- a/src/org/objectweb/asm/commons/ClassRemapper.java +++ b/src/org/objectweb/asm/commons/ClassRemapper.java @@ -155,18 +155,18 @@ public class ClassRemapper extends ClassVisitor { } protected FieldVisitor createFieldRemapper(FieldVisitor fv) { - return new FieldRemapper(fv, remapper); + return new FieldRemapper(api, fv, remapper); } protected MethodVisitor createMethodRemapper(MethodVisitor mv) { - return new MethodRemapper(mv, remapper); + return new MethodRemapper(api, mv, remapper); } protected AnnotationVisitor createAnnotationRemapper(AnnotationVisitor av) { - return new AnnotationRemapper(av, remapper); + return new AnnotationRemapper(api, av, remapper); } protected ModuleVisitor createModuleRemapper(ModuleVisitor mv) { - return new ModuleRemapper(mv, remapper); + return new ModuleRemapper(api, mv, remapper); } } diff --git a/src/org/objectweb/asm/commons/FieldRemapper.java b/src/org/objectweb/asm/commons/FieldRemapper.java index f67dc927e816c9b134e72a4bbedf37c936cf959a..17e34b203cf3a60263fb6d54a6e4eb8d1164d0a7 100644 --- a/src/org/objectweb/asm/commons/FieldRemapper.java +++ b/src/org/objectweb/asm/commons/FieldRemapper.java @@ -54,7 +54,7 @@ public class FieldRemapper extends FieldVisitor { @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { AnnotationVisitor av = fv.visitAnnotation(remapper.mapDesc(desc), visible); - return av == null ? null : new AnnotationRemapper(av, remapper); + return av == null ? null : new AnnotationRemapper(api, av, remapper); } @Override @@ -62,6 +62,6 @@ public class FieldRemapper extends FieldVisitor { int typeRef, TypePath typePath, String desc, boolean visible) { AnnotationVisitor av = super.visitTypeAnnotation(typeRef, typePath, remapper.mapDesc(desc), visible); - return av == null ? null : new AnnotationRemapper(av, remapper); + return av == null ? null : new AnnotationRemapper(api, av, remapper); } } diff --git a/src/org/objectweb/asm/commons/MethodRemapper.java b/src/org/objectweb/asm/commons/MethodRemapper.java index b13c2b86b47343a5e43989d8ec3b092296156f52..9c2badd6b652cf71f30d6e4bdd5536236e2331fb 100644 --- a/src/org/objectweb/asm/commons/MethodRemapper.java +++ b/src/org/objectweb/asm/commons/MethodRemapper.java @@ -56,13 +56,13 @@ public class MethodRemapper extends MethodVisitor { @Override public AnnotationVisitor visitAnnotationDefault() { AnnotationVisitor av = super.visitAnnotationDefault(); - return av == null ? av : new AnnotationRemapper(av, remapper); + return av == null ? av : new AnnotationRemapper(api, av, remapper); } @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { AnnotationVisitor av = super.visitAnnotation(remapper.mapDesc(desc), visible); - return av == null ? av : new AnnotationRemapper(av, remapper); + return av == null ? av : new AnnotationRemapper(api, av, remapper); } @Override @@ -70,14 +70,14 @@ public class MethodRemapper extends MethodVisitor { int typeRef, TypePath typePath, String desc, boolean visible) { AnnotationVisitor av = super.visitTypeAnnotation(typeRef, typePath, remapper.mapDesc(desc), visible); - return av == null ? av : new AnnotationRemapper(av, remapper); + return av == null ? av : new AnnotationRemapper(api, av, remapper); } @Override public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) { AnnotationVisitor av = super.visitParameterAnnotation(parameter, remapper.mapDesc(desc), visible); - return av == null ? av : new AnnotationRemapper(av, remapper); + return av == null ? av : new AnnotationRemapper(api, av, remapper); } @Override @@ -188,7 +188,7 @@ public class MethodRemapper extends MethodVisitor { int typeRef, TypePath typePath, String desc, boolean visible) { AnnotationVisitor av = super.visitInsnAnnotation(typeRef, typePath, remapper.mapDesc(desc), visible); - return av == null ? av : new AnnotationRemapper(av, remapper); + return av == null ? av : new AnnotationRemapper(api, av, remapper); } @Override @@ -201,7 +201,7 @@ public class MethodRemapper extends MethodVisitor { int typeRef, TypePath typePath, String desc, boolean visible) { AnnotationVisitor av = super.visitTryCatchAnnotation(typeRef, typePath, remapper.mapDesc(desc), visible); - return av == null ? av : new AnnotationRemapper(av, remapper); + return av == null ? av : new AnnotationRemapper(api, av, remapper); } @Override @@ -223,6 +223,6 @@ public class MethodRemapper extends MethodVisitor { AnnotationVisitor av = super.visitLocalVariableAnnotation( typeRef, typePath, start, end, index, remapper.mapDesc(desc), visible); - return av == null ? av : new AnnotationRemapper(av, remapper); + return av == null ? av : new AnnotationRemapper(api, av, remapper); } } diff --git a/test/build.xml b/test/build.xml index 139cc10250a3e5f8697ef20b7792ebc2d3f1eb14..58b6b38227ebbe357f1b08beb7d0cc3de7d61e38 100644 --- a/test/build.xml +++ b/test/build.xml @@ -152,7 +152,6 @@ - diff --git a/test/conform/classremapper.xml b/test/conform/classremapper.xml deleted file mode 100644 index a1089916f79b1750f00dc652701d8af240e7a048..0000000000000000000000000000000000000000 --- a/test/conform/classremapper.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/test/conform/org/objectweb/asm/commons/ClassRemapperTest.java b/test/conform/org/objectweb/asm/commons/ClassRemapperTest.java index 6bda3e9bcd524a9da6904e7e7c3649d9d8813bda..2719c6d8138dde449875d357be678482a05746a6 100644 --- a/test/conform/org/objectweb/asm/commons/ClassRemapperTest.java +++ b/test/conform/org/objectweb/asm/commons/ClassRemapperTest.java @@ -25,35 +25,66 @@ // 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 java.util.HashMap; -import java.util.Map; +import static org.junit.Assert.assertTrue; -import junit.framework.TestSuite; +import java.util.Collection; -import org.objectweb.asm.AbstractTest; +import org.junit.Test; +import org.junit.runners.Parameterized.Parameters; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.test.AsmTest; -public class ClassRemapperTest extends AbstractTest { +public class ClassRemapperTest extends AsmTest { - public static TestSuite suite() throws Exception { - return new ClassRemapperTest().getSuite(); + /** @return test parameters to test all the precompiled classes with all the apis. */ + @Parameters(name = NAME) + public static Collection data() { + return data(Api.ASM4, Api.ASM5, Api.ASM6); } - @Override - public void test() throws Exception { - ClassWriter cw = new ClassWriter(0); - ClassReader cr = new ClassReader(is); - Map map = - new HashMap() { + /** Tests that classes transformed with a ClassRemapper can be loaded and instantiated. */ + @Test + public void testRemapLoadAndInstantiate() { + ClassReader classReader = new ClassReader(classParameter.getBytes()); + ClassWriter classWriter = new ClassWriter(0); + Remapper upperCaseRemapper = + new Remapper() { + + @Override + public String mapMethodName(String owner, String name, String desc) { + if (name.equals("") || name.equals("")) { + return name; + } + return owner.equals(classParameter.getInternalName()) ? name.toUpperCase() : name; + } + + @Override + public String mapInvokeDynamicMethodName(String name, String desc) { + return name.toUpperCase(); + } + + @Override + public String mapFieldName(String owner, String name, String desc) { + return owner.equals(classParameter.getInternalName()) ? name.toUpperCase() : name; + } + @Override - public String get(Object key) { - return "Foo"; + public String map(String typeName) { + return typeName.equals(classParameter.getInternalName()) + ? typeName.toUpperCase() + : typeName; } }; - cr.accept(new ClassRemapper(cw, new SimpleRemapper(map)), 0); + if (classParameter.isMoreRecentThan(apiParameter)) { + thrown.expect(RuntimeException.class); + } else if (classParameter.isMoreRecentThanCurrentJdk()) { + thrown.expect(UnsupportedClassVersionError.class); + } + classReader.accept(new ClassRemapper(apiParameter.value(), classWriter, upperCaseRemapper), 0); + assertTrue( + loadAndInstantiate(classParameter.getName().toUpperCase(), classWriter.toByteArray())); } } diff --git a/test/conform/unit.xml b/test/conform/unit.xml index e9c2e4299c720161ce25972e0319fde1e757c85d..9272c606a0eeffcde9241f86fd40682c8ba26a91 100644 --- a/test/conform/unit.xml +++ b/test/conform/unit.xml @@ -46,6 +46,7 @@ +