public MethodVisitor visitMethod()

in src/main/java/com/intellij/rt/debugger/agent/TailCallContinuationTransformer.java [37:72]


                    public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
                        MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions);
                        switch (name) {
                            case "wrapContinuationReal":
                                if (descriptor.equals(WRAP_CONTINUATION_REAL_DESC)) {
                                    wrapContinuationRealIsPresent[0] = true;
                                    break;
                                }
                            case "wrapContinuation":
                                int argumentCount = Type.getArgumentCount(descriptor);
                                if (argumentCount != 6) {
                                    System.err.println("TailCallContinuationTransformer: expected 6 arguments in TailCallAsyncStackTraceEntryKt#wrapContinuation, but got " + argumentCount + ", descriptor = " + descriptor);
                                    break;
                                }
                                return new MethodVisitor(api, mv) {
                                    @Override
                                    public void visitCode() {
                                        super.visitCode();

                                        mv.visitVarInsn(Opcodes.ALOAD, 0);
                                        mv.visitVarInsn(Opcodes.ALOAD, 1);
                                        mv.visitVarInsn(Opcodes.ALOAD, 2);
                                        mv.visitVarInsn(Opcodes.ILOAD, 3);
                                        mv.visitVarInsn(Opcodes.ALOAD, 4);
                                        mv.visitVarInsn(Opcodes.ALOAD, 5);

                                        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "kotlin/coroutines/jvm/internal/TailCallAsyncStackTraceEntryKt", "wrapContinuationReal", WRAP_CONTINUATION_REAL_DESC, false);
                                        mv.visitInsn(Opcodes.ARETURN);
                                        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
                                        mv.visitMaxs(2, 6);
                                        mv.visitEnd();
                                    }
                                };
                        }
                        return mv;
                    }