Mark Project.NameKey as immutable and thread-safe
This class can't be an AutoValue because it gets
subclassed. It's trivial enough so that we can just
mark it as immutable and thread-safe.
Change-Id: I519243838b5b4700e6aa2f28916a4b76b07382c4
diff --git a/java/com/google/gerrit/entities/Project.java b/java/com/google/gerrit/entities/Project.java
index 867b14d..1300b9d 100644
--- a/java/com/google/gerrit/entities/Project.java
+++ b/java/com/google/gerrit/entities/Project.java
@@ -16,6 +16,7 @@
import static java.util.Objects.requireNonNull;
+import com.google.errorprone.annotations.Immutable;
import com.google.gerrit.extensions.client.InheritableBoolean;
import com.google.gerrit.extensions.client.ProjectState;
import com.google.gerrit.extensions.client.SubmitType;
@@ -47,7 +48,10 @@
* <p>Because of this unusual subclassing behavior, this class is not an {@code @AutoValue},
* 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.
+ *
+ * <p>This class is immutable and thread safe.
*/
+ @Immutable
public static class NameKey implements Serializable, Comparable<NameKey> {
private static final long serialVersionUID = 1L;
@@ -72,25 +76,25 @@
@Override
public final int hashCode() {
- return get().hashCode();
+ return name.hashCode();
}
@Override
public final boolean equals(Object b) {
if (b instanceof NameKey) {
- return get().equals(((NameKey) b).get());
+ return name.equals(((NameKey) b).get());
}
return false;
}
@Override
public final int compareTo(NameKey o) {
- return get().compareTo(o.get());
+ return name.compareTo(o.get());
}
@Override
public final String toString() {
- return KeyUtil.encode(get());
+ return KeyUtil.encode(name);
}
}
diff --git a/java/com/google/gerrit/server/config/AllProjectsName.java b/java/com/google/gerrit/server/config/AllProjectsName.java
index 6d5525c..3a13a58 100644
--- a/java/com/google/gerrit/server/config/AllProjectsName.java
+++ b/java/com/google/gerrit/server/config/AllProjectsName.java
@@ -14,9 +14,15 @@
package com.google.gerrit.server.config;
+import com.google.errorprone.annotations.Immutable;
import com.google.gerrit.entities.Project;
-/** Special name of the project that all projects derive from. */
+/**
+ * Special name of the project that all projects derive from.
+ *
+ * <p>This class is immutable and thread safe.
+ */
+@Immutable
public class AllProjectsName extends Project.NameKey {
private static final long serialVersionUID = 1L;
diff --git a/java/com/google/gerrit/server/config/AllUsersName.java b/java/com/google/gerrit/server/config/AllUsersName.java
index aa92db8..393fb6b 100644
--- a/java/com/google/gerrit/server/config/AllUsersName.java
+++ b/java/com/google/gerrit/server/config/AllUsersName.java
@@ -14,9 +14,15 @@
package com.google.gerrit.server.config;
+import com.google.errorprone.annotations.Immutable;
import com.google.gerrit.entities.Project;
-/** Special name of the project in which meta data for all users is stored. */
+/**
+ * Special name of the project in which meta data for all users is stored.
+ *
+ * <p>This class is immutable and thread safe.
+ */
+@Immutable
public class AllUsersName extends Project.NameKey {
private static final long serialVersionUID = 1L;