Question

Comment puis-je renommer les choses en utilisant BCEL? Jusqu'à présent, ce que je fais est passe par chaque méthode dans une classe et de créer une nouvelle constante de NameAndType dans la piscine constante, alors je remplace l'ancienne constante de NameAndType avec celui

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

Cela semble que cela devrait fonctionner mais mon décompilateur me dit la piscine constante est corrompu après. Suis-je manque une étape ou quelque chose?

Était-ce utile?

La solution

Vous supposez que le ConstantPoolGen est juste un tableau des indices et des valeurs. Mais je crois qu'en réalité, il a une structure interne beaucoup plus compliquée. En regardant la méthode ConstantPoolGen, il est clair qu'il détient également des références à des objets MethodGen qui peuvent ou non me mis à jour lorsque vous exécutez votre code.

Je vous conseille de ne pas manipuler la constant_pool directement, mais pour obtenir chaque méthode de la classe (comme un objet MethodGen) et utilisez la méthode setName(). La piscine constante sera mise à jour automatiquement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top