blob: 4456498839ddb7c9f1700e6b3f7ae4bd0dd0fea9 [file] [log] [blame] [edit]
// 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 classmerging;
public class MethodCollisionTest {
public static void main(String[] args) {
B b = new B();
b.m();
D d = new D();
d.m();
// Ensure that the instantiations are not dead code eliminated.
escape(b);
escape(d);
}
@NeverInline
static void escape(Object o) {
if (System.currentTimeMillis() < 0) {
System.out.println(o);
}
}
public static class A {
// After class merging, this method will have the same signature as the method B.m,
// unless we handle the collision.
private A m() {
System.out.println("A.m");
return null;
}
public void invokeM() {
m();
}
}
public static class B extends A {
private B m() {
System.out.println("B.m");
invokeM();
return null;
}
}
public static class C {
// After class merging, this method will have the same signature as the method D.m,
// unless we handle the collision.
public C m() {
System.out.println("C.m");
return null;
}
}
public static class D extends C {
public D m() {
System.out.println("D.m");
super.m();
return null;
}
}
}