Skip to content

Commit

Permalink
Use @Serial on serialVersionUID fields.
Browse files Browse the repository at this point in the history
[`@Serial`](https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/io/Serial.html) was added in Java 14, but it has only `SOURCE` retention, so it requires Java 14+ only [at _build_ time](#6549). Guava continues to support Java 8 at runtime, and it already has required a higher version (though perhaps only Java 9+?) to build.

Still, if this change causes people trouble, it is easy enough for us to include `@Serial` only in our Google-internal source or even to back out the change entirely. (Part of the purpose of this change is to identify any such trouble before we add any features that require newer versions of Java to build "for real.")

Alternatively, if this change goes well, we can consider using `@Serial` on _all_ eligible APIs.

RELNOTES=n/a
PiperOrigin-RevId: 676818238
  • Loading branch information
cpovirk authored and Google Java Core Libraries committed Feb 12, 2025
1 parent 287c701 commit 5fad9a4
Show file tree
Hide file tree
Showing 312 changed files with 874 additions and 547 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.J2ktIncompatible;
import java.io.Serial;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
Expand Down Expand Up @@ -109,15 +110,15 @@ void assertPermitted(Exception exception) {
}
}

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

private static final class UnknownElementException extends RuntimeException {
private UnknownElementException(Collection<?> expected, Object actual) {
super("Returned value '" + actual + "' not found. Remaining elements: " + expected);
}

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

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.J2ktIncompatible;
import java.io.Serial;
import java.io.Serializable;
import org.jspecify.annotations.Nullable;

Expand Down Expand Up @@ -56,5 +57,5 @@ public int compareTo(BaseComparable o) {
return s.compareTo(o.s);
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.J2ktIncompatible;
import java.io.Serial;

/**
* Simple derived class to verify that we handle generics correctly.
Expand All @@ -31,5 +32,5 @@ public DerivedComparable(String s) {
super(s);
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import com.google.common.annotations.GwtIncompatible;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import java.io.Serial;
import java.io.Serializable;
import java.util.AbstractSet;
import java.util.Collection;
Expand Down Expand Up @@ -325,5 +326,5 @@ public String toString() {
return delegate.toString();
}

private static final long serialVersionUID = 0L;
@Serial private static final long serialVersionUID = 0L;
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import com.google.common.annotations.GwtIncompatible;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import java.io.Serial;
import java.io.Serializable;
import java.util.Collection;
import java.util.Comparator;
Expand Down Expand Up @@ -253,5 +254,5 @@ public String toString() {
return delegate.toString();
}

private static final long serialVersionUID = 0L;
@Serial private static final long serialVersionUID = 0L;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.J2ktIncompatible;
import java.io.Serial;
import java.util.Set;

/**
Expand Down Expand Up @@ -51,5 +52,5 @@ public String getMessage() {
return super.getMessage() + " (source: " + source + ")";
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.J2ktIncompatible;
import java.io.Serial;
import java.util.Collections;
import java.util.Set;
import org.jspecify.annotations.Nullable;
Expand Down Expand Up @@ -80,5 +81,5 @@ public String toString() {
return "{TesterRequirements: present=" + presentFeatures + ", absent=" + absentFeatures + "}";
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.google.common.collect.testing.Helpers;
import com.google.common.collect.testing.features.CollectionFeature;
import com.google.common.testing.SerializableTester;
import java.io.Serial;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.Collections;
Expand Down Expand Up @@ -68,7 +69,7 @@ private static class BiMapPair<K, V> implements Serializable {
this.backward = original.inverse();
}

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

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.google.common.testing;

import java.io.Serial;
import java.io.Serializable;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
Expand Down Expand Up @@ -77,11 +78,11 @@ public void testObjectWhichIsEqualButChangesClass() {
}

private static class ClassWhichDoesNotImplementEquals implements Serializable {
private static final long serialVersionUID = 1L;
@Serial private static final long serialVersionUID = 1L;
}

private static class ClassWhichIsAlwaysEqualButHasDifferentHashcodes implements Serializable {
private static final long serialVersionUID = 2L;
@Serial private static final long serialVersionUID = 2L;

@SuppressWarnings("EqualsHashCode")
@Override
Expand All @@ -91,7 +92,7 @@ public boolean equals(@Nullable Object other) {
}

private static class ObjectWhichIsEqualButChangesClass implements Serializable {
private static final long serialVersionUID = 1L;
@Serial private static final long serialVersionUID = 1L;

@Override
public boolean equals(@Nullable Object other) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.google.common.testing.EqualsTester;
import com.google.common.testing.NullPointerTester;
import com.google.common.testing.SerializableTester;
import java.io.Serial;
import java.io.Serializable;
import java.util.Map;
import junit.framework.TestCase;
Expand Down Expand Up @@ -368,7 +369,7 @@ public void testConstantSerializable() {

private static class CountingSupplier implements Supplier<Integer>, Serializable {

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0;

private int value;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.google.common.testing.EqualsTester;
import com.google.common.testing.NullPointerTester;
import com.google.common.testing.SerializableTester;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
Expand Down Expand Up @@ -61,7 +62,8 @@ public boolean apply(@Nullable Integer i) {

/** Instantiable predicate with reasonable hashCode() and equals() methods. */
static class IsOdd implements Predicate<@Nullable Integer>, Serializable {
@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0x150ddL;
@GwtIncompatible @J2ktIncompatible @Serial
private static final long serialVersionUID = 0x150ddL;

@Override
public boolean apply(@Nullable Integer i) {
Expand Down Expand Up @@ -718,7 +720,7 @@ public void testIn_serialization() {

public void testIn_handlesNullPointerException() {
class CollectionThatThrowsNullPointerException<T> extends ArrayList<T> {
@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 1L;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 1L;

@Override
public boolean contains(@Nullable Object element) {
Expand All @@ -733,7 +735,7 @@ public boolean contains(@Nullable Object element) {

public void testIn_handlesClassCastException() {
class CollectionThatThrowsClassCastException<T> extends ArrayList<T> {
@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 1L;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 1L;

@Override
public boolean contains(@Nullable Object element) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.google.common.testing.ClassSanityTester;
import com.google.common.testing.EqualsTester;
import java.io.NotSerializableException;
import java.io.Serial;
import java.io.Serializable;
import java.time.Duration;
import java.util.ArrayList;
Expand Down Expand Up @@ -74,11 +75,11 @@ public Integer get() {
}

static class SerializableCountingSupplier extends CountingSupplier implements Serializable {
@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0L;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0L;
}

static class SerializableThrowingSupplier extends ThrowingSupplier implements Serializable {
@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0L;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0L;
}

static void checkMemoize(CountingSupplier countingSupplier, Supplier<Integer> memoizedSupplier) {
Expand Down
3 changes: 2 additions & 1 deletion android/guava-tests/test/com/google/common/collect/Base.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.J2ktIncompatible;
import java.io.Serial;
import java.io.Serializable;
import org.jspecify.annotations.NullUnmarked;
import org.jspecify.annotations.Nullable;
Expand Down Expand Up @@ -54,5 +55,5 @@ public int compareTo(Base o) {
return s.compareTo(o.s);
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.J2ktIncompatible;
import java.io.Serial;
import org.jspecify.annotations.NullUnmarked;

/** Simple derived class to verify that we handle generics correctly. */
Expand All @@ -29,5 +30,5 @@ public Derived(String s) {
super(s);
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
import com.google.common.collect.testing.google.TestStringMultisetGenerator;
import com.google.common.testing.SerializableTester;
import java.io.Serial;
import java.io.Serializable;
import junit.framework.Test;
import junit.framework.TestCase;
Expand Down Expand Up @@ -115,7 +116,7 @@ private static class MultisetHolder implements Serializable {
this.member = multiset;
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 1L;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 1L;
}

@J2ktIncompatible
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import com.google.common.testing.NullPointerTester;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serial;
import java.io.Serializable;
import java.util.AbstractMap;
import java.util.Collection;
Expand Down Expand Up @@ -873,7 +874,7 @@ public int hashCode() {
return value;
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 5;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 5;
}

public void testMutableValues() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapValueListGenerator;
import com.google.common.testing.NullPointerTester;
import com.google.common.testing.SerializableTester;
import java.io.Serial;
import java.io.Serializable;
import java.util.Collections;
import java.util.Comparator;
Expand Down Expand Up @@ -676,7 +677,7 @@ public int hashCode() {
return value;
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 5;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 5;
}

public void testMutableValues() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.annotations.J2ktIncompatible;
import java.io.Serial;
import java.io.Serializable;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;
Expand Down Expand Up @@ -70,5 +71,5 @@ public int hashCode() {
return value.hashCode();
}

@GwtIncompatible @J2ktIncompatible private static final long serialVersionUID = 0;
@GwtIncompatible @J2ktIncompatible @Serial private static final long serialVersionUID = 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import com.google.common.collect.testing.google.ListGenerators.CharactersOfStringGenerator;
import com.google.common.testing.NullPointerTester;
import com.google.common.testing.SerializableTester;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
Expand Down Expand Up @@ -91,7 +92,7 @@ public Iterator<Integer> iterator() {
return SOME_COLLECTION.iterator();
}

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

private static final List<Integer> SOME_LIST = Lists.newArrayList(1, 2, 3, 4);
Expand All @@ -108,7 +109,7 @@ public String apply(Number n) {
return String.valueOf(n);
}

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

@J2ktIncompatible
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static junit.framework.Assert.assertTrue;

import java.io.Serial;
import java.io.Serializable;
import java.util.Collection;
import java.util.Set;
Expand Down Expand Up @@ -154,5 +155,5 @@ public <T> T[] toArray(T[] a) {
return super.toArray(a);
}

private static final long serialVersionUID = 0;
@Serial private static final long serialVersionUID = 0;
}
Loading

0 comments on commit 5fad9a4

Please sign in to comment.