package org.objectweb.asm.commons.cfg.tree.node;
import org.objectweb.asm.commons.cfg.tree.NodeTree;
import org.objectweb.asm.commons.util.Assembly;
import org.objectweb.asm.tree.JumpInsnNode;
public class JumpNode extends AbstractNode {
private TargetNode target;
public JumpNode(NodeTree tree, JumpInsnNode insn, int collapsed, int producing) {
super(tree, insn, collapsed, producing);
}
public JumpInsnNode insn() {
return (JumpInsnNode) super.insn();
}
public AbstractNode resolve() {
return target.resolve();
}
public void setTarget(TargetNode target) {
if (this.target != null) {
this.target.removeTargeter(this);
}
if (target != null) {
target.addTargeter(this);
insn().label = target.label();
} else {
insn().label = null;
}
this.target = target;
}
public TargetNode target() {
return target;
}
@Override
protected String toString(int tab) {
StringBuilder sb = new StringBuilder();
sb.append(Assembly.toString(insn()));
sb.append(' ').append('>').append(' ');
sb.append(target);
for (AbstractNode n : this) {
sb.append('\n');
for (int i = 0; i < tab; i++) {
sb.append('\t');
}
sb.append(n.toString(tab + 1));
}
return sb.toString();
}
}