java instraction_Java InstructionList.size方法代码示例

import org.apache.bcel.generic.InstructionList; //导入方法依赖的package包/类

private static Method instrument_reflection(InstructionFactory inf, MethodGen mgen, ConstantPoolGen cpgen) {

Method ret = mgen.getMethod();

InstructionList ilist = mgen.getInstructionList();

if (ilist == null || ilist.size() == 0)

return ret;

InstructionHandle[] ihdls = ilist.getInstructionHandles();

for (InstructionHandle ihdl : ihdls) {

Instruction instr = ihdl.getInstruction();

// go through all instructions and look for invokes

if (instr instanceof InvokeInstruction) {

InvokeInstruction invoke = (InvokeInstruction) instr;

ReferenceType rtype = invoke.getReferenceType(cpgen);

if (rtype instanceof ObjectType) {

String cname = ((ObjectType) rtype).getClassName();

String mname = invoke.getName(cpgen);

// we look for exact match

if (cname.equals("java.lang.reflect.Method") && mname.equals("invoke")) {

// Util.log(rtype.toString());

Type[] arg_types = { new ObjectType(java.lang.reflect.Method.class.getCanonicalName()), Type.OBJECT, new ArrayType(Type.OBJECT, 1) };

ihdl.setInstruction(inf.createInvoke(SIFAStub.class.getCanonicalName(), "invoke", Type.OBJECT, arg_types, Constants.INVOKESTATIC));

}

} else {

// reference type can be ArrayType or UninitializedObjectType

}

}

}

ilist.setPositions();

mgen.setInstructionList(ilist);

mgen.removeLineNumbers();

mgen.setMaxStack();

mgen.setMaxLocals();

ret = mgen.getMethod();

return ret;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值