我想了解Java的ObjectWeb ASM庫(框架?)如何通過閱讀文檔和查看示例代碼的組合。我慢慢地意識到它背後的想法,但是我發現了一些我只是不理解的示例代碼,所以我希望這裏有人能向我解釋它。Java ASM visitMethodInsn參數?
代碼獲取mv
,從ClassWriter的visitMethod
方法得到的MethodVisitor中,並開始操縱這樣的方法:
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);
還有更多的東西,當然,不過這是我做的不是一部分理解。從方法簽名中可以看到,它有5個參數:一個World類,三個整數和一個Block類(並且是的,簽名字符串中的那些變量確實爲這些類保存了正確的FQN)。在訪問新方法調用之前,只有四個參數被壓入堆棧(加上對this
的引用)。那麼它從哪裏得到第五個參數呢?