如何使用ASM将操作码中的操作码复制到Java类文件中的另一个方法?

时间:2012-06-20 14:48:22

标签: java java-bytecode-asm bytecode-manipulation

以下是一些代码。

static synchronized void q(ua paramua, int paramInt) {
try {
 if (d) { if (paramInt > -16711936);
   return; }
 if (q * 514194583 > 0) { if (paramInt > -16711936);
   abf localabf = new abf(paramua);
   n.d(localabf, -984409319);
 }
 else {
   paramua.ma(false);
 }
 return; } catch (RuntimeException localRuntimeException) { throw aht.d(localRuntimeException, "ck.q(" + 41);
}
}

static synchronized void b(ua paramua)
{
  if (d) return;
  if (q * 514194583 > 0) {
    abf localabf = new abf(paramua);
    n.d(localabf, -836239689);
  }
  else {
    paramua.ma(false);
  }
}

这两种方法执行相同的操作。 第一个方法的第二个参数是psudo-argument,所以我想清除原始代码并使这个方法像这样......

static synchronized void q(ua paramua, int paramInt)
{
  if (d) return;
  if (q * 514194583 > 0) {
    abf localabf = new abf(paramua);
    n.d(localabf, -836239689);
  }
  else {
    paramua.ma(false);
  }
}

我该怎么做? 我试过这样的。

destMethodNode.instructions.clear();
destMethodNode.instructions.add(srcMethodNode.instructions);

但抛出空指针异常。是什么原因?

1 个答案:

答案 0 :(得分:0)

参见ASM project page链接的AOSD'07中的“将两个类合并为一个”部分。它提供了如何正确使用MethodNode将方法的字节码复制到另一个方法的示例。