// Copyright (c) 2017, 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 identifiernamestring;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Main {
  public static void main(String[] args) throws Exception {
    A ax = new A();
    assert ax.boo.equals(A.TYPE_B);
    // Should be renamed
    ax.bar("identifiernamestring.B");

    Class a = Class.forName(A.TYPE_A);
    Class bByA = Class.forName(B.TYPO_A);
    // A's name is kept.
    assert a.equals(bByA);

    Class b = Class.forName(ax.boo);
    Class bByB = Class.forName(B.TYPO_B);
    // As TYPO_B is not renamed, they will be different.
    assert !b.equals(bByB);

    Field foo = R.findField(B.class, "foo");
    System.out.println(foo.getName());
    Method boo = R.findMethod(B.class, "boo", new Class[] { A.class });
    System.out.println(boo.getName());
  }
}