J'écris un programme dans ASM qui utilise l'API Tree pour ajouter du bytecode à certaines méthodes. Je l'ai utilisé ASMifier pour générer le code nécessaire pour créer une méthode spécifique, mais je vais avoir des problèmes avec la ligne suivante:ASM Tree API: utilisation de LDC pour charger une classe <?>
mv.visitLdcInsn(Type.getType('L' + targetClassName + ';'));
J'ai simplement initialisés mv à un new MethodNode
, mais au lieu de charger la Class
, la ligne ci-dessus apparaît en bytecode comme:
ldc Lsome/test/TestClass; (org.objectweb.asm.Type)
Comment puis-je faire charger ASM la constante java/lang/Class
au lieu d'une constante org.objectweb.asm.Type
?
Si elle est liée, la ligne suivante de bytecode serait invokevirtual java/lang/Class getClassLoader(()Ljava/lang/ClassLoader;);
Il semble un peu étrange que vous utilisiez l'API Tree * et * 'visitLdcInsn'. Avec 'MethodNode', je m'attendrais à ce que de nouvelles instructions soient insérées dans [' InsnList'] (http://asm.ow2.org/asm50/javadoc/user/org/objectweb/asm/tree/InsnList.html). – dejvuth
J'utilise ASMifier, puis je remplace simplement le '' '' MethodVisitor''' par un '' '' MethodNode''', parce que cela semble être le moyen le plus simple de convertir une méthode générée en quelque chose qui peut être utilisé dans le API de l'arbre Pour autant que je sache, le '' '' LdcInsnNode''' est simplement ajouté à '' '' 'InsnList''' dans l'implémentation de visitLdcInsn. – konsolas
Vous avez une erreur dans le processus de conversion. Sinon, cela semble correct. –