blob: e76a8e39a9447ee886cc0d8a160b0e1d6bc2fc3d [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 classmerging;
public class ConflictInGeneratedNameTest {
public static void main(String[] args) {
B obj = new B();
obj.run();
}
public static class A {
@NeverPropagateValue @NoRedundantFieldLoadElimination private String name = "A";
public A() {
print("In A.<init>()");
$r8$constructor$classmerging$ConflictInGeneratedNameTest$A();
}
private void $r8$constructor$classmerging$ConflictInGeneratedNameTest$A() {
print("In A.$r8$constructor$classmerging$ConflictInGeneratedNameTest$A()");
}
public void printState() {
print("In A.printState()");
print("A=" + name + "=" + getName());
}
// This method is not overridden.
public void foo() {
print("In A.foo()");
}
// This method is overridden.
public void bar() {
print("In A.bar()");
}
// This method is overridden and there is a PUBLIC method in B with the same name
// as the direct version of this method in B.
public void baz() {
print("In A.baz()");
}
// This method is overridden and there is a PRIVATE method in B with the same name
// as the direct version of this method in B.
public void boo() {
print("In A.boo()");
}
// There is a private method in B with the same name as this one.
@NoAccessModification
private String getName() {
return name;
}
}
public static class B extends A {
@NeverPropagateValue @NoRedundantFieldLoadElimination private String name = "B";
@NeverPropagateValue @NoRedundantFieldLoadElimination
private String name$classmerging$ConflictInGeneratedNameTest$A = "C";
public B() {
print("In B.<init>()");
print("A=" + super.name + "=" + super.getName());
print("B=" + name + "=" + getName());
print("C=" + name$classmerging$ConflictInGeneratedNameTest$A);
}
public void run() {
printState();
foo();
bar();
baz();
baz$classmerging$ConflictInGeneratedNameTest$A();
boo();
boo$classmerging$ConflictInGeneratedNameTest$A();
}
@Override
public void bar() {
print("In B.bar()");
super.bar();
}
@Override
public void baz() {
print("In B.baz()");
super.baz();
}
public void baz$classmerging$ConflictInGeneratedNameTest$A() {
print("In B.baz$classmerging$ConflictInGeneratedNameTest$A()");
}
@Override
public void boo() {
print("In B.boo()");
super.boo();
}
@NoAccessModification
private void boo$classmerging$ConflictInGeneratedNameTest$A() {
print("In B.boo$classmerging$ConflictInGeneratedNameTest$A()");
}
@NoAccessModification
private String getName() {
return name;
}
}
public static void print(String message) {
System.out.println(message);
}
}