开发者

Pushing to stack reference to the class begin generated with ASM

I'm using ASM Java library to generate a class X from scratch. Inside one of the static methods of this class I need to push a reference to X.class. Since there isn't yet a X.class I can't use visitLdcInsn. Is there a way to do it?

Well, it's possible (and I'm currently using it) to generate the following code (new X().getClass()), but I'm sure that's not the cleanest wa开发者_开发问答y to do it.


With generated code you usually don't need to push the class onto the stack. Anything you can do with a method call is usually available in byte code.

Say you have to call a method with a class, you can push it onto the stack whether it exists or not.

Something I use is the ASMifier. This is useful because you can start with a class which compiles and does what you want as a template and get it to dump all the code needed to recreate the class. This means you don't really need to write most of the code yourself.

public class Main {
  public static void main(String... args) throws IOException {
    ASMifierClassVisitor cv = new ASMifierClassVisitor(new PrintWriter(System.out));
    ClassReader cr = new ClassReader("X");
    cr.accept(cv, 0);
  }
}

class X {
  {
    System.out.println("Inside class "+X.class);
  }
}

prints

// lots of code
mv.visitLdcInsn(Type.getType("LX;"));
// more code.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜