我需要将我的代码调整为更严格的Java 7验证程序,并且必须在我的MethodNode(我正在使用树API)中添加visitFrame
调用。我无法找到如何Type
映射到visitFrame使用的Object[]
小号的任何信息,所以请帮我在这里...什么是从Type.getSort()到visitFrame(...)中的本地和堆栈数组的映射?
这是我到目前为止有:
private Object getFrameType(Type type) {
switch (type.getSort()) {
case Type.BOOLEAN:
case Type.CHAR:
case Type.BYTE:
case Type.SHORT:
case Type.INT:
return Opcodes.INTEGER;
case Type.LONG:
return Opcodes.LONG;
case Type.FLOAT:
return Opcodes.FLOAT;
case Type.DOUBLE:
return Opcodes.DOUBLE;
case Type.OBJECT:
case Type.ARRAY:
return type.getInternalName();
}
throw new RuntimeException(type + " can not be converted to frame type");
}
我会想知道的是:Type.VOID
和Type.METHOD
是什么? 我何时需要Opcodes.TOP
,Opcodes.NULL
和Opcodes.UNINITIALIZED_THIS
?
我猜UNINITIALIZED_THIS
仅在构造函数中使用,我大概可以忽略VOID
和METHOD
,但我不知道,我没有丝毫的想法是什么TOP
是。
我正在寻找这样的方法,谢谢:-),你有没有修改它? –