// 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.naming.overloadaggressively;

import java.util.Random;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;

public class FieldUpdater {
  @SuppressWarnings("unchecked")
  public static void main(String[] args) throws Exception {
    A a = new A();
    B b = new B();
    AtomicReferenceFieldUpdater f3Updater =
        AtomicReferenceFieldUpdater.newUpdater(A.class, B.class, "f3");
    f3Updater.set(a, b);
    AtomicReferenceFieldUpdater f2Updater =
        AtomicReferenceFieldUpdater.newUpdater(A.class, Object.class, "f2");
    f2Updater.set(a, b);
    assert a.f2 instanceof B;
    assert a.f2 == a.f3;
    ((B) a.f2).f2 = a;
    assert b.f2 instanceof A;
    assert ((A) b.f2).f2 == b;

    Random random = new Random();
    int next = random.nextInt();
    AtomicIntegerFieldUpdater f1Updater =
        AtomicIntegerFieldUpdater.newUpdater(A.class, "f1");
    f1Updater.set(a, next);
    B viaF3 = a.f3;
    viaF3.f1 = next;
    int diff = viaF3.f1 - a.f1;
    System.out.println("diff: " + diff);
  }
}
