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();
}
}