Как правильно использовать визитлокалевируемый в ASM?JAVA

Программисты JAVA общаются здесь
Anonymous
Как правильно использовать визитлокалевируемый в ASM?

Сообщение Anonymous »

Итак, я пытаюсь добавить информацию о местных жителях, которые я использую. Текущий способ, которым я пытаюсь достичь этого-IS: < /p>
methodVisitor = classWriter.visitMethod(ACC_PUBLIC | ACC_STATIC, "something", "()V", null, null);
methodVisitor.visitCode();
Label label0 = new Label();
methodVisitor.visitLabel(label0);
methodVisitor.visitInsn(ICONST_1);
Label label1 = new Label();
methodVisitor.visitJumpInsn(IFEQ, label1);
methodVisitor.visitLdcInsn("number");
methodVisitor.visitVarInsn(ASTORE, 0);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitMethodInsn(INVOKESTATIC, "org/bezsahara/minikotlin/NamingTests", "accept", "(Ljava/lang/Object;)V", false);
methodVisitor.visitInsn(RETURN);
methodVisitor.visitLabel(label1);
methodVisitor.visitIntInsn(BIPUSH, 21);
methodVisitor.visitMethodInsn(INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false);
methodVisitor.visitVarInsn(ASTORE, 0);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitMethodInsn(INVOKESTATIC, "org/bezsahara/minikotlin/NamingTests", "accept", "(Ljava/lang/Object;)V", false);
methodVisitor.visitInsn(RETURN);
Label label2 = new Label();
methodVisitor.visitLabel(label2);
methodVisitor.visitLocalVariable("hello", "Ljava/lang/String;", null, label0, label1, 0);
methodVisitor.visitLocalVariable("goodbye", "Ljava/lang/Integer;", null, label1, label2, 0);
methodVisitor.visitMaxs(0, 0);
methodVisitor.visitEnd();
< /code>
Однако при использовании Intellij decropiler (я думаю, что он использует Fernflower). Имена переменных неверны: < /p>
public static void something() {
if (true) {
String goodbye = "number";
NamingTests.accept(goodbye);
} else {
Integer hello = 21;
NamingTests.accept(hello);
}
}
< /code>
После изучения выходов компилятора. Кажется, они указывают только на загрузку операций на переменные. Но это кажется необоснованным. Я имею в виду, что если я просто назначу переменную чем -то, она потеряет всю информацию об именах. Почему я также не могу отметить магазин?


Подробнее здесь: https://stackoverflow.com/questions/797 ... -correctly

Вернуться в «JAVA»