|  | // 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(); | 
|  | } | 
|  | } | 
|  | } |