# 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 getmembers.Main {
  public static void main(...);
}

-keep,allowobfuscation class getmembers.A {
  <methods>;
}

# This will be added to CompatProguard by default.
# We are testing whether R8 shows the same behavior.
-identifiernamestring public class java.lang.Class {
  java.lang.reflect.Field getField(java.lang.String);
  java.lang.reflect.Field getDeclaredField(java.lang.String);
  java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class[]);
  java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class[]);
}

-neverinline class * {
  @getmembers.NeverInline <methods>;
}
