Make toString(), hashCode(), equals() and friends final in AutoValue classes

Developers usually don't look at the classes that AutoValue generates,
but at the hand-written classes. If the hand-written classes implement
toString(), hashCode(), equals() etc, AutoValue doesn't override them.
To make this more clear to readers of the hand-written classes
ErrorProne suggests to make these methods final.

See https://errorprone.info/bugpattern/AutoValueFinalMethods

Enable this check at ERROR severity to prevent future occurrences.

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I972e8e8f9339b811c78157abef771b8c32be079c
diff --git a/java/com/google/gerrit/reviewdb/client/Account.java b/java/com/google/gerrit/reviewdb/client/Account.java
index 6366ce2..cb7e957 100644
--- a/java/com/google/gerrit/reviewdb/client/Account.java
+++ b/java/com/google/gerrit/reviewdb/client/Account.java
@@ -108,12 +108,12 @@
     }
 
     @Override
-    public int compareTo(Id o) {
+    public final int compareTo(Id o) {
       return Integer.compare(id(), o.id());
     }
 
     @Override
-    public String toString() {
+    public final String toString() {
       return Integer.toString(get());
     }
   }
diff --git a/java/com/google/gerrit/reviewdb/client/AccountGroup.java b/java/com/google/gerrit/reviewdb/client/AccountGroup.java
index 356ea94..4e01885 100644
--- a/java/com/google/gerrit/reviewdb/client/AccountGroup.java
+++ b/java/com/google/gerrit/reviewdb/client/AccountGroup.java
@@ -46,12 +46,12 @@
     }
 
     @Override
-    public int compareTo(NameKey o) {
+    public final int compareTo(NameKey o) {
       return name().compareTo(o.name());
     }
 
     @Override
-    public String toString() {
+    public final String toString() {
       return KeyUtil.encode(get());
     }
   }
@@ -97,12 +97,12 @@
     }
 
     @Override
-    public int compareTo(UUID o) {
+    public final int compareTo(UUID o) {
       return uuid().compareTo(o.uuid());
     }
 
     @Override
-    public String toString() {
+    public final String toString() {
       return KeyUtil.encode(get());
     }
   }
@@ -131,7 +131,7 @@
     }
 
     @Override
-    public String toString() {
+    public final String toString() {
       return Integer.toString(get());
     }
   }
diff --git a/java/com/google/gerrit/reviewdb/client/BranchNameKey.java b/java/com/google/gerrit/reviewdb/client/BranchNameKey.java
index bb5bfd9..c4ef4c5 100644
--- a/java/com/google/gerrit/reviewdb/client/BranchNameKey.java
+++ b/java/com/google/gerrit/reviewdb/client/BranchNameKey.java
@@ -36,14 +36,14 @@
   }
 
   @Override
-  public int compareTo(BranchNameKey o) {
+  public final int compareTo(BranchNameKey o) {
     // TODO(dborowitz): Only compares branch name in order to match old StringKey behavior.
     // Consider comparing project name first.
     return branch().compareTo(o.branch());
   }
 
   @Override
-  public String toString() {
+  public final String toString() {
     return project() + "," + KeyUtil.encode(branch());
   }
 }
diff --git a/java/com/google/gerrit/reviewdb/client/Change.java b/java/com/google/gerrit/reviewdb/client/Change.java
index b7fd134..9a3672f 100644
--- a/java/com/google/gerrit/reviewdb/client/Change.java
+++ b/java/com/google/gerrit/reviewdb/client/Change.java
@@ -243,7 +243,7 @@
     }
 
     @Override
-    public String toString() {
+    public final String toString() {
       return Integer.toString(get());
     }
   }
@@ -285,7 +285,7 @@
     }
 
     @Override
-    public String toString() {
+    public final String toString() {
       return get();
     }
   }
diff --git a/java/com/google/gerrit/reviewdb/client/PatchSet.java b/java/com/google/gerrit/reviewdb/client/PatchSet.java
index 7c0af0f..0c98993 100644
--- a/java/com/google/gerrit/reviewdb/client/PatchSet.java
+++ b/java/com/google/gerrit/reviewdb/client/PatchSet.java
@@ -129,7 +129,7 @@
     }
 
     @Override
-    public String toString() {
+    public final String toString() {
       return changeId().toString() + ',' + id();
     }
   }
diff --git a/java/com/google/gerrit/server/StarredChangesUtil.java b/java/com/google/gerrit/server/StarredChangesUtil.java
index 39bb4f1..b81e0bd 100644
--- a/java/com/google/gerrit/server/StarredChangesUtil.java
+++ b/java/com/google/gerrit/server/StarredChangesUtil.java
@@ -104,7 +104,7 @@
     public abstract String label();
 
     @Override
-    public String toString() {
+    public final String toString() {
       return accountId() + SEPARATOR + label();
     }
   }
diff --git a/java/com/google/gerrit/server/account/ProjectWatches.java b/java/com/google/gerrit/server/account/ProjectWatches.java
index 594453b..d052fcf 100644
--- a/java/com/google/gerrit/server/account/ProjectWatches.java
+++ b/java/com/google/gerrit/server/account/ProjectWatches.java
@@ -263,7 +263,7 @@
     public abstract ImmutableSet<NotifyType> notifyTypes();
 
     @Override
-    public String toString() {
+    public final String toString() {
       List<NotifyType> notifyTypes = new ArrayList<>(notifyTypes());
       StringBuilder notifyValue = new StringBuilder();
       notifyValue.append(firstNonNull(filter(), FILTER_ALL)).append(" [");
diff --git a/java/com/google/gerrit/server/account/externalids/ExternalId.java b/java/com/google/gerrit/server/account/externalids/ExternalId.java
index 6583a7e..8ae20f1 100644
--- a/java/com/google/gerrit/server/account/externalids/ExternalId.java
+++ b/java/com/google/gerrit/server/account/externalids/ExternalId.java
@@ -193,7 +193,7 @@
     }
 
     @Override
-    public String toString() {
+    public final String toString() {
       return get();
     }
 
@@ -441,7 +441,7 @@
    * that was loaded from Git can be equal with an external ID that was created from code.
    */
   @Override
-  public boolean equals(Object obj) {
+  public final boolean equals(Object obj) {
     if (!(obj instanceof ExternalId)) {
       return false;
     }
@@ -453,7 +453,7 @@
   }
 
   @Override
-  public int hashCode() {
+  public final int hashCode() {
     return Objects.hash(key(), accountId(), email(), password());
   }
 
@@ -471,7 +471,7 @@
    * </pre>
    */
   @Override
-  public String toString() {
+  public final String toString() {
     Config c = new Config();
     writeToConfig(c);
     return c.toText();
diff --git a/java/com/google/gerrit/server/change/ChangeTriplet.java b/java/com/google/gerrit/server/change/ChangeTriplet.java
index f8b11b1..1a347a4 100644
--- a/java/com/google/gerrit/server/change/ChangeTriplet.java
+++ b/java/com/google/gerrit/server/change/ChangeTriplet.java
@@ -65,7 +65,7 @@
   public abstract Change.Key id();
 
   @Override
-  public String toString() {
+  public final String toString() {
     return format(branch(), id());
   }
 }
diff --git a/java/com/google/gerrit/server/config/ConfigKey.java b/java/com/google/gerrit/server/config/ConfigKey.java
index aa4ffb0..5cd2054 100644
--- a/java/com/google/gerrit/server/config/ConfigKey.java
+++ b/java/com/google/gerrit/server/config/ConfigKey.java
@@ -34,7 +34,7 @@
   }
 
   @Override
-  public String toString() {
+  public final String toString() {
     StringBuilder sb = new StringBuilder();
     sb.append(section()).append(".");
     if (subsection() != null) {
diff --git a/java/com/google/gerrit/server/config/ScheduleConfig.java b/java/com/google/gerrit/server/config/ScheduleConfig.java
index 963107a2..f07715b 100644
--- a/java/com/google/gerrit/server/config/ScheduleConfig.java
+++ b/java/com/google/gerrit/server/config/ScheduleConfig.java
@@ -194,7 +194,7 @@
   }
 
   @Override
-  public String toString() {
+  public final String toString() {
     StringBuilder b = new StringBuilder();
     b.append(formatValue(keyInterval()));
     b.append(", ");
diff --git a/java/com/google/gerrit/server/permissions/SectionSortCache.java b/java/com/google/gerrit/server/permissions/SectionSortCache.java
index e5392b0..814a8d2 100644
--- a/java/com/google/gerrit/server/permissions/SectionSortCache.java
+++ b/java/com/google/gerrit/server/permissions/SectionSortCache.java
@@ -141,7 +141,7 @@
     }
 
     @Override
-    public int hashCode() {
+    public final int hashCode() {
       return cachedHashCode();
     }
   }
diff --git a/java/com/google/gerrit/server/restapi/change/RelatedChangesSorter.java b/java/com/google/gerrit/server/restapi/change/RelatedChangesSorter.java
index 987da56..f28c547 100644
--- a/java/com/google/gerrit/server/restapi/change/RelatedChangesSorter.java
+++ b/java/com/google/gerrit/server/restapi/change/RelatedChangesSorter.java
@@ -259,12 +259,12 @@
     }
 
     @Override
-    public int hashCode() {
+    public final int hashCode() {
       return Objects.hash(patchSet().id(), commit());
     }
 
     @Override
-    public boolean equals(Object obj) {
+    public final boolean equals(Object obj) {
       if (!(obj instanceof PatchSetData)) {
         return false;
       }
diff --git a/java/com/google/gerrit/server/util/LabelVote.java b/java/com/google/gerrit/server/util/LabelVote.java
index a840e87..a03c1f2 100644
--- a/java/com/google/gerrit/server/util/LabelVote.java
+++ b/java/com/google/gerrit/server/util/LabelVote.java
@@ -85,7 +85,7 @@
   }
 
   @Override
-  public String toString() {
+  public final String toString() {
     return format();
   }
 }
diff --git a/tools/BUILD b/tools/BUILD
index 15a3185..89ce558 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -32,6 +32,7 @@
     javacopts = [
         "-XepDisableWarningsInGeneratedCode",
         "-Xep:AmbiguousMethodReference:ERROR",
+        "-Xep:AutoValueFinalMethods:ERROR",
         "-Xep:BadAnnotationImplementation:ERROR",
         "-Xep:BadComparable:ERROR",
         "-Xep:BoxedPrimitiveConstructor:ERROR",