ListIterator поменять местами текущий и следующий

Мне нужно поменять узел и node.getNext() в ListIterator "nodeListIterator", и я пытался в течение нескольких часов

 if (node instanceof LdcInsnNode && (node.getNext() instanceof FieldInsnNode && node.getNext().getOpcode() == Opcodes.GETSTATIC)
        && node.getNext().getNext().getOpcode() == Opcodes.IMUL) {
        // code
 }

Спасибо вам.

1 ответ

Я понял это, это хакерский, но это работает

final ListIterator<AbstractInsnNode> nodeListIterator = methodNode.instructions.iterator();
while (nodeListIterator.hasNext()) {
    AbstractInsnNode node = nodeListIterator.next();
    if (node instanceof LdcInsnNode && (node.getNext() instanceof FieldInsnNode && node.getNext().getOpcode() == Opcodes.GETSTATIC)
            && node.getNext().getNext().getOpcode() == Opcodes.IMUL) {
        AbstractInsnNode temp1 = node;
        nodeListIterator.remove();
        node = nodeListIterator.next();
        AbstractInsnNode temp2 = node;
        nodeListIterator.remove();
        nodeListIterator.next();
        nodeListIterator.previous();
        nodeListIterator.add(temp1);
        nodeListIterator.previous();
        nodeListIterator.add(temp2);
        nodeListIterator.previous();
    }
}
Другие вопросы по тегам