# Copyright 2019 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Contains flags that are applied only when ENABLE_DCHECK=false.

-checkdiscard @org.chromium.build.annotations.CheckDiscard class ** {
  *;
}
-checkdiscard class ** {
  @org.chromium.build.annotations.CheckDiscard *;
}

# We always expect ServiceLoader.load() calls to be resolved by R8.
-whyareyounotinlining class java.util.ServiceLoader { *** load(...); }

# This has a ServiceLoader.load() failure that we filter out in dex.py.
-checkdiscard class !cr_allowunused,kotlinx.coroutines.internal.FastServiceLoader {
  *;
}

# Remove kotlin assertions since they add a lot of string and rarely fail.
-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
  public static void check*(...);
}
