in bytekit-core/src/main/java/com/alibaba/bytekit/asm/binding/LineBinding.java [24:55]
public void pushOntoStack(InsnList instructions, BindingContext bindingContext) {
Location location = bindingContext.getLocation();
AbstractInsnNode insnNode = location.getInsnNode();
int line = -1;
if (exact) {
if (insnNode instanceof LineNumberNode) {
line = ((LineNumberNode) insnNode).line;
} else {
throw new IllegalArgumentException("LineBinding location is not LineNumberNode, insnNode: " + insnNode);
}
} else {
if (location.isWhenComplete() == false) {
while (insnNode != null) {
if (insnNode instanceof LineNumberNode) {
line = ((LineNumberNode) insnNode).line;
break;
}
insnNode = insnNode.getPrevious();
}
} else {
while (insnNode != null) {
if (insnNode instanceof LineNumberNode) {
line = ((LineNumberNode) insnNode).line;
break;
}
insnNode = insnNode.getNext();
}
}
}
AsmOpUtils.push(instructions, line);
}