質問

BCELを使用して物事の名前を変更するにはどうすればよいですか?これまでのところ、私がしていることは、クラス内の各メソッドを実行し、定数プールに新しいnameandtype定数を作成することです。その後、古いnameandtype定数をその1つに置き換えます。

int nameRef = cpg.addNameAndType(newName, m.getSignature());
cpg.setConstant(m.getNameIndex(), cpg.getConstant(nameRef));

これは機能するはずのように思えますが、私の分解者は、この後に一定のプールが腐敗していると言っています。一歩か何かがありませんか?

役に立ちましたか?

解決

あなたはそれを仮定しています ConstantPoolGen 指標と値の単なるテーブルです。しかし、実際には、はるかに複雑な内部構造があると思います。を見ています ConstantPoolGen 方法、それが参照を保持していることは明らかです MethodGen コードを実行したときに更新されたオブジェクト。

定数プールを直接操作するのではなく、クラスの各方法を取得することをお勧めします( MethodGen オブジェクト)、およびメソッドを使用します setName(). 。定数プールは自動的に更新されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top