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

-keep class com.google.common.base.** {
  *;
}

-keep class com.google.common.annotations.** {
  *;
}

-keepattributes Signature

# Don't complain about usage of sun.misc.Unsafe. Guava imports this,
# but does not use it unless it exists.
# The gyp-target that uses this is guava.gyp:guava_javalib.
-dontwarn sun.misc.Unsafe
# Striped64 uses reflection to access some local fields.
-dontnote com.google.common.cache.Striped64
-dontnote com.google.common.cache.Striped64$Cell

# Keep all enum values and valueOf methods. See
# http://proguard.sourceforge.net/index.html#manual/examples.html
# for the reason for this. Also, see http://crbug.com/248037.
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

# Keep finalizer stuff from google-common used via reflection
-keepclassmembers class com.google.common.** {
  *** finalizeReferent();
}
-keepclassmembers class com.google.common.** {
  *** startFinalizer(java.lang.Class,java.lang.Object);
}
