class MethodWriter
        extends Block {
    final ClassWriter classWriter;
    final int modifiers;
    final String name;
    final Class returnType;
    final Class[] paramTypes;
    final String[] paramNames;

    MethodWriter(ClassWriter classWriter, int modifiers, String name, Class returnType, Class[] paramTypes, String[] paramNames) {
        this.classWriter = classWriter;
        this.modifiers = modifiers;
        this.name = name;
        this.returnType = returnType;
        this.paramTypes = paramTypes;
        this.paramNames = paramNames;
    }

    public void toString(StringBuilder buf) {<FILL_FUNCTION_BODY>}

    public void ident(StringBuilder buf, int indent) {
        for (int i = 0; i < indent; i++) {
            buf.append('\t');
        }
    }
}

        if (Modifier.isPublic(modifiers)) {
            buf.append("\tpublic ");
        }

        if ("<init>".equals(name)) {
            buf.append(classWriter.name);
        } else {
            buf.append(getTypeName(returnType)).append(' ').append(name);
        }

        boolean newLine = paramTypes.length > 3;
        buf.append('(');
        if (newLine) {
            buf.append("\n\t\t\t");
        }

        for (int i = 0; i < paramTypes.length; i++) {
            if (i != 0) {
                if (newLine) {
                    buf.append(",\n\t\t\t");
                } else {
                    buf.append(", ");
                }
            }
            Class paramType = paramTypes[i];
            String paramName = paramNames[i];
            buf.append(getTypeName(paramType)).append(' ').append(paramName);
        }

        if (newLine) {
            buf.append("\n\t");
        }

        buf.append(") {\n");

        for (int i = 0; i < statements.size(); i++) {
            if (i != 0) {
                buf.append('\n');
            }
            Statement stmt = statements.get(i);
            stmt.toString(this, buf, 2);
        }

        buf.append("\n\t}");
    
<methods>public non-sealed void <init>() ,public void breakStmt() ,public void breakStmt(java.lang.String) ,public void continueStmt() ,public void continueStmt(java.lang.String) ,public com.alibaba.fastjson2.internal.codegen.Block.Statement declare(Class#RAW, com.alibaba.fastjson2.internal.codegen.Opcodes.OpName) ,public com.alibaba.fastjson2.internal.codegen.Block.Statement declare(java.lang.String, com.alibaba.fastjson2.internal.codegen.Opcodes.OpName) ,public com.alibaba.fastjson2.internal.codegen.Block.Statement declare(Class#RAW, com.alibaba.fastjson2.internal.codegen.Opcodes.OpName, com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public com.alibaba.fastjson2.internal.codegen.Block.Statement declare(Class#RAW, com.alibaba.fastjson2.internal.codegen.Opcodes.OpName, java.lang.Object) ,public com.alibaba.fastjson2.internal.codegen.Block.Statement declare(java.lang.String, com.alibaba.fastjson2.internal.codegen.Opcodes.OpName, com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public com.alibaba.fastjson2.internal.codegen.Block.ForStmt forStmt(Class#RAW, com.alibaba.fastjson2.internal.codegen.Opcodes.Op, com.alibaba.fastjson2.internal.codegen.Opcodes.Op, com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public com.alibaba.fastjson2.internal.codegen.Block.IfStmt ifNotNull(com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public com.alibaba.fastjson2.internal.codegen.Block.IfStmt ifNull(com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public com.alibaba.fastjson2.internal.codegen.Block.IfStmt ifStmt(com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public transient void invoke(java.lang.String, com.alibaba.fastjson2.internal.codegen.Opcodes.Op[]) ,public transient void invoke(com.alibaba.fastjson2.internal.codegen.Opcodes.Op, java.lang.String, com.alibaba.fastjson2.internal.codegen.Opcodes.Op[]) ,public void label(java.lang.String) ,public void newLine() ,public void putField(java.lang.String, com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public void putField(com.alibaba.fastjson2.internal.codegen.Opcodes.Op, java.lang.String, com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public void ret(com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public com.alibaba.fastjson2.internal.codegen.Block.Statement stmt(com.alibaba.fastjson2.internal.codegen.Opcodes.Op) ,public com.alibaba.fastjson2.internal.codegen.Block.SwitchStmt switchStmt(com.alibaba.fastjson2.internal.codegen.Opcodes.Op, int[]) ,public com.alibaba.fastjson2.internal.codegen.Block.WhileStmt whileStmtStmt(com.alibaba.fastjson2.internal.codegen.Opcodes.Op) <variables>protected final List<com.alibaba.fastjson2.internal.codegen.Block.Statement> statements