# Copyright (c) 2016, 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 line numbers to ensure method mappings in the map file.
-keepattributes LineNumberTable

# Keep the application entry point. Get rid of everything that is not
# reachable from there.
-keep public class classmerging.Test {
  public static void main(...);
}
-keep public class classmerging.ArrayTypeCollisionTest {
  public static void main(...);
}
-keep public class classmerging.CallGraphCycleTest {
  public static void main(...);
}
-keep public class classmerging.ClassWithNativeMethodTest {
  public static void main(...);
}
-keep public class classmerging.ConflictInGeneratedNameTest {
  public static void main(...);
}
-keep public class classmerging.ConflictingInterfaceSignaturesTest {
  public static void main(...);
}
-keep public class classmerging.ExceptionTest {
  public static void main(...);
}
-keep public class classmerging.FieldCollisionTest {
  public static void main(...);
}
-keep public class classmerging.MethodCollisionTest {
  public static void main(...);
}
-keep public class classmerging.RewritePinnedMethodTest {
  public static void main(...);
}
-keep public class classmerging.PinnedParameterTypesTest {
  public static void main(...);
}
-keep public class classmerging.PinnedParameterTypesTest$TestClass {
  public static void method(...);
}
-keep public class classmerging.PinnedArrayParameterTypesTest {
  public static void main(...);
}
-keep public class classmerging.PinnedArrayParameterTypesTest$TestClass {
  public static void method(...);
}
-keep public class classmerging.ProguardFieldMapTest {
  public static void main(...);
}
-keep public class classmerging.ProguardMethodMapTest {
  public static void main(...);
}
-keep public class classmerging.SimpleInterfaceAccessTest {
  public static void main(...);
}
-keep public class classmerging.SyntheticBridgeSignaturesTest {
  public static void main(...);
}
-keep public class classmerging.SuperCallRewritingTest {
  public static void main(...);
}
-keep public class classmerging.TemplateMethodTest {
  public static void main(...);
}

-neverclassinline @classmerging.NeverClassInline class *
-neverinline class * {
  @classmerging.NeverInline <methods>;
}
