J'essaie de comprendre comment la bibliothèque ObjectWeb ASM de Java (framework?) Fonctionne en combinant la lecture de la documentation et la recherche d'exemples de code. Je comprends peu à peu l'idée, mais j'ai trouvé un exemple de code que je ne comprends pas, alors j'espère que quelqu'un ici pourra me l'expliquer.Java ASM paramètres VisitMethodInsn?
Le code prend mv
, un MethodVisitor obtenu à partir d'une méthode de ClassWriter visitMethod
, et commence la manipulation de la méthode comme ceci:
mv.visitCode();
String methodSignature = "(L" + worldClass + ";IIIL" + blockClass + ";)V";
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(81, l0);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ILOAD, 2);
mv.visitVarInsn(ILOAD, 3);
mv.visitVarInsn(ILOAD, 4);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESTATIC, "com/olafski/fastleafdecay/FldHandler", "handleLeafDecay", methodSignature);
Il y a plus à lui, bien sûr, mais cela est la partie que je ne suis pas comprendre. Comme vous pouvez le voir à partir de la signature de la méthode, elle prend 5 arguments: une classe World, trois entiers et une classe Block (et oui, ces variables dans la chaîne de signature contiennent les FQN appropriés pour ces classes). Cependant, avant que la nouvelle invocation de méthode ne soit visitée, seuls les paramètres quatre sont poussés sur la pile (plus la référence à this
). Alors, d'où vient le cinquième paramètre?