2016-04-12 6 views
1

muss ich Knoten und node.getNext tauschen() in der ListIterator "nodeListIterator" und ich habe stundenlang versucht,ListIterator Swap aktuellen und nächsten

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

Vielen Dank.

+1

Können Sie den Code tatsächlich enthalten und die spezifischen Probleme beschreiben Sie sehen? – hooda

+0

@hooda Der Code ist völlig irrelevant, das ist eine Frage von Algorithmen. Wenn ich die angegebene if-Anweisung erreiche und die if-Anweisung validiere, muss ich nur den ListIterator neu anordnen ......... –

+0

@JordFlo Bitte erläutern Sie, was Ihr Code in Bezug auf einen Algorithmus zu erreichen versucht, nicht in Bezug auf Codierung. Zum Beispiel sagen Sie, dass Sie 'node' und' node.getNext() 'tauschen wollen, aber ich bin nicht sicher, ob Sie meinen, dass Sie den ersten und zweiten Knoten tauschen wollen, oder wenn Sie jeden anderen Knoten tauschen wollen, usw. Das ist etwas verwirrend. –

Antwort

0

dachte ich es aus, seine hacky, aber es funktioniert

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