From e0ebf9d3e507a6c67d077afc38065ed030958c1c Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Tue, 22 Oct 2019 17:53:56 +0900 Subject: [PATCH] Project.NameKey: Implement Serializable Prior to Ic46c4a357 the Project.NameKey class extended StringKey and was implicitly serializable because StringKey implements Serializable. After Ic46c4a357, Project.NameKey is no longer serializable, which causes an IllegalStateException when attempting to bind a cache that uses JavaCacheSerializer with Project.NameKey as key or value. Add back the Serializable interface and add a test to make sure it is serializable by JavaCacheSerializer. Bug: Issue 11793 Change-Id: Id465c3a4cd810de477fb86a13185ec452d5d3a40 --- java/com/google/gerrit/entities/Project.java | 5 ++++- java/com/google/gerrit/server/config/AllProjectsName.java | 2 ++ java/com/google/gerrit/server/config/AllUsersName.java | 2 ++ javatests/com/google/gerrit/server/cache/serialize/BUILD | 1 + .../server/cache/serialize/JavaCacheSerializerTest.java | 6 ++++++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/java/com/google/gerrit/entities/Project.java b/java/com/google/gerrit/entities/Project.java index 07f9bc1052..ecef87d69c 100644 --- a/java/com/google/gerrit/entities/Project.java +++ b/java/com/google/gerrit/entities/Project.java @@ -19,6 +19,7 @@ import static java.util.Objects.requireNonNull; import com.google.gerrit.extensions.client.InheritableBoolean; import com.google.gerrit.extensions.client.ProjectState; import com.google.gerrit.extensions.client.SubmitType; +import java.io.Serializable; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -46,7 +47,9 @@ public final class Project { * unlike other key types in this package. However, this is strictly an implementation detail; its * interface and semantics are otherwise analogous to the {@code @AutoValue} types. */ - public static class NameKey implements Comparable { + public static class NameKey implements Serializable, Comparable { + private static final long serialVersionUID = 1L; + /** Parse a Project.NameKey out of a string representation. */ public static NameKey parse(String str) { return nameKey(KeyUtil.decode(str)); diff --git a/java/com/google/gerrit/server/config/AllProjectsName.java b/java/com/google/gerrit/server/config/AllProjectsName.java index bf652a7087..6d5525c96f 100644 --- a/java/com/google/gerrit/server/config/AllProjectsName.java +++ b/java/com/google/gerrit/server/config/AllProjectsName.java @@ -18,6 +18,8 @@ import com.google.gerrit.entities.Project; /** Special name of the project that all projects derive from. */ public class AllProjectsName extends Project.NameKey { + private static final long serialVersionUID = 1L; + public AllProjectsName(String name) { super(name); } diff --git a/java/com/google/gerrit/server/config/AllUsersName.java b/java/com/google/gerrit/server/config/AllUsersName.java index 16ce43c88c..aa92db899d 100644 --- a/java/com/google/gerrit/server/config/AllUsersName.java +++ b/java/com/google/gerrit/server/config/AllUsersName.java @@ -18,6 +18,8 @@ import com.google.gerrit.entities.Project; /** Special name of the project in which meta data for all users is stored. */ public class AllUsersName extends Project.NameKey { + private static final long serialVersionUID = 1L; + public AllUsersName(String name) { super(name); } diff --git a/javatests/com/google/gerrit/server/cache/serialize/BUILD b/javatests/com/google/gerrit/server/cache/serialize/BUILD index 81f577e7b6..ce5f273a38 100644 --- a/javatests/com/google/gerrit/server/cache/serialize/BUILD +++ b/javatests/com/google/gerrit/server/cache/serialize/BUILD @@ -4,6 +4,7 @@ junit_tests( name = "tests", srcs = glob(["*.java"]), deps = [ + "//java/com/google/gerrit/entities", "//java/com/google/gerrit/server/cache/serialize", "//java/com/google/gerrit/server/cache/testing", "//java/com/google/gerrit/testing:gerrit-test-util", diff --git a/javatests/com/google/gerrit/server/cache/serialize/JavaCacheSerializerTest.java b/javatests/com/google/gerrit/server/cache/serialize/JavaCacheSerializerTest.java index 6596730c10..effc801c54 100644 --- a/javatests/com/google/gerrit/server/cache/serialize/JavaCacheSerializerTest.java +++ b/javatests/com/google/gerrit/server/cache/serialize/JavaCacheSerializerTest.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.cache.serialize; import static com.google.common.truth.Truth.assertThat; import com.google.auto.value.AutoValue; +import com.google.gerrit.entities.Project; import java.io.Serializable; import org.junit.Test; @@ -33,6 +34,11 @@ public class JavaCacheSerializerTest { assertRoundTrip(new AutoValue_JavaCacheSerializerTest_MyType(123, "four five six")); } + @Test + public void gerritEntities() throws Exception { + assertRoundTrip(Project.nameKey("foo")); + } + @AutoValue abstract static class MyType implements Serializable { private static final long serialVersionUID = 1L;