# 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 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.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.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(...);
}

-printmapping

# TODO(herhut): Consider supporting merging of inner-class attributes.
# -keepattributes *