2016-06-29 2 views
0

Je cherche un moyen de compter combien d'objets différents sont appelés dans une méthode utilisant ByteBuddy pour l'analyse de code octet. J'ai essayé ceci avec l'analyse de chaîne, mais c'est absolument impossible. En outre, j'ai vérifié AST, mais je devrais construire le code avant de faire cela, ce qui serait beaucoup de temps. Par ceci, il serait préférable si je pourrais créer un agent.Agent pour compter les objets dans les méthodes en utilisant ByteBuddy

Vu le code suivant:

@Test 
public void myMethod(){ 
    Boolean myObj = false; 
    assertTrue(myObj).isTrue(); 
    assertTrue(myObj2).isTrue(); 
} 

La sortie pour l'analyse de cette méthode serait: (myObj, myObj2). Comme je suis nouveau à JavaBuddy, mon approche à ceci serait:

Créez un élément de correspondance d'élément qui trouverait pour des méthodes annotées avec @Test. Intercepter .... voici le problème: je ne sais pas comment je devrais compter ces objets ou itérer à travers les déclarations de méthodes.

Quelqu'un peut-il me donner des liens à ce sujet ou des échantillons?

Répondre

1

Afin de coder l'instrument dans une méthode, Byte Buddy vous permet d'utiliser ASM pour instrumenter le code en mode instruction. La raison en est que ASM est déjà une très bonne API pour le traitement de code byte et qu'il n'y a pas vraiment de bonne raison de le remplacer par quelque chose qui finirait par être assez similaire.

Si vous voulez en savoir plus sur ASM, their webpage offre une excellente documentation.

Néanmoins, ce que vous avez prévu est assez complexe à faire. Vous devez essentiellement suivre le flux de contrôle de la méthode pour voir quel objet est affecté à quelle variable à un moment donné. De plus, certaines classes ne peuvent pas être instrumentées comme la classe Boolean, c'est pourquoi je vous recommande de trouver une autre approche à votre problème.