# 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.

# Keep the application entry point.
-keep public class atomicfieldupdater.Main {
  public static void main(...);
}

-keep,allowobfuscation class atomicfieldupdater.A

-dontshrink

# This will be added to CompatProguard by default.
# We are testing whether R8 shows the same behavior.
-identifiernamestring public class java.util.concurrent.atomic.AtomicIntegerFieldUpdater {
  public static java.util.concurrent.atomic.AtomicIntegerFieldUpdater
      newUpdater(java.lang.Class, java.lang.String);
}
-identifiernamestring public class java.util.concurrent.atomic.AtomicLongFieldUpdater {
  public static java.util.concurrent.atomic.AtomicLongFieldUpdater
      newUpdater(java.lang.Class, java.lang.String);
}
-identifiernamestring public class java.util.concurrent.atomic.AtomicReferenceFieldUpdater {
  public static java.util.concurrent.atomic.AtomicReferenceFieldUpdater
      newUpdater(java.lang.Class, java.lang.Class, java.lang.String);
}