2011-12-01 1 views
1

Je les informations suivantes dans cobertura.xmlcomment obtenir la liste d'arguments de méthode du nom tronqué?

<method name="visitNode" 
     signature="(Lchs/cof/drawplus/IJoint;Lchs/cof/logical/schem/ISegment;Lchs/analysis/GraphServices$IGraphVisitor;I)Z" 

La signature est le nom mutilée de java pour la méthode. (http://asm.ow2.org/doc/faq.html#Q7)

Comment puis-je construire la méthode argumentlist, qui était comme ci-dessous.

boolean visitNode(drawplus.IJoint root, 
      schem.ISegment segmentBefore, 
      IGraphVisitor visitor, 
      int branch) 

Y a-t-il une bibliothèque qui peut faire cela de-mangling?

Répondre

2

Vous pouvez extraire les types d'arguments et de résultat du descripteur de méthode, mais vous ne pouvez pas extraire les noms de paramètres.

Je ne connais pas de bibliothèque qui fera cette extraction, même si je suis sûr que ce code a été implémenté plusieurs fois. Ce n'est pas difficile à mettre en place. La syntaxe d'une chaîne de descripteur de méthode est spécifiée dans Java Virtual Machine Specification - JVMS 4.3.3.

+0

Je suis d'accord. L'utilisation d'une autre bibliothèque peut être exagérée. – Jayan

+0

@Jayan - Je ne dirais pas forcément que c'était trop ...Si vous pouviez trouver une bibliothèque qui fournissait une API simple pour cela. Je signale simplement que ce n'est pas un problème si vous devez écrire votre propre code pour le faire. –

2

JD Core devrait faire tout cela pour vous. Cependant, il s'agit d'une librairie C++, cela pourrait ne pas vous concerner. BCEL (Byte Code Engineering Library vous permet de créer, analyser et modifier les fichiers binaires qui devraient être quelque chose dans le sens de ce que vous voulez. BCEL est écrit en Java.
Si les fichiers de classe ne sont pas compilés avec l'indicateur de débogage, les noms de paramètres peuvent être génériques.

1

Voici une reproduction des règles de mangling, car cette question arrive assez haut sur les résultats de recherche pour ce sujet. Les détails ci-dessous proviennent du lien dans la question d'origine.

représentations primitives:

  • V - void
  • Z - boolean
  • C - char
  • B-byte
  • S-short
  • I - int
  • F - float
  • J - long
  • D - double

représentations de classe:

  • L<class>;
  • Ljava/io/ObjectOutput;
  • Ljava/lang/String;
Questions connexes