in bytekit-core/src/main/java/com/alibaba/bytekit/asm/binding/LocalVarsBinding.java [33:68]
public void pushOntoStack(InsnList instructions, BindingContext bindingContext) {
AbstractInsnNode currentInsnNode = bindingContext.getLocation().getInsnNode();
List<LocalVariableNode> localVariables = new LinkedList<LocalVariableNode>(bindingContext.getMethodProcessor().getMethodNode().localVariables);
if (excludePattern != null && !excludePattern.isEmpty()){
Iterator<LocalVariableNode> it = localVariables.iterator();
while(it.hasNext()){
LocalVariableNode localVariableNode = it.next();
if (MatchUtils.wildcardMatch(localVariableNode.name, excludePattern)) {
it.remove();
}
if (ignoreThis && localVariableNode.name.equals("this")) {
it.remove();
}
}
}
List<LocalVariableNode> results = AsmOpUtils.validVariables(localVariables, currentInsnNode);
AsmOpUtils.push(instructions, results.size());
AsmOpUtils.newArray(instructions, AsmOpUtils.OBJECT_TYPE);
for (int i = 0; i < results.size(); ++i) {
AsmOpUtils.dup(instructions);
AsmOpUtils.push(instructions, i);
LocalVariableNode variableNode = results.get(i);
AsmOpUtils.loadVar(instructions, Type.getType(variableNode.desc), variableNode.index);
AsmOpUtils.box(instructions, Type.getType(variableNode.desc));
AsmOpUtils.arrayStore(instructions, AsmOpUtils.OBJECT_TYPE);
}
}