# 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>;
}

-alwaysinline class getmembers.B {
  private String toBeInlined();
}

# 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[]);
}
