blob: ff94a6212ce8d0aaeaa7fcd6e2c15229ca6e163e [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.compatproguard;
import com.android.tools.r8.NeverInline;
public class CompatKeepClassMemberNamesTest {
public static class Bar {
public int i = 42;
@NeverInline
public static Bar instance() {
throw new RuntimeException();
}
}
public static void main(String[] args) throws Exception {
String junk = args.length > 0 ? "!" : "";
// Ensure a non-instance reference to class Bar.
Bar barReference = args.length > 0 ? Bar.instance() : null;
// Reflectively construct bar and access its field while adding junk to ensure the reflection
// is not identified.
Object barObject =
Class.forName(CompatKeepClassMemberNamesTest.class.getName() + "$B" + junk + "ar")
.getDeclaredConstructor()
.newInstance();
int fieldValue = barObject.getClass().getDeclaredField(junk + "i").getInt(barObject);
// Make sure the values cannot be eliminated.
System.out.println(fieldValue);
System.out.println(barReference);
}
}