Le paramètre signature
de toutes les méthodes visit…
fait référence à la signature générique , qui est pertinente pour la réflexion que lors de l'exécution. Vous devriez avoir remarqué, que la méthode de visite de classe a un paramètre name
qui est beaucoup plus pertinent pour le nom de la classe, qui est ce que vous voulez changer.
Pour les membres, il est pas évident que le paramètre desc
est ce que la spécification JVM appelle la « signature », mais au moins, l'API ASM est cohérente pour appeler les paramètres de description signature générique signature
. C'est pourquoi le signature
peut être null
, ce qui indique qu'il n'y a pas de types génériques impliqués. Pour ce que vous voulez réaliser, vous devez adapter le paramètre desc
.
En outre, notez que lors du traitement des instructions, vous devez non seulement prendre en compte la conversion du type de propriétaire des membres référencés, mais aussi que les types des membres doivent également être adaptés. Il n'est pas utile de nommer les paramètres arg0, arg1, arg2, arg3, arg4
dans ce contexte, soit dit en passant. Il se peut qu'il y ait des références de type supplémentaires que vous ne traitez pas, par ex. ldc
instructions peut pousser une référence Class
, mais je ne sais pas si cela compte pour ce cas particulier.
J'ai effectivement mis à jour le problème est qu'à la fin il y a une importation qui est inutile pour le nom original – NacOJerk
@NacOJerk: avez-vous lu et tenté de comprendre [ma réponse] (http://stackoverflow.com/ a/40152920/2711488)? Votre code ne fait pas ce que vous voulez, c'est-à-dire qu'il ne renomme rien. Les instructions 'import' sont des artefacts de code source purs qui n'apparaissent pas dans le bytecode. – Holger
Holger a raison Nac. –