# 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. Get rid of everything that is not
# reachable from there.
-keep public class assumevalues4.Assumevalues {
  public static final int ASSUMED_VALUE_0;
  public static final int ASSUMED_VALUE_1;
  public static final long ASSUMED_VALUE_0L;
  public static final long ASSUMED_VALUE_1L;
  public static void main(...);
}

# Mark some methods to have known return value.
-assumevalues public class assumevalues4.Assumevalues {
  public static int method0(...) return assumevalues4.Assumevalues.ASSUMED_VALUE_1;
  public static int method1(...) return assumevalues4.Assumevalues.ASSUMED_VALUE_0;
  public static long method0L(...) return assumevalues4.Assumevalues.ASSUMED_VALUE_1L;
  public static long method1L(...) return assumevalues4.Assumevalues.ASSUMED_VALUE_0L;
}

# Allow access modification to enable minifcation.
-allowaccessmodification
