blob: 035cf4d8562d0bb45c4b666540c045738f32cb7b [file] [log] [blame]
// Copyright (c) 2019, 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.naming.b139991218;
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 Main implements Opcodes {
// Generated from the following kotlin code:
// private var COUNT = 11
//
// private fun next() = "${COUNT++}"
//
// data class Alpha(val id: String = next())
//
// fun <T> consume(t: T, l: (t: T) -> String) = l(t)
//
// fun main(args: Array<String>) {
// test({ it.id }, Alpha()) <-- This is Lambda1
// test({ it.id }, Alpha()) <-- This is Lambda2
// }
//
// private fun <T> test(l : (T) -> String, t : T) {
// println(l(t))
// }
public static byte[] dump() {
ClassWriter classWriter = new ClassWriter(0);
FieldVisitor fieldVisitor;
MethodVisitor methodVisitor;
AnnotationVisitor annotationVisitor0;
classWriter.visit(
V1_8,
ACC_PUBLIC | ACC_FINAL | ACC_SUPER,
"com/android/tools/r8/naming/b139991218/Main",
null,
"java/lang/Object",
null);
classWriter.visitSource(
"main.kt",
"SMAP\n"
+ "main.kt\n"
+ "Kotlin\n"
+ "*S Kotlin\n"
+ "*F\n"
+ "+ 1 main.kt\n"
+ "com/android/tools/r8/naming/b139991218/Main\n"
+ "*L\n"
+ "1#1,25:1\n"
+ "*E\n");
{
annotationVisitor0 = classWriter.visitAnnotation("Lkotlin/Metadata;", true);
annotationVisitor0.visit("mv", new int[] {1, 1, 13});
annotationVisitor0.visit("bv", new int[] {1, 0, 3});
annotationVisitor0.visit("k", new Integer(2));
{
AnnotationVisitor annotationVisitor1 = annotationVisitor0.visitArray("d1");
annotationVisitor1.visit(
null,
"\u0000*\n"
+ "\u0000\n"
+ "\u0002\u0010\u0008\n"
+ "\u0000\n"
+ "\u0002\u0010\u000e\n"
+ "\u0002\u0008\u0003\n"
+ "\u0002\u0018\u0002\n"
+ "\u0002\u0018\u0002\n"
+ "\u0002\u0008\u0003\n"
+ "\u0002\u0010\u0002\n"
+ "\u0000\n"
+ "\u0002\u0010\u0011\n"
+ "\u0002\u0008\u0004\u001a<\u0010\u0002\u001a\u00020\u0003\"\u0004\u0008\u0000\u0010\u00042\u0006\u0010\u0005\u001a\u0002H\u00042!\u0010\u0006\u001a\u001d\u0012\u0013\u0012\u0011H\u0004\u00a2\u0006\u000c\u0008\u0008\u0012\u0008\u0008\u0009\u0012\u0004\u0008\u0008(\u0005\u0012\u0004\u0012\u00020\u00030\u0007\u00a2\u0006\u0002\u0010\n"
+ "\u001a\u0019\u0010\u000b\u001a\u00020\u000c2\u000c\u0010\r"
+ "\u001a\u0008\u0012\u0004\u0012\u00020\u00030\u000e\u00a2\u0006\u0002\u0010\u000f\u001a\u0008\u0010\u0010\u001a\u00020\u0003H\u0002\u001a/\u0010\u0011\u001a\u00020\u000c\"\u0004\u0008\u0000\u0010\u00042\u0012\u0010\u0006\u001a\u000e\u0012\u0004\u0012\u0002H\u0004\u0012\u0004\u0012\u00020\u00030\u00072\u0006\u0010\u0005\u001a\u0002H\u0004H\u0002\u00a2\u0006\u0002\u0010\u0012\"\u000e\u0010\u0000\u001a\u00020\u0001X\u0082\u000e\u00a2\u0006\u0002\n"
+ "\u0000");
annotationVisitor1.visitEnd();
}
{
AnnotationVisitor annotationVisitor1 = annotationVisitor0.visitArray("d2");
annotationVisitor1.visit(null, "COUNT");
annotationVisitor1.visit(null, "");
annotationVisitor1.visit(null, "consume");
annotationVisitor1.visit(null, "");
annotationVisitor1.visit(null, "T");
annotationVisitor1.visit(null, "t");
annotationVisitor1.visit(null, "l");
annotationVisitor1.visit(null, "Lkotlin/Function1;");
annotationVisitor1.visit(null, "Lkotlin/ParameterName;");
annotationVisitor1.visit(null, "name");
annotationVisitor1.visit(
null, "(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/String;");
annotationVisitor1.visit(null, "main");
annotationVisitor1.visit(null, "");
annotationVisitor1.visit(null, "args");
annotationVisitor1.visit(null, "");
annotationVisitor1.visit(null, "([Ljava/lang/String;)V");
annotationVisitor1.visit(null, "next");
annotationVisitor1.visit(null, "test");
annotationVisitor1.visit(null, "(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V");
annotationVisitor1.visitEnd();
}
annotationVisitor0.visitEnd();
}
classWriter.visitInnerClass(
"com/android/tools/r8/naming/b139991218/Lambda1", null, null, ACC_FINAL | ACC_STATIC);
classWriter.visitInnerClass(
"com/android/tools/r8/naming/b139991218/Lambda2", null, null, ACC_FINAL | ACC_STATIC);
{
fieldVisitor = classWriter.visitField(ACC_PRIVATE | ACC_STATIC, "COUNT", "I", null, null);
fieldVisitor.visitEnd();
}
{
methodVisitor =
classWriter.visitMethod(
ACC_PRIVATE | ACC_FINAL | ACC_STATIC, "next", "()Ljava/lang/String;", null, null);
methodVisitor.visitCode();
Label label0 = new Label();
methodVisitor.visitLabel(label0);
methodVisitor.visitLineNumber(9, label0);
methodVisitor.visitFieldInsn(
GETSTATIC, "com/android/tools/r8/naming/b139991218/Main", "COUNT", "I");
methodVisitor.visitInsn(DUP);
methodVisitor.visitVarInsn(ISTORE, 0);
methodVisitor.visitInsn(ICONST_1);
methodVisitor.visitInsn(IADD);
methodVisitor.visitFieldInsn(
PUTSTATIC, "com/android/tools/r8/naming/b139991218/Main", "COUNT", "I");
methodVisitor.visitVarInsn(ILOAD, 0);
methodVisitor.visitMethodInsn(
INVOKESTATIC, "java/lang/String", "valueOf", "(I)Ljava/lang/String;", false);
methodVisitor.visitInsn(ARETURN);
methodVisitor.visitMaxs(2, 1);
methodVisitor.visitEnd();
}
{
methodVisitor =
classWriter.visitMethod(
ACC_PUBLIC | ACC_FINAL | ACC_STATIC,
"consume",
"(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/String;",
"<T:Ljava/lang/Object;>(TT;Lkotlin/jvm/functions/Function1<-TT;Ljava/lang/String;>;)Ljava/lang/String;",
null);
{
annotationVisitor0 =
methodVisitor.visitAnnotation("Lorg/jetbrains/annotations/NotNull;", false);
annotationVisitor0.visitEnd();
}
methodVisitor.visitAnnotableParameterCount(2, false);
{
annotationVisitor0 =
methodVisitor.visitParameterAnnotation(1, "Lorg/jetbrains/annotations/NotNull;", false);
annotationVisitor0.visitEnd();
}
methodVisitor.visitCode();
Label label0 = new Label();
methodVisitor.visitLabel(label0);
methodVisitor.visitVarInsn(ALOAD, 1);
methodVisitor.visitLdcInsn("l");
methodVisitor.visitMethodInsn(
INVOKESTATIC,
"kotlin/jvm/internal/Intrinsics",
"checkParameterIsNotNull",
"(Ljava/lang/Object;Ljava/lang/String;)V",
false);
Label label1 = new Label();
methodVisitor.visitLabel(label1);
methodVisitor.visitLineNumber(13, label1);
methodVisitor.visitVarInsn(ALOAD, 1);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitMethodInsn(
INVOKEINTERFACE,
"kotlin/jvm/functions/Function1",
"invoke",
"(Ljava/lang/Object;)Ljava/lang/Object;",
true);
methodVisitor.visitTypeInsn(CHECKCAST, "java/lang/String");
methodVisitor.visitInsn(ARETURN);
Label label2 = new Label();
methodVisitor.visitLabel(label2);
methodVisitor.visitLocalVariable("t", "Ljava/lang/Object;", null, label0, label2, 0);
methodVisitor.visitLocalVariable(
"l", "Lkotlin/jvm/functions/Function1;", null, label0, label2, 1);
methodVisitor.visitMaxs(2, 2);
methodVisitor.visitEnd();
}
{
methodVisitor =
classWriter.visitMethod(
ACC_PUBLIC | ACC_FINAL | ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null);
methodVisitor.visitAnnotableParameterCount(1, false);
{
annotationVisitor0 =
methodVisitor.visitParameterAnnotation(0, "Lorg/jetbrains/annotations/NotNull;", false);
annotationVisitor0.visitEnd();
}
methodVisitor.visitCode();
Label label0 = new Label();
methodVisitor.visitLabel(label0);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitLdcInsn("args");
methodVisitor.visitMethodInsn(
INVOKESTATIC,
"kotlin/jvm/internal/Intrinsics",
"checkParameterIsNotNull",
"(Ljava/lang/Object;Ljava/lang/String;)V",
false);
Label label1 = new Label();
methodVisitor.visitLabel(label1);
methodVisitor.visitLineNumber(16, label1);
methodVisitor.visitFieldInsn(
GETSTATIC,
"com/android/tools/r8/naming/b139991218/Lambda1",
"INSTANCE",
"Lcom/android/tools/r8/naming/b139991218/Lambda1;");
methodVisitor.visitTypeInsn(CHECKCAST, "kotlin/jvm/functions/Function1");
methodVisitor.visitTypeInsn(NEW, "com/android/tools/r8/naming/b139991218/Alpha");
methodVisitor.visitInsn(DUP);
methodVisitor.visitInsn(ACONST_NULL);
methodVisitor.visitInsn(ICONST_1);
methodVisitor.visitInsn(ACONST_NULL);
methodVisitor.visitMethodInsn(
INVOKESPECIAL,
"com/android/tools/r8/naming/b139991218/Alpha",
"<init>",
"(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V",
false);
methodVisitor.visitMethodInsn(
INVOKESTATIC,
"com/android/tools/r8/naming/b139991218/Main",
"test",
"(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V",
false);
Label label2 = new Label();
methodVisitor.visitLabel(label2);
methodVisitor.visitLineNumber(17, label2);
methodVisitor.visitFieldInsn(
GETSTATIC,
"com/android/tools/r8/naming/b139991218/Lambda2",
"INSTANCE",
"Lcom/android/tools/r8/naming/b139991218/Lambda2;");
methodVisitor.visitTypeInsn(CHECKCAST, "kotlin/jvm/functions/Function1");
methodVisitor.visitTypeInsn(NEW, "com/android/tools/r8/naming/b139991218/Alpha");
methodVisitor.visitInsn(DUP);
methodVisitor.visitInsn(ACONST_NULL);
methodVisitor.visitInsn(ICONST_1);
methodVisitor.visitInsn(ACONST_NULL);
methodVisitor.visitMethodInsn(
INVOKESPECIAL,
"com/android/tools/r8/naming/b139991218/Alpha",
"<init>",
"(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V",
false);
methodVisitor.visitMethodInsn(
INVOKESTATIC,
"com/android/tools/r8/naming/b139991218/Main",
"test",
"(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V",
false);
Label label3 = new Label();
methodVisitor.visitLabel(label3);
methodVisitor.visitLineNumber(18, label3);
methodVisitor.visitInsn(RETURN);
Label label4 = new Label();
methodVisitor.visitLabel(label4);
methodVisitor.visitLocalVariable("args", "[Ljava/lang/String;", null, label0, label4, 0);
methodVisitor.visitMaxs(6, 1);
methodVisitor.visitEnd();
}
{
methodVisitor =
classWriter.visitMethod(
ACC_PRIVATE | ACC_FINAL | ACC_STATIC,
"test",
"(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V",
"<T:Ljava/lang/Object;>(Lkotlin/jvm/functions/Function1<-TT;Ljava/lang/String;>;TT;)V",
null);
methodVisitor.visitCode();
Label label0 = new Label();
methodVisitor.visitLabel(label0);
methodVisitor.visitLineNumber(21, label0);
methodVisitor.visitVarInsn(ALOAD, 0);
methodVisitor.visitVarInsn(ALOAD, 1);
methodVisitor.visitMethodInsn(
INVOKEINTERFACE,
"kotlin/jvm/functions/Function1",
"invoke",
"(Ljava/lang/Object;)Ljava/lang/Object;",
true);
methodVisitor.visitVarInsn(ASTORE, 2);
methodVisitor.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
methodVisitor.visitVarInsn(ALOAD, 2);
methodVisitor.visitMethodInsn(
INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/Object;)V", false);
Label label1 = new Label();
methodVisitor.visitLabel(label1);
methodVisitor.visitLineNumber(22, label1);
methodVisitor.visitInsn(RETURN);
Label label2 = new Label();
methodVisitor.visitLabel(label2);
methodVisitor.visitLocalVariable(
"l", "Lkotlin/jvm/functions/Function1;", null, label0, label2, 0);
methodVisitor.visitLocalVariable("t", "Ljava/lang/Object;", null, label0, label2, 1);
methodVisitor.visitMaxs(2, 3);
methodVisitor.visitEnd();
}
{
methodVisitor = classWriter.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
methodVisitor.visitCode();
Label label0 = new Label();
methodVisitor.visitLabel(label0);
methodVisitor.visitLineNumber(7, label0);
methodVisitor.visitIntInsn(BIPUSH, 11);
methodVisitor.visitFieldInsn(
PUTSTATIC, "com/android/tools/r8/naming/b139991218/Main", "COUNT", "I");
methodVisitor.visitInsn(RETURN);
methodVisitor.visitMaxs(1, 0);
methodVisitor.visitEnd();
}
{
methodVisitor =
classWriter.visitMethod(
ACC_PUBLIC | ACC_FINAL | ACC_STATIC | ACC_SYNTHETIC,
"access$next",
"()Ljava/lang/String;",
null,
null);
{
annotationVisitor0 =
methodVisitor.visitAnnotation("Lorg/jetbrains/annotations/NotNull;", false);
annotationVisitor0.visitEnd();
}
methodVisitor.visitCode();
Label label0 = new Label();
methodVisitor.visitLabel(label0);
methodVisitor.visitLineNumber(1, label0);
methodVisitor.visitMethodInsn(
INVOKESTATIC,
"com/android/tools/r8/naming/b139991218/Main",
"next",
"()Ljava/lang/String;",
false);
methodVisitor.visitInsn(ARETURN);
methodVisitor.visitMaxs(1, 0);
methodVisitor.visitEnd();
}
classWriter.visitEnd();
return classWriter.toByteArray();
}
}