Ich versuche zu verstehen, wie Javas ObjectWeb ASM-Bibliothek (Framework?) Durch eine Kombination aus dem Lesen der Dokumentation und dem Betrachten von Beispielcode funktioniert. Ich bekomme langsam die Idee dahinter, aber ich habe ein paar Beispielcodes gefunden, die ich einfach nicht verstehe, also hoffe ich, dass mich jemand hier erklären kann.Java ASM visitMethodInsn Parameter?
Der Code nimmt mv
, ein MethodVisitor von einem visitMethod
Methode des ClassWriter erhalten, und startet die Methode, wie diese Manipulation:
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);
Es gibt mehr zu ihm, natürlich, aber das ist der Teil ich nicht tun verstehen. Wie Sie der Methodensignatur entnehmen können, benötigt es 5 Argumente: eine Weltklasse, drei Ganzzahlen und eine Block-Klasse (und ja, diese Variablen in der Signatur-Zeichenkette enthalten die richtigen FQNs für diese Klassen). Bevor jedoch der neue Methodenaufruf aufgerufen wird, werden nur vier Parameter auf den Stapel geschoben (plus der Verweis auf this
). Woher bekommt es den fünften Parameter?