|
@@ -29,6 +29,8 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
|
|
|
|
|
classWriter.visitInnerClass("net/ranides/assira/reflection/adapter/example/InnerDefs$RecordStats", "net/ranides/assira/reflection/adapter/example/InnerDefs", "RecordStats", ACC_PUBLIC | ACC_STATIC);
|
|
classWriter.visitInnerClass("net/ranides/assira/reflection/adapter/example/InnerDefs$RecordStats", "net/ranides/assira/reflection/adapter/example/InnerDefs", "RecordStats", ACC_PUBLIC | ACC_STATIC);
|
|
|
|
|
|
|
|
|
|
+ classWriter.visitInnerClass("net/ranides/assira/reflection/adapter/example/InnerDefs$Record", "net/ranides/assira/reflection/adapter/example/InnerDefs", "Record", ACC_PUBLIC | ACC_STATIC);
|
|
|
|
|
+
|
|
|
classWriter.visitInnerClass("net/ranides/assira/reflection/adapter/example/InnerDefs$IRecord3", "net/ranides/assira/reflection/adapter/example/InnerDefs", "IRecord3", ACC_PUBLIC | ACC_STATIC | ACC_ABSTRACT | ACC_INTERFACE);
|
|
classWriter.visitInnerClass("net/ranides/assira/reflection/adapter/example/InnerDefs$IRecord3", "net/ranides/assira/reflection/adapter/example/InnerDefs", "IRecord3", ACC_PUBLIC | ACC_STATIC | ACC_ABSTRACT | ACC_INTERFACE);
|
|
|
|
|
|
|
|
classWriter.visitInnerClass("java/lang/invoke/MethodHandles$Lookup", "java/lang/invoke/MethodHandles", "Lookup", ACC_PUBLIC | ACC_FINAL | ACC_STATIC);
|
|
classWriter.visitInnerClass("java/lang/invoke/MethodHandles$Lookup", "java/lang/invoke/MethodHandles", "Lookup", ACC_PUBLIC | ACC_FINAL | ACC_STATIC);
|
|
@@ -37,23 +39,31 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
fieldVisitor = classWriter.visitField(ACC_PRIVATE | ACC_FINAL, "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;", null, null);
|
|
fieldVisitor = classWriter.visitField(ACC_PRIVATE | ACC_FINAL, "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;", null, null);
|
|
|
fieldVisitor.visitEnd();
|
|
fieldVisitor.visitEnd();
|
|
|
}
|
|
}
|
|
|
|
|
+ {
|
|
|
|
|
+ fieldVisitor = classWriter.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, "I_CLASS", "Lnet/ranides/assira/reflection/IClass;", "Lnet/ranides/assira/reflection/IClass<*>;", null);
|
|
|
|
|
+ fieldVisitor.visitEnd();
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ fieldVisitor = classWriter.visitField(ACC_PRIVATE | ACC_FINAL | ACC_STATIC, "ARGS1", "Lnet/ranides/assira/reflection/IMethod;", null, null);
|
|
|
|
|
+ fieldVisitor.visitEnd();
|
|
|
|
|
+ }
|
|
|
{
|
|
{
|
|
|
methodVisitor = classWriter.visitMethod(ACC_PUBLIC, "<init>", "(Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;)V", null, null);
|
|
methodVisitor = classWriter.visitMethod(ACC_PUBLIC, "<init>", "(Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;)V", null, null);
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(13, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(17, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
|
|
methodVisitor.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
|
|
|
Label label1 = new Label();
|
|
Label label1 = new Label();
|
|
|
methodVisitor.visitLabel(label1);
|
|
methodVisitor.visitLabel(label1);
|
|
|
- methodVisitor.visitLineNumber(14, label1);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(18, label1);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 1);
|
|
methodVisitor.visitVarInsn(ALOAD, 1);
|
|
|
methodVisitor.visitFieldInsn(PUTFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(PUTFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
Label label2 = new Label();
|
|
Label label2 = new Label();
|
|
|
methodVisitor.visitLabel(label2);
|
|
methodVisitor.visitLabel(label2);
|
|
|
- methodVisitor.visitLineNumber(15, label2);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(19, label2);
|
|
|
methodVisitor.visitInsn(RETURN);
|
|
methodVisitor.visitInsn(RETURN);
|
|
|
Label label3 = new Label();
|
|
Label label3 = new Label();
|
|
|
methodVisitor.visitLabel(label3);
|
|
methodVisitor.visitLabel(label3);
|
|
@@ -67,7 +77,7 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(19, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(23, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "getX", "()I", false);
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "getX", "()I", false);
|
|
@@ -83,7 +93,7 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(24, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(28, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "getY", "()I", false);
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "getY", "()I", false);
|
|
@@ -99,7 +109,7 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(29, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(33, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "area", "()I", false);
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "area", "()I", false);
|
|
@@ -115,7 +125,7 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(34, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(38, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
methodVisitor.visitVarInsn(ILOAD, 1);
|
|
methodVisitor.visitVarInsn(ILOAD, 1);
|
|
@@ -133,7 +143,7 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(39, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(43, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "stats", "()Lnet/ranides/assira/reflection/adapter/example/InnerDefs$RecordStats;", false);
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "stats", "()Lnet/ranides/assira/reflection/adapter/example/InnerDefs$RecordStats;", false);
|
|
@@ -149,7 +159,7 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(44, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(48, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
methodVisitor.visitVarInsn(ALOAD, 1);
|
|
methodVisitor.visitVarInsn(ALOAD, 1);
|
|
@@ -171,7 +181,7 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(48, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(52, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
methodVisitor.visitVarInsn(ALOAD, 1);
|
|
methodVisitor.visitVarInsn(ALOAD, 1);
|
|
@@ -191,12 +201,123 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitMaxs(4, 4);
|
|
methodVisitor.visitMaxs(4, 4);
|
|
|
methodVisitor.visitEnd();
|
|
methodVisitor.visitEnd();
|
|
|
}
|
|
}
|
|
|
|
|
+ {
|
|
|
|
|
+ methodVisitor = classWriter.visitMethod(ACC_PUBLIC, "args1map", "(Ljava/lang/Object;IC)Ljava/lang/String;", null, null);
|
|
|
|
|
+ methodVisitor.visitCode();
|
|
|
|
|
+ Label label0 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label0);
|
|
|
|
|
+ methodVisitor.visitLineNumber(56, label0);
|
|
|
|
|
+ methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
|
|
+ methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
|
|
+ methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
|
|
+ methodVisitor.visitVarInsn(ALOAD, 1);
|
|
|
|
|
+ methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/example/IRecord4Proxy", "change1", "(Ljava/lang/Object;)[I", false);
|
|
|
|
|
+ methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
|
|
+ methodVisitor.visitVarInsn(ILOAD, 2);
|
|
|
|
|
+ methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/example/IRecord4Proxy", "change2", "(I)[Ljava/lang/Float;", false);
|
|
|
|
|
+ methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
|
|
+ methodVisitor.visitVarInsn(ILOAD, 3);
|
|
|
|
|
+ methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/example/IRecord4Proxy", "change3", "(C)Ljava/lang/Number;", false);
|
|
|
|
|
+ methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "args1", "([I[Ljava/lang/Float;Ljava/lang/Number;)Ljava/lang/String;", false);
|
|
|
|
|
+ methodVisitor.visitInsn(ARETURN);
|
|
|
|
|
+ Label label1 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label1);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("this", "Lnet/ranides/assira/example/IRecord4Proxy;", null, label0, label1, 0);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("a", "Ljava/lang/Object;", null, label0, label1, 1);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("b", "I", null, label0, label1, 2);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("c", "C", null, label0, label1, 3);
|
|
|
|
|
+ methodVisitor.visitMaxs(5, 4);
|
|
|
|
|
+ methodVisitor.visitEnd();
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ methodVisitor = classWriter.visitMethod(ACC_PRIVATE, "change1", "(Ljava/lang/Object;)[I", null, null);
|
|
|
|
|
+ methodVisitor.visitCode();
|
|
|
|
|
+ Label label0 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label0);
|
|
|
|
|
+ methodVisitor.visitLineNumber(60, label0);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_0);
|
|
|
|
|
+ methodVisitor.visitIntInsn(NEWARRAY, T_INT);
|
|
|
|
|
+ methodVisitor.visitInsn(ARETURN);
|
|
|
|
|
+ Label label1 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label1);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("this", "Lnet/ranides/assira/example/IRecord4Proxy;", null, label0, label1, 0);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("a", "Ljava/lang/Object;", null, label0, label1, 1);
|
|
|
|
|
+ methodVisitor.visitMaxs(1, 2);
|
|
|
|
|
+ methodVisitor.visitEnd();
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ methodVisitor = classWriter.visitMethod(ACC_PRIVATE, "change2", "(I)[Ljava/lang/Float;", null, null);
|
|
|
|
|
+ methodVisitor.visitCode();
|
|
|
|
|
+ Label label0 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label0);
|
|
|
|
|
+ methodVisitor.visitLineNumber(64, label0);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_0);
|
|
|
|
|
+ methodVisitor.visitTypeInsn(ANEWARRAY, "java/lang/Float");
|
|
|
|
|
+ methodVisitor.visitInsn(ARETURN);
|
|
|
|
|
+ Label label1 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label1);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("this", "Lnet/ranides/assira/example/IRecord4Proxy;", null, label0, label1, 0);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("b", "I", null, label0, label1, 1);
|
|
|
|
|
+ methodVisitor.visitMaxs(1, 2);
|
|
|
|
|
+ methodVisitor.visitEnd();
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ methodVisitor = classWriter.visitMethod(ACC_PRIVATE, "change3", "(C)Ljava/lang/Number;", null, null);
|
|
|
|
|
+ methodVisitor.visitCode();
|
|
|
|
|
+ Label label0 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label0);
|
|
|
|
|
+ methodVisitor.visitLineNumber(68, label0);
|
|
|
|
|
+ methodVisitor.visitIntInsn(BIPUSH, 33);
|
|
|
|
|
+ methodVisitor.visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false);
|
|
|
|
|
+ methodVisitor.visitInsn(ARETURN);
|
|
|
|
|
+ Label label1 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label1);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("this", "Lnet/ranides/assira/example/IRecord4Proxy;", null, label0, label1, 0);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("c", "C", null, label0, label1, 1);
|
|
|
|
|
+ methodVisitor.visitMaxs(1, 2);
|
|
|
|
|
+ methodVisitor.visitEnd();
|
|
|
|
|
+ }
|
|
|
|
|
+ {
|
|
|
|
|
+ methodVisitor = classWriter.visitMethod(ACC_PUBLIC, "args1reflect", "([I[Ljava/lang/Float;Ljava/lang/Number;)Ljava/lang/String;", null, null);
|
|
|
|
|
+ methodVisitor.visitCode();
|
|
|
|
|
+ Label label0 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label0);
|
|
|
|
|
+ methodVisitor.visitLineNumber(76, label0);
|
|
|
|
|
+ methodVisitor.visitFieldInsn(GETSTATIC, "net/ranides/assira/example/IRecord4Proxy", "ARGS1", "Lnet/ranides/assira/reflection/IMethod;");
|
|
|
|
|
+ methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
|
|
+ methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_3);
|
|
|
|
|
+ methodVisitor.visitTypeInsn(ANEWARRAY, "java/lang/Object");
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_0);
|
|
|
|
|
+ methodVisitor.visitVarInsn(ALOAD, 1);
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_1);
|
|
|
|
|
+ methodVisitor.visitVarInsn(ALOAD, 2);
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_2);
|
|
|
|
|
+ methodVisitor.visitVarInsn(ALOAD, 3);
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitMethodInsn(INVOKEINTERFACE, "net/ranides/assira/reflection/IMethod", "$invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", true);
|
|
|
|
|
+ methodVisitor.visitTypeInsn(CHECKCAST, "java/lang/String");
|
|
|
|
|
+ methodVisitor.visitInsn(ARETURN);
|
|
|
|
|
+ Label label1 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label1);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("this", "Lnet/ranides/assira/example/IRecord4Proxy;", null, label0, label1, 0);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("a", "[I", null, label0, label1, 1);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("b", "[Ljava/lang/Float;", null, label0, label1, 2);
|
|
|
|
|
+ methodVisitor.visitLocalVariable("c", "Ljava/lang/Number;", null, label0, label1, 3);
|
|
|
|
|
+ methodVisitor.visitMaxs(6, 4);
|
|
|
|
|
+ methodVisitor.visitEnd();
|
|
|
|
|
+ }
|
|
|
{
|
|
{
|
|
|
methodVisitor = classWriter.visitMethod(ACC_PUBLIC, "complex", "(Ljava/util/List;Ljava/util/Map;)Ljava/lang/String;", "(Ljava/util/List<Ljava/lang/String;>;Ljava/util/Map<Ljava/lang/String;Ljava/lang/Number;>;)Ljava/lang/String;", new String[] { "java/lang/NumberFormatException", "java/lang/IllegalStateException" });
|
|
methodVisitor = classWriter.visitMethod(ACC_PUBLIC, "complex", "(Ljava/util/List;Ljava/util/Map;)Ljava/lang/String;", "(Ljava/util/List<Ljava/lang/String;>;Ljava/util/Map<Ljava/lang/String;Ljava/lang/Number;>;)Ljava/lang/String;", new String[] { "java/lang/NumberFormatException", "java/lang/IllegalStateException" });
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(53, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(81, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
methodVisitor.visitVarInsn(ALOAD, 1);
|
|
methodVisitor.visitVarInsn(ALOAD, 1);
|
|
@@ -216,7 +337,7 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitCode();
|
|
methodVisitor.visitCode();
|
|
|
Label label0 = new Label();
|
|
Label label0 = new Label();
|
|
|
methodVisitor.visitLabel(label0);
|
|
methodVisitor.visitLabel(label0);
|
|
|
- methodVisitor.visitLineNumber(58, label0);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(86, label0);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/example/IRecord4Proxy", "getY", "()I", false);
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/example/IRecord4Proxy", "getY", "()I", false);
|
|
|
methodVisitor.visitInsn(I2D);
|
|
methodVisitor.visitInsn(I2D);
|
|
@@ -225,7 +346,7 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitVarInsn(DSTORE, 1);
|
|
methodVisitor.visitVarInsn(DSTORE, 1);
|
|
|
Label label1 = new Label();
|
|
Label label1 = new Label();
|
|
|
methodVisitor.visitLabel(label1);
|
|
methodVisitor.visitLabel(label1);
|
|
|
- methodVisitor.visitLineNumber(59, label1);
|
|
|
|
|
|
|
+ methodVisitor.visitLineNumber(87, label1);
|
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
methodVisitor.visitVarInsn(ALOAD, 0);
|
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
methodVisitor.visitFieldInsn(GETFIELD, "net/ranides/assira/example/IRecord4Proxy", "that", "Lnet/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord;");
|
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "toString", "()Ljava/lang/String;", false);
|
|
methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "net/ranides/assira/reflection/adapter/example/InnerDefs$MutableRecord", "toString", "()Ljava/lang/String;", false);
|
|
@@ -241,6 +362,72 @@ public class IRecord4ProxyDump implements Opcodes {
|
|
|
methodVisitor.visitMaxs(4, 3);
|
|
methodVisitor.visitMaxs(4, 3);
|
|
|
methodVisitor.visitEnd();
|
|
methodVisitor.visitEnd();
|
|
|
}
|
|
}
|
|
|
|
|
+ {
|
|
|
|
|
+ methodVisitor = classWriter.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
|
|
|
|
|
+ methodVisitor.visitCode();
|
|
|
|
|
+ Label label0 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label0);
|
|
|
|
|
+ methodVisitor.visitLineNumber(71, label0);
|
|
|
|
|
+ methodVisitor.visitLdcInsn(Type.getType("Lnet/ranides/assira/reflection/adapter/example/InnerDefs$Record;"));
|
|
|
|
|
+ methodVisitor.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/reflection/IClass", "typeinfo", "(Ljava/lang/Class;)Lnet/ranides/assira/reflection/IClass;", true);
|
|
|
|
|
+ methodVisitor.visitFieldInsn(PUTSTATIC, "net/ranides/assira/example/IRecord4Proxy", "I_CLASS", "Lnet/ranides/assira/reflection/IClass;");
|
|
|
|
|
+ Label label1 = new Label();
|
|
|
|
|
+ methodVisitor.visitLabel(label1);
|
|
|
|
|
+ methodVisitor.visitLineNumber(73, label1);
|
|
|
|
|
+ methodVisitor.visitFieldInsn(GETSTATIC, "net/ranides/assira/example/IRecord4Proxy", "I_CLASS", "Lnet/ranides/assira/reflection/IClass;");
|
|
|
|
|
+ methodVisitor.visitLdcInsn("args1");
|
|
|
|
|
+ methodVisitor.visitIntInsn(BIPUSH, 11);
|
|
|
|
|
+ methodVisitor.visitTypeInsn(ANEWARRAY, "java/lang/String");
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_0);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("[I");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_1);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("[Ljava\\lang\\Float;");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_2);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("Ljava\\lang\\Number;");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_3);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("a");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_4);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("b");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitInsn(ICONST_5);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("c");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitIntInsn(BIPUSH, 6);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("d");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitIntInsn(BIPUSH, 7);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("e");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitIntInsn(BIPUSH, 8);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("f");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitIntInsn(BIPUSH, 9);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("g");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitInsn(DUP);
|
|
|
|
|
+ methodVisitor.visitIntInsn(BIPUSH, 10);
|
|
|
|
|
+ methodVisitor.visitLdcInsn("h");
|
|
|
|
|
+ methodVisitor.visitInsn(AASTORE);
|
|
|
|
|
+ methodVisitor.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/example/ExampleSupport", "link", "(Lnet/ranides/assira/reflection/IClass;Ljava/lang/String;[Ljava/lang/String;)Lnet/ranides/assira/reflection/IMethod;", false);
|
|
|
|
|
+ methodVisitor.visitFieldInsn(PUTSTATIC, "net/ranides/assira/example/IRecord4Proxy", "ARGS1", "Lnet/ranides/assira/reflection/IMethod;");
|
|
|
|
|
+ methodVisitor.visitInsn(RETURN);
|
|
|
|
|
+ methodVisitor.visitMaxs(6, 0);
|
|
|
|
|
+ methodVisitor.visitEnd();
|
|
|
|
|
+ }
|
|
|
classWriter.visitEnd();
|
|
classWriter.visitEnd();
|
|
|
|
|
|
|
|
return classWriter.toByteArray();
|
|
return classWriter.toByteArray();
|