// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.debuginfo;

import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;

public class KotlinRingBufferDump implements Opcodes {

  public static final String INTERNAL_NAME = "kotlin/collections/RingBuffer";
  public static final String DESCRIPTOR = "L" + INTERNAL_NAME + ";";
  public static final String CLASS_NAME = "kotlin.collections.RingBuffer";

  public static byte[] dump() {

    ClassWriter cw = new ClassWriter(0);
    FieldVisitor fv;
    AnnotationVisitor av0;

    String superName = "java/lang/Object"; // "kotlin/collections/AbstractList";
    String signature =
        null; // "<T:Ljava/lang/Object;>Lkotlin/collections/AbstractList<TT;>;Ljava/util/RandomAccess;";
    cw.visit(
        V1_6,
        ACC_FINAL + ACC_SUPER + ACC_PUBLIC,
        INTERNAL_NAME,
        signature,
        superName,
        new String[] {"java/util/RandomAccess"});

    {
      av0 = cw.visitAnnotation("Lkotlin/Metadata;", true);
      av0.visit("mv", new int[] {1, 1, 9});
      av0.visit("bv", new int[] {1, 0, 2});
      av0.visit("k", new Integer(1));
      {
        AnnotationVisitor av1 = av0.visitArray("d1");
        av1.visit(
            null,
            "\u0000>\n"
                + "\u0002\u0018\u0002\n"
                + "\u0000\n"
                + "\u0002\u0018\u0002\n"
                + "\u0002\u0018\u0002\n"
                + "\u0002\u0018\u0002\n"
                + "\u0000\n"
                + "\u0002\u0010\u0008\n"
                + "\u0002\u0008\u0002\n"
                + "\u0002\u0010\u0011\n"
                + "\u0002\u0010\u0000\n"
                + "\u0002\u0008\u0009\n"
                + "\u0002\u0010\u0002\n"
                + "\u0002\u0008\u0006\n"
                + "\u0002\u0010\u000b\n"
                + "\u0000\n"
                + "\u0002\u0010(\n"
                + "\u0002\u0008\u000c\u0008\u0002\u0018\u0000*\u0004\u0008\u0000\u0010\u00012\u0008\u0012\u0004\u0012\u0002H\u00010\u00022\u00060\u0003j\u0002`\u0004B\r"
                + "\u0012\u0006\u0010\u0005\u001a\u00020\u0006\u00a2\u0006\u0002\u0010\u0007J\u0013\u0010\u0013\u001a\u00020\u00142\u0006\u0010\u0015\u001a\u00028\u0000\u00a2\u0006\u0002\u0010\u0016J\u0016\u0010\u0017\u001a\u00028\u00002\u0006\u0010\u0018\u001a\u00020\u0006H\u0096\u0002\u00a2\u0006\u0002\u0010\u0019J\u0006\u0010\u001a\u001a\u00020\u001bJ\u000f\u0010\u001c\u001a\u0008\u0012\u0004\u0012\u00028\u00000\u001dH\u0096\u0002J\u000e\u0010\u001e\u001a\u00020\u00142\u0006\u0010\u001f\u001a\u00020\u0006J\u0015\u0010"
                + " \u001a\n"
                + "\u0012\u0006\u0012\u0004\u0018\u00010\n"
                + "0\u0009H\u0014\u00a2\u0006\u0002\u0010!J'\u0010"
                + " \u001a\u0008\u0012\u0004\u0012\u0002H\u00010\u0009\"\u0004\u0008\u0001\u0010\u00012\u000c\u0010\"\u001a\u0008\u0012\u0004\u0012\u0002H\u00010\u0009H\u0015\u00a2\u0006\u0002\u0010#J9\u0010$\u001a\u00020\u0014\"\u0004\u0008\u0001\u0010\u0001*\u0008\u0012\u0004\u0012\u0002H\u00010\u00092\u0006\u0010\u0015\u001a\u0002H\u00012\u0008\u0008\u0002\u0010%\u001a\u00020\u00062\u0008\u0008\u0002\u0010&\u001a\u00020\u0006H\u0002\u00a2\u0006\u0002\u0010'J\u0015\u0010(\u001a\u00020\u0006*\u00020\u00062\u0006\u0010\u001f\u001a\u00020\u0006H\u0083\u0008R\u0018\u0010\u0008\u001a\n"
                + "\u0012\u0006\u0012\u0004\u0018\u00010\n"
                + "0\u0009X\u0082\u0004\u00a2\u0006\u0004\n"
                + "\u0002\u0010\u000bR\u0011\u0010\u0005\u001a\u00020\u0006\u00a2\u0006\u0008\n"
                + "\u0000\u001a\u0004\u0008\u000c\u0010\r"
                + "R$\u0010\u000f\u001a\u00020\u00062\u0006\u0010\u000e\u001a\u00020\u0006@RX\u0096\u000e\u00a2\u0006\u000e\n"
                + "\u0000\u001a\u0004\u0008\u0010\u0010\r"
                + "\"\u0004\u0008\u0011\u0010\u0007R\u000e\u0010\u0012\u001a\u00020\u0006X\u0082\u000e\u00a2\u0006\u0002\n"
                + "\u0000\u00a8\u0006)");
        av1.visitEnd();
      }
      {
        AnnotationVisitor av1 = av0.visitArray("d2");
        av1.visit(null, DESCRIPTOR);
        av1.visit(null, "T");
        av1.visit(null, "Lkotlin/collections/AbstractList;");
        av1.visit(null, "Ljava/util/RandomAccess;");
        av1.visit(null, "Lkotlin/collections/RandomAccess;");
        av1.visit(null, "capacity");
        av1.visit(null, "");
        av1.visit(null, "(I)V");
        av1.visit(null, "buffer");
        av1.visit(null, "");
        av1.visit(null, "");
        av1.visit(null, "[Ljava/lang/Object;");
        av1.visit(null, "getCapacity");
        av1.visit(null, "()I");
        av1.visit(null, "<set-?>");
        av1.visit(null, "size");
        av1.visit(null, "getSize");
        av1.visit(null, "setSize");
        av1.visit(null, "startIndex");
        av1.visit(null, "add");
        av1.visit(null, "");
        av1.visit(null, "element");
        av1.visit(null, "(Ljava/lang/Object;)V");
        av1.visit(null, "get");
        av1.visit(null, "index");
        av1.visit(null, "(I)Ljava/lang/Object;");
        av1.visit(null, "isFull");
        av1.visit(null, "");
        av1.visit(null, "iterator");
        av1.visit(null, "");
        av1.visit(null, "removeFirst");
        av1.visit(null, "n");
        av1.visit(null, "toArray");
        av1.visit(null, "()[Ljava/lang/Object;");
        av1.visit(null, "array");
        av1.visit(null, "([Ljava/lang/Object;)[Ljava/lang/Object;");
        av1.visit(null, "fill");
        av1.visit(null, "fromIndex");
        av1.visit(null, "toIndex");
        av1.visit(null, "([Ljava/lang/Object;Ljava/lang/Object;II)V");
        av1.visit(null, "forward");
        av1.visit(null, "kotlin-stdlib");
        av1.visitEnd();
      }
      av0.visitEnd();
    }
    cw.visitInnerClass(
        INTERNAL_NAME + "$iterator$1", null, null, ACC_PUBLIC + ACC_FINAL + ACC_STATIC);

    {
      fv = cw.visitField(ACC_PRIVATE + ACC_FINAL, "buffer", "[Ljava/lang/Object;", null, null);
      fv.visitEnd();
    }
    {
      fv = cw.visitField(ACC_PRIVATE, "startIndex", "I", null, null);
      fv.visitEnd();
    }
    {
      fv = cw.visitField(ACC_PRIVATE, "size", "I", null, null);
      fv.visitEnd();
    }
    {
      fv = cw.visitField(ACC_PRIVATE + ACC_FINAL, "capacity", "I", null, null);
      fv.visitEnd();
    }
    methodAdd(cw);
    methodMain(cw);
    cw.visitEnd();

    return cw.toByteArray();
  }

  private static void methodMain(ClassWriter cw) {
    MethodVisitor mv =
        cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null);
    mv.visitCode();
    mv.visitInsn(RETURN);
    mv.visitMaxs(0, 1);
    mv.visitEnd();
  }

  private static void methodAdd(ClassWriter cw) {
    MethodVisitor mv =
        cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "add", "(Ljava/lang/Object;)V", "(TT;)V", null);
    Label[] labels = new Label[8];
    for (int i = 0; i < labels.length; i++) {
      labels[i] = new Label();
    }
    mv.visitCode();
    mv.visitLabel(labels[0]);
    mv.visitLineNumber(169, labels[0]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKEVIRTUAL, INTERNAL_NAME, "isFull", "()Z", false);
    mv.visitJumpInsn(IFEQ, labels[1]);
    mv.visitLabel(labels[2]);
    mv.visitLineNumber(170, labels[2]);
    mv.visitTypeInsn(NEW, "java/lang/IllegalStateException");
    mv.visitInsn(DUP);
    mv.visitLdcInsn("ring buffer is full");
    mv.visitMethodInsn(
        INVOKESPECIAL, "java/lang/IllegalStateException", "<init>", "(Ljava/lang/String;)V", false);
    mv.visitTypeInsn(CHECKCAST, "java/lang/Throwable");
    mv.visitInsn(ATHROW);
    mv.visitLabel(labels[1]);
    mv.visitLineNumber(173, labels[1]);
    mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, INTERNAL_NAME, "buffer", "[Ljava/lang/Object;");
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, INTERNAL_NAME, "startIndex", "I");
    mv.visitVarInsn(ISTORE, 3);
    mv.visitVarInsn(ASTORE, 2);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKEVIRTUAL, INTERNAL_NAME, "size", "()I", false);
    mv.visitVarInsn(ISTORE, 4);
    mv.visitLabel(labels[3]);
    mv.visitLineNumber(212, labels[3]);
    mv.visitVarInsn(ILOAD, 3);
    mv.visitVarInsn(ILOAD, 4);
    mv.visitInsn(IADD);
    mv.visitVarInsn(ALOAD, 2);
    mv.visitMethodInsn(INVOKEVIRTUAL, INTERNAL_NAME, "getCapacity", "()I", false);
    mv.visitInsn(IREM);
    mv.visitLabel(labels[4]);
    mv.visitVarInsn(ALOAD, 1);
    mv.visitInsn(AASTORE);
    mv.visitLabel(labels[5]);
    mv.visitLineNumber(174, labels[5]);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitInsn(DUP);
    mv.visitMethodInsn(INVOKEVIRTUAL, INTERNAL_NAME, "size", "()I", false);
    mv.visitInsn(DUP);
    mv.visitVarInsn(ISTORE, 2);
    mv.visitInsn(ICONST_1);
    mv.visitInsn(IADD);
    mv.visitMethodInsn(INVOKESPECIAL, INTERNAL_NAME, "setSize", "(I)V", false);
    mv.visitLabel(labels[6]);
    mv.visitLineNumber(175, labels[6]);
    mv.visitInsn(RETURN);
    mv.visitLabel(labels[7]);
    mv.visitLocalVariable("this_$iv", DESCRIPTOR, null, labels[3], labels[4], 2);
    mv.visitLocalVariable("$receiver$iv", "I", null, labels[3], labels[4], 3);
    mv.visitLocalVariable("n$iv", "I", null, labels[3], labels[4], 4);
    mv.visitLocalVariable("$i$f$forward", "I", null, labels[3], labels[4], 5);
    mv.visitLocalVariable("this", DESCRIPTOR, null, labels[0], labels[7], 0);
    mv.visitLocalVariable("element", "Ljava/lang/Object;", null, labels[0], labels[7], 1);
    mv.visitMaxs(3, 6);
    mv.visitEnd();
  }
}
