2017-06-30 4 views
0

pourquoi ASM methodnode.signature retourne null? Voici mon code:pourquoi ASM methodnode.signature retourne null?

public static void main(String[] args) { 
    try { 
     FileInputStream fis = new FileInputStream("Test.class"); 
     ClassReader cr = new ClassReader(fis); 
     ClassNode cn = new ClassNode(); 
     cr.accept(cn, 0); 
     List<MethodNode> methods = cn.methods; 
     for (MethodNode methodNode : methods) { 
      System.out.println(methodNode.signature); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

Qu'attendez-vous de la signature? – jvwilge

+0

La signature de la méthode! –

+0

Où l'utilisez-vous? Je ne suis pas sûr si ce champ est toujours disponible. Le javadoc dit: "La signature de la méthode peut être nulle". Une signature n'est jamais nulle, donc c'est un peu déroutant. 'name + desc' est le plus proche de la signature de la méthode je pense. – jvwilge

Répondre

1

La signature est nulle pour indiquer qu'il n'y a pas d'information générique pour cette méthode. La signature n'est rien d'autre que des méta-données et ignorée par le runtime Java qui regarde plutôt le descripteur d'une méthode qui ne doit jamais être nul.

+0

Pourquoi n'y a-t-il pas d'informations génériques ?? En fait, il y a beaucoup plus de champs comme la liste des variables locales qui retournent aussi null. Les API ASM ont un comportement mystérieux. Il vous sera utile si vous pouvez me fournir un lien avec la documentation appropriée. –

+0

Ceci est lié à la représentation dans le fichier de classe Java. Les signatures génériques sont simplement des méta-données qui peuvent être présentes depuis Java 5. Si la valeur est null, alors les informations ne sont pas non plus placées dans le fichier de classe. ASM est assez proche de la représentation du fichier de classe, donc cette analogie de bas niveau. –

+0

@Aravind Ram: il ne devrait pas être si difficile de trouver [la documentation ASM] (http://asm.ow2.org/) ou [la spécification JVM] (https://docs.oracle.com/javase/ specs/jvms/se8/html/index.html). Il n'y a rien de mystérieux ici. – Holger