0

ここにいくつかのコードがあります。

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);
  }
}

これら 2 つのメソッドは同等のアクションを実行します。最初のメソッドの 2 番目のパラメータは疑似引数なので、元のコードをクリアして、このメソッドを次のようにしたいのですが...

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);

ただし、null ポインター例外がスローされます。理由は何ですか?

4

1 に答える 1

0

ASM のプロジェクト ページからリンクされている AOSD'07 の論文の「Merging Two Classes into One」セクションを参照してください。MethodNode を適切に使用してメソッドのバイトコードを別のメソッドにコピーする方法の例を提供します。

于 2012-06-21T16:13:04.640 に答える