Skip to content

Instantly share code, notes, and snippets.

@donat
Created August 6, 2021 15:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save donat/6fccdc21aeca7f1267f0e7920c170065 to your computer and use it in GitHub Desktop.
Save donat/6fccdc21aeca7f1267f0e7920c170065 to your computer and use it in GitHub Desktop.
diff --git a/old b/newdynamic
index a51f973..fbd7ec4 100644
--- a/old
+++ b/newdynamic
@@ -1,6 +1,4 @@
-// old code
-
-methodVisitor = classWriter.visitMethod(ACC_PUBLIC | ACC_STATIC, "main", "()V", null, null);
+methodVisitor = classWriter.visitMethod(ACC_PUBLIC | ACC_STATIC, "foo", "()V", null, null);
methodVisitor.visitCode();
methodVisitor.visitInsn(NOP);
methodVisitor.visitMethodInsn(INVOKESTATIC, "org/gradle/demo/api/evolution/DynamicGroovyClient", "$getCallSiteArray", "()[Lorg/codehaus/groovy/runtime/callsite/CallSite;", false);
@@ -11,7 +9,7 @@ methodVisitor.visitLineNumber(9, label0);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitLdcInsn(new Integer(1));
methodVisitor.visitInsn(AALOAD);
-methodVisitor.visitLdcInsn(Type.getType("Lorg/gradle/demo/api/evolution/Server;"));
+methodVisitor.visitMethodInsn(INVOKESTATIC, "org/gradle/demo/api/evolution/DynamicGroovyClient", "$get$$class$org$gradle$demo$api$evolution$Server", "()Ljava/lang/Class;", false);
methodVisitor.visitMethodInsn(INVOKEINTERFACE, "org/codehaus/groovy/runtime/callsite/CallSite", "callConstructor", "(Ljava/lang/Object;)Ljava/lang/Object;", true);
methodVisitor.visitVarInsn(ASTORE, 1);
Label label1 = new Label();
@@ -21,33 +19,20 @@ methodVisitor.visitInsn(POP);
Label label2 = new Label();
methodVisitor.visitLabel(label2);
methodVisitor.visitLineNumber(10, label2);
-methodVisitor.visitLdcInsn("lajos");
-methodVisitor.visitVarInsn(ASTORE, 2);
-methodVisitor.visitVarInsn(ALOAD, 2);
-methodVisitor.visitInsn(ACONST_NULL);
-methodVisitor.visitVarInsn(ALOAD, 1);
-methodVisitor.visitLdcInsn("name");
-methodVisitor.visitTypeInsn(CHECKCAST, "java/lang/String");
-methodVisitor.visitMethodInsn(INVOKESTATIC, "org/codehaus/groovy/runtime/ScriptBytecodeAdapter", "setProperty", "(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)V", false);
-methodVisitor.visitVarInsn(ALOAD, 2);
-methodVisitor.visitInsn(POP);
-Label label3 = new Label();
-methodVisitor.visitLabel(label3);
-methodVisitor.visitLineNumber(11, label3);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitLdcInsn(new Integer(2));
methodVisitor.visitInsn(AALOAD);
-methodVisitor.visitLdcInsn(Type.getType("Lorg/gradle/demo/api/evolution/DynamicGroovyClient;"));
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitLdcInsn(new Integer(3));
methodVisitor.visitInsn(AALOAD);
methodVisitor.visitVarInsn(ALOAD, 1);
-methodVisitor.visitMethodInsn(INVOKEINTERFACE, "org/codehaus/groovy/runtime/callsite/CallSite", "callGetProperty", "(Ljava/lang/Object;)Ljava/lang/Object;", true);
-methodVisitor.visitMethodInsn(INVOKEINTERFACE, "org/codehaus/groovy/runtime/callsite/CallSite", "callStatic", "(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;", true);
+methodVisitor.visitMethodInsn(INVOKEINTERFACE, "org/codehaus/groovy/runtime/callsite/CallSite", "call", "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+methodVisitor.visitLdcInsn("lajos");
+methodVisitor.visitMethodInsn(INVOKEINTERFACE, "org/codehaus/groovy/runtime/callsite/CallSite", "call", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", true);
methodVisitor.visitInsn(POP);
-Label label4 = new Label();
-methodVisitor.visitLabel(label4);
+Label label3 = new Label();
+methodVisitor.visitLabel(label3);
methodVisitor.visitInsn(RETURN);
-methodVisitor.visitLocalVariable("server", "Ljava/lang/Object;", null, label1, label4, 1);
-methodVisitor.visitMaxs(4, 3);
+methodVisitor.visitLocalVariable("server", "Ljava/lang/Object;", null, label1, label3, 1);
+methodVisitor.visitMaxs(3, 2);
methodVisitor.visitEnd();
\ No newline at end of file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment