Как создать объект с помощью ASM Tree API?

83
4
23
В доке ответа не нашел, извините(

Сейчас я остановился на этом:
Java:
MethodNode method = methodNodeOptional.get();
InsnList insn = new InsnList();
insn.add(new TypeInsnNode(Opcodes.NEW, Type.getDescriptor(File.class)));
insn.add(new FieldInsnNode(Opcodes.GETFIELD, Type.getDescriptor(File.class), "", Type.getDescriptor(File.class))); // вроде тут как раз что то не так
method.instructions.insert(insn);

На выходе получаю:
Java:
File var10000 = (new File).;

В Recaf сделал все что мне нужно и получил необходимый байт-код, но как использовать его в этой библиотеке - я не очень понимаю.
Java:
DEFINE PUBLIC STATIC main([Ljava/lang/String; var0)V
A:
LINE A 10
NEW java/io/File
DUP
LDC "input.txt"
INVOKESPECIAL java/io/File.<init>(Ljava/lang/String;)V
ASTORE file
B:
LINE B 11
RETURN
C:
Очевидно, он отличается от того, что у меня в коде. Не направите в нужное русло?

Было бы неплохо еще узнать, как давать переменным имена.
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Устанавливаем в идею плагин: ASM Bytecode Viewer - Plugins | JetBrains
Пишем нужный код на джаве, нажимаем ПКМ -> ASM Bytecode Viewer.
Открываем вкладку ASMified и видим готовый код.
Перевести на tree api элементарно.

И тебе вообще нужно сначала добавить LocalVariableNode в method.localVariables.

Было бы неплохо еще узнать, как давать переменным имена.
Обращения идут по айдишникам, а не именам. Да, их можно указать. Всё это есть в LocalVariableNode.
 
Сверху