Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions android/guava-tests/test/com/google/common/base/EnumsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ public void testGetIfPresent_whenNoMatchingConstant() {


@J2ktIncompatible
@GwtIncompatible // weak references
@AndroidIncompatible // depends on details of GC and classloading
public void testGetIfPresent_doesNotPreventClassUnloading() throws Exception {
WeakReference<?> shadowLoaderReference = doTestClassUnloading();
Expand All @@ -95,6 +96,7 @@ public void testGetIfPresent_doesNotPreventClassUnloading() throws Exception {
// (and therefore its ClassLoader) from being unloaded, then this WeakReference will never be
// cleared.
@J2ktIncompatible
@GwtIncompatible // weak references
private WeakReference<?> doTestClassUnloading() throws Exception {
URLClassLoader shadowLoader = new URLClassLoader(getClassPathUrls(), null);
@SuppressWarnings("unchecked")
Expand All @@ -115,6 +117,7 @@ private WeakReference<?> doTestClassUnloading() throws Exception {
return new WeakReference<>(shadowLoader);
}

@GwtIncompatible // stringConverter
public void testStringConverter_convert() {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
assertEquals(TestEnum.CHEETO, converter.convert("CHEETO"));
Expand All @@ -124,11 +127,13 @@ public void testStringConverter_convert() {
assertNull(converter.reverse().convert(null));
}

@GwtIncompatible // stringConverter
public void testStringConverter_convertError() {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
assertThrows(IllegalArgumentException.class, () -> converter.convert("xxx"));
}

@GwtIncompatible // stringConverter
public void testStringConverter_reverse() {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
assertEquals("CHEETO", converter.reverse().convert(TestEnum.CHEETO));
Expand All @@ -137,30 +142,35 @@ public void testStringConverter_reverse() {
}

@J2ktIncompatible
@GwtIncompatible // stringConverter
public void testStringConverter_nullPointerTester() throws Exception {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
NullPointerTester tester = new NullPointerTester();
tester.testAllPublicInstanceMethods(converter);
}

@GwtIncompatible // stringConverter
public void testStringConverter_nullConversions() {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
assertNull(converter.convert(null));
assertNull(converter.reverse().convert(null));
}

@J2ktIncompatible
@GwtIncompatible // Class.getName()
public void testStringConverter_toString() {
assertEquals(
"Enums.stringConverter(com.google.common.base.EnumsTest$TestEnum.class)",
Enums.stringConverter(TestEnum.class).toString());
}

@GwtIncompatible // stringConverter
public void testStringConverter_serialization() {
SerializableTester.reserializeAndAssert(Enums.stringConverter(TestEnum.class));
}

@J2ktIncompatible
@GwtIncompatible // NullPointerTester
public void testNullPointerExceptions() {
NullPointerTester tester = new NullPointerTester();
tester.testAllPublicStaticMethods(Enums.class);
Expand All @@ -176,6 +186,7 @@ private enum AnEnum {
}

@J2ktIncompatible
@GwtIncompatible // reflection
public void testGetField() {
Field foo = Enums.getField(AnEnum.FOO);
assertEquals("FOO", foo.getName());
Expand All @@ -187,6 +198,7 @@ public void testGetField() {
}

@J2ktIncompatible
@GwtIncompatible // Class.getClassLoader()
private URL[] getClassPathUrls() {
ClassLoader classLoader = getClass().getClassLoader();
return classLoader instanceof URLClassLoader
Expand All @@ -200,6 +212,7 @@ private URL[] getClassPathUrls() {
*/
// TODO(b/65488446): Make this a public API.
@J2ktIncompatible
@GwtIncompatible
private static ImmutableList<URL> parseJavaClassPath() {
ImmutableList.Builder<URL> urls = ImmutableList.builder();
for (String entry : Splitter.on(PATH_SEPARATOR.value()).split(JAVA_CLASS_PATH.value())) {
Expand Down
8 changes: 7 additions & 1 deletion android/guava/src/com/google/common/base/Enums.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ private Enums() {}
*
* @since 12.0
*/
@GwtIncompatible // reflection
public static Field getField(Enum<?> enumValue) {
Class<?>
clazz = enumValue.getDeclaringClass();
Expand All @@ -70,9 +71,11 @@ public static <T extends Enum<T>> Optional<T> getIfPresent(Class<T> enumClass, S
return Platform.getEnumIfPresent(enumClass, value);
}

@GwtIncompatible // java.lang.ref.WeakReference
private static final Map<Class<? extends Enum<?>>, Map<String, WeakReference<? extends Enum<?>>>>
enumConstantCache = new WeakHashMap<>();

@GwtIncompatible // java.lang.ref.WeakReference
private static <T extends Enum<T>> Map<String, WeakReference<? extends Enum<?>>> populateCache(
Class<T> enumClass) {
Map<String, WeakReference<? extends Enum<?>>> result = new HashMap<>();
Expand All @@ -83,6 +86,7 @@ private static <T extends Enum<T>> Map<String, WeakReference<? extends Enum<?>>>
return result;
}

@GwtIncompatible // java.lang.ref.WeakReference
static <T extends Enum<T>> Map<String, WeakReference<? extends Enum<?>>> getEnumConstants(
Class<T> enumClass) {
synchronized (enumConstantCache) {
Expand All @@ -102,10 +106,12 @@ static <T extends Enum<T>> Map<String, WeakReference<? extends Enum<?>>> getEnum
*
* @since 16.0
*/
@GwtIncompatible
public static <T extends Enum<T>> Converter<String, T> stringConverter(Class<T> enumClass) {
return new StringConverter<>(enumClass);
}

@GwtIncompatible
private static final class StringConverter<T extends Enum<T>> extends Converter<String, T>
implements Serializable {

Expand Down Expand Up @@ -144,6 +150,6 @@ public String toString() {
return "Enums.stringConverter(" + enumClass.getName() + ".class)";
}

@J2ktIncompatible private static final long serialVersionUID = 0L;
@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0L;
}
}
13 changes: 13 additions & 0 deletions guava-tests/test/com/google/common/base/EnumsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ public void testGetIfPresent_whenNoMatchingConstant() {


@J2ktIncompatible
@GwtIncompatible // weak references
@AndroidIncompatible // depends on details of GC and classloading
public void testGetIfPresent_doesNotPreventClassUnloading() throws Exception {
WeakReference<?> shadowLoaderReference = doTestClassUnloading();
Expand All @@ -95,6 +96,7 @@ public void testGetIfPresent_doesNotPreventClassUnloading() throws Exception {
// (and therefore its ClassLoader) from being unloaded, then this WeakReference will never be
// cleared.
@J2ktIncompatible
@GwtIncompatible // weak references
private WeakReference<?> doTestClassUnloading() throws Exception {
URLClassLoader shadowLoader = new URLClassLoader(getClassPathUrls(), null);
@SuppressWarnings("unchecked")
Expand All @@ -115,6 +117,7 @@ private WeakReference<?> doTestClassUnloading() throws Exception {
return new WeakReference<>(shadowLoader);
}

@GwtIncompatible // stringConverter
public void testStringConverter_convert() {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
assertEquals(TestEnum.CHEETO, converter.convert("CHEETO"));
Expand All @@ -124,11 +127,13 @@ public void testStringConverter_convert() {
assertNull(converter.reverse().convert(null));
}

@GwtIncompatible // stringConverter
public void testStringConverter_convertError() {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
assertThrows(IllegalArgumentException.class, () -> converter.convert("xxx"));
}

@GwtIncompatible // stringConverter
public void testStringConverter_reverse() {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
assertEquals("CHEETO", converter.reverse().convert(TestEnum.CHEETO));
Expand All @@ -137,30 +142,35 @@ public void testStringConverter_reverse() {
}

@J2ktIncompatible
@GwtIncompatible // stringConverter
public void testStringConverter_nullPointerTester() throws Exception {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
NullPointerTester tester = new NullPointerTester();
tester.testAllPublicInstanceMethods(converter);
}

@GwtIncompatible // stringConverter
public void testStringConverter_nullConversions() {
Converter<String, TestEnum> converter = Enums.stringConverter(TestEnum.class);
assertNull(converter.convert(null));
assertNull(converter.reverse().convert(null));
}

@J2ktIncompatible
@GwtIncompatible // Class.getName()
public void testStringConverter_toString() {
assertEquals(
"Enums.stringConverter(com.google.common.base.EnumsTest$TestEnum.class)",
Enums.stringConverter(TestEnum.class).toString());
}

@GwtIncompatible // stringConverter
public void testStringConverter_serialization() {
SerializableTester.reserializeAndAssert(Enums.stringConverter(TestEnum.class));
}

@J2ktIncompatible
@GwtIncompatible // NullPointerTester
public void testNullPointerExceptions() {
NullPointerTester tester = new NullPointerTester();
tester.testAllPublicStaticMethods(Enums.class);
Expand All @@ -176,6 +186,7 @@ private enum AnEnum {
}

@J2ktIncompatible
@GwtIncompatible // reflection
public void testGetField() {
Field foo = Enums.getField(AnEnum.FOO);
assertEquals("FOO", foo.getName());
Expand All @@ -187,6 +198,7 @@ public void testGetField() {
}

@J2ktIncompatible
@GwtIncompatible // Class.getClassLoader()
private URL[] getClassPathUrls() {
ClassLoader classLoader = getClass().getClassLoader();
return classLoader instanceof URLClassLoader
Expand All @@ -200,6 +212,7 @@ private URL[] getClassPathUrls() {
*/
// TODO(b/65488446): Make this a public API.
@J2ktIncompatible
@GwtIncompatible
private static ImmutableList<URL> parseJavaClassPath() {
ImmutableList.Builder<URL> urls = ImmutableList.builder();
for (String entry : Splitter.on(PATH_SEPARATOR.value()).split(JAVA_CLASS_PATH.value())) {
Expand Down
8 changes: 7 additions & 1 deletion guava/src/com/google/common/base/Enums.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ private Enums() {}
*
* @since 12.0
*/
@GwtIncompatible // reflection
public static Field getField(Enum<?> enumValue) {
Class<?>
clazz = enumValue.getDeclaringClass();
Expand All @@ -70,9 +71,11 @@ public static <T extends Enum<T>> Optional<T> getIfPresent(Class<T> enumClass, S
return Platform.getEnumIfPresent(enumClass, value);
}

@GwtIncompatible // java.lang.ref.WeakReference
private static final Map<Class<? extends Enum<?>>, Map<String, WeakReference<? extends Enum<?>>>>
enumConstantCache = new WeakHashMap<>();

@GwtIncompatible // java.lang.ref.WeakReference
private static <T extends Enum<T>> Map<String, WeakReference<? extends Enum<?>>> populateCache(
Class<T> enumClass) {
Map<String, WeakReference<? extends Enum<?>>> result = new HashMap<>();
Expand All @@ -83,6 +86,7 @@ private static <T extends Enum<T>> Map<String, WeakReference<? extends Enum<?>>>
return result;
}

@GwtIncompatible // java.lang.ref.WeakReference
static <T extends Enum<T>> Map<String, WeakReference<? extends Enum<?>>> getEnumConstants(
Class<T> enumClass) {
synchronized (enumConstantCache) {
Expand All @@ -102,10 +106,12 @@ static <T extends Enum<T>> Map<String, WeakReference<? extends Enum<?>>> getEnum
*
* @since 16.0
*/
@GwtIncompatible
public static <T extends Enum<T>> Converter<String, T> stringConverter(Class<T> enumClass) {
return new StringConverter<>(enumClass);
}

@GwtIncompatible
private static final class StringConverter<T extends Enum<T>> extends Converter<String, T>
implements Serializable {

Expand Down Expand Up @@ -144,6 +150,6 @@ public String toString() {
return "Enums.stringConverter(" + enumClass.getName() + ".class)";
}

@J2ktIncompatible private static final long serialVersionUID = 0L;
@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0L;
}
}
Loading