Java ByteBuddy-如何添加局部变量

Java ByteBuddy-如何添加局部变量,java,local-variables,byte-buddy,Java,Local Variables,Byte Buddy,我需要将局部变量添加到截取方法的生成体中 我尝试过(为了生成int变量): List语句=newarraylist(); add(IntegerConstant.forValue(false)); add(MethodVariableAccess.INTEGER.storeAt(3)); ... StackManipulation逻辑=new StackManipulation.component(statements.toArray(new StackManipulation[0]); Sta

我需要将局部变量添加到截取方法的生成体中

我尝试过(为了生成int变量):

List语句=newarraylist();
add(IntegerConstant.forValue(false));
add(MethodVariableAccess.INTEGER.storeAt(3));
...
StackManipulation逻辑=new StackManipulation.component(statements.toArray(new StackManipulation[0]);
StackManipulation.Size=newstackmanipulation.composite(logic).apply(methodVisitor,context);
返回新的ByteCodeAppender.Size(Size.getMaximalSize(),methodDescription.getStackSize());
但这给了我

java.lang.VerifyError:局部变量表溢出

当然,局部变量表应该已经有了这个变量

为了解决这个问题,我现在创建额外的方法参数作为局部变量,这当然不方便


那么,如何使用ByteBuddy修改局部变量表呢?

您必须为局部变量数组指定正确的大小。如果需要额外的插槽,则必须为追加器指定正确的大小:

new ByteCodeAppender.Size(
  size.getMaximalSize(), 
  methodDescription.getStackSize() + 1
);
在上面的示例中,似乎只为插入指令的方法的值保留位置

new ByteCodeAppender.Size(
  size.getMaximalSize(), 
  methodDescription.getStackSize() + 1
);