blob: e55802d206d035445dc033e9e9ce471211956563 [file] [log] [blame]
// 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.classmerging;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class NestedDefaultInterfaceMethodsTestDump {
// Generated by running ./tools/asmifier.py build/test/examplesAndroidO/classes/classmerging/-
// NestedDefaultInterfaceMethodsTest\$C.class, and changing "invoke-special B.m()" to "invoke-
// special A.m()".
public static class CDump implements Opcodes {
public static byte[] dump() {
ClassWriter cw = new ClassWriter(0);
FieldVisitor fv;
MethodVisitor mv;
AnnotationVisitor av0;
cw.visit(
V1_8,
ACC_PUBLIC + ACC_SUPER,
"classmerging/NestedDefaultInterfaceMethodsTest$C",
null,
"java/lang/Object",
new String[] {"classmerging/NestedDefaultInterfaceMethodsTest$B"});
cw.visitInnerClass(
"classmerging/NestedDefaultInterfaceMethodsTest$C",
"classmerging/NestedDefaultInterfaceMethodsTest",
"C",
ACC_PUBLIC + ACC_STATIC);
cw.visitInnerClass(
"classmerging/NestedDefaultInterfaceMethodsTest$B",
"classmerging/NestedDefaultInterfaceMethodsTest",
"B",
ACC_PUBLIC + ACC_STATIC + ACC_ABSTRACT + ACC_INTERFACE);
{
mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
mv.visitInsn(RETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "m", "()V", null, null);
mv.visitCode();
mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
mv.visitLdcInsn("In C.m()");
mv.visitMethodInsn(
INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
mv.visitVarInsn(ALOAD, 0);
// The signature "classmerging/NestedDefaultInterfaceMethodsTest$B" has been changed to
// "classmerging/NestedDefaultInterfaceMethodsTest$A".
mv.visitMethodInsn(
INVOKESPECIAL, "classmerging/NestedDefaultInterfaceMethodsTest$A", "m", "()V", true);
mv.visitInsn(RETURN);
mv.visitMaxs(2, 1);
mv.visitEnd();
}
cw.visitEnd();
return cw.toByteArray();
}
}
}