Merge "Make CHANGE_ID_COUNTER final"
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeReportFormatter.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeReportFormatter.java
index 6b1fd85..3f3e2dd 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeReportFormatter.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeReportFormatter.java
@@ -14,68 +14,72 @@
 
 package com.google.gerrit.server.git;
 
+import com.google.auto.value.AutoValue;
+import com.google.gerrit.common.Nullable;
 import com.google.gerrit.reviewdb.client.Change;
 
 public interface ChangeReportFormatter {
-  public static class Input {
-    private final Change change;
-    private String subject;
-    private Boolean draft;
-    private Boolean edit;
-    private Boolean isPrivate;
-    private Boolean wip;
+  @AutoValue
+  public abstract static class Input {
+    public abstract Change change();
 
-    public Input(Change change) {
-      this.change = change;
+    @Nullable
+    public abstract String subject();
+
+    @Nullable
+    public abstract Boolean isDraft();
+
+    @Nullable
+    public abstract Boolean isEdit();
+
+    @Nullable
+    public abstract Boolean isPrivate();
+
+    @Nullable
+    public abstract Boolean isWorkInProgress();
+
+    public static Builder builder() {
+      return new AutoValue_ChangeReportFormatter_Input.Builder();
     }
 
-    public Input setPrivate(boolean isPrivate) {
-      this.isPrivate = isPrivate;
-      return this;
-    }
+    @AutoValue.Builder
+    public abstract static class Builder {
+      public abstract Builder setChange(Change val);
 
-    public Input setDraft(boolean draft) {
-      this.draft = draft;
-      return this;
-    }
+      public abstract Builder setSubject(String val);
 
-    public Input setEdit(boolean edit) {
-      this.edit = edit;
-      return this;
-    }
+      public abstract Builder setIsDraft(Boolean val);
 
-    public Input setWorkInProgress(boolean wip) {
-      this.wip = wip;
-      return this;
-    }
+      public abstract Builder setIsEdit(Boolean val);
 
-    public Input setSubject(String subject) {
-      this.subject = subject;
-      return this;
-    }
+      public abstract Builder setIsPrivate(Boolean val);
 
-    public Change getChange() {
-      return change;
-    }
+      public abstract Builder setIsWorkInProgress(Boolean val);
 
-    public String getSubject() {
-      return subject == null ? change.getSubject() : subject;
-    }
+      abstract Change change();
 
-    public boolean isDraft() {
-      return draft == null ? Change.Status.DRAFT == change.getStatus() : draft;
-    }
+      abstract String subject();
 
-    public boolean isEdit() {
-      return edit == null ? false : edit;
-    }
+      abstract Boolean isDraft();
 
-    public boolean isPrivate() {
-      return isPrivate == null ? change.isPrivate() : isPrivate;
-    }
+      abstract Boolean isEdit();
 
-    public boolean isWorkInProgress() {
-      return wip == null ? change.isWorkInProgress() : wip;
+      abstract Boolean isPrivate();
+
+      abstract Boolean isWorkInProgress();
+
+      abstract Input autoBuild();
+
+      public Input build() {
+        setChange(change());
+        setSubject(subject() == null ? change().getSubject() : subject());
+        setIsDraft(isDraft() == null ? Change.Status.DRAFT == change().getStatus() : isDraft());
+        setIsEdit(isEdit() == null ? false : isEdit());
+        setIsPrivate(isPrivate() == null ? change().isPrivate() : isPrivate());
+        setIsWorkInProgress(
+            isWorkInProgress() == null ? change().isWorkInProgress() : isWorkInProgress());
+        return autoBuild();
+      }
     }
   }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/DefaultChangeReportFormatter.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/DefaultChangeReportFormatter.java
index 297770c..8b5ab06 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/DefaultChangeReportFormatter.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/DefaultChangeReportFormatter.java
@@ -39,16 +39,16 @@
   @Override
   public String changeClosed(ChangeReportFormatter.Input input) {
     return String.format(
-        "change %s closed", ChangeUtil.formatChangeUrl(canonicalWebUrl, input.getChange()));
+        "change %s closed", ChangeUtil.formatChangeUrl(canonicalWebUrl, input.change()));
   }
 
   private String formatChangeUrl(String url, Input input) {
     StringBuilder m =
         new StringBuilder()
             .append("  ")
-            .append(ChangeUtil.formatChangeUrl(url, input.getChange()))
+            .append(ChangeUtil.formatChangeUrl(url, input.change()))
             .append(" ")
-            .append(ChangeUtil.cropSubject(input.getSubject()));
+            .append(ChangeUtil.cropSubject(input.subject()));
     if (input.isDraft()) {
       m.append(" [DRAFT]");
     }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
index b1edb92..634ffce 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
@@ -605,7 +605,9 @@
       addMessage("");
       addMessage("New Changes:");
       for (CreateRequest c : created) {
-        addMessage(changeFormatter.newChange(new ChangeReportFormatter.Input(c.change)));
+        addMessage(
+            changeFormatter.newChange(
+                ChangeReportFormatter.Input.builder().setChange(c.change).build()));
       }
       addMessage("");
     }
@@ -657,12 +659,14 @@
         }
 
         ChangeReportFormatter.Input input =
-            new ChangeReportFormatter.Input(u.notes.getChange())
+            ChangeReportFormatter.Input.builder()
+                .setChange(u.notes.getChange())
                 .setSubject(subject)
-                .setDraft(u.replaceOp != null && u.replaceOp.getPatchSet().isDraft())
-                .setEdit(edit)
-                .setPrivate(isPrivate)
-                .setWorkInProgress(wip);
+                .setIsDraft(u.replaceOp != null && u.replaceOp.getPatchSet().isDraft())
+                .setIsEdit(edit)
+                .setIsPrivate(isPrivate)
+                .setIsWorkInProgress(wip)
+                .build();
         addMessage(changeFormatter.changeUpdated(input));
       }
       addMessage("");
@@ -1678,7 +1682,10 @@
   private boolean requestReplace(
       ReceiveCommand cmd, boolean checkMergedInto, Change change, RevCommit newCommit) {
     if (change.getStatus().isClosed()) {
-      reject(cmd, changeFormatter.changeClosed(new ChangeReportFormatter.Input(change)));
+      reject(
+          cmd,
+          changeFormatter.changeClosed(
+              ChangeReportFormatter.Input.builder().setChange(change).build()));
       return false;
     }
 
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/ChangeArgumentParser.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/ChangeArgumentParser.java
index da61db8..1c55f48 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/ChangeArgumentParser.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/ChangeArgumentParser.java
@@ -28,7 +28,6 @@
 import com.google.gerrit.server.permissions.GlobalPermission;
 import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.permissions.PermissionBackendException;
-import com.google.gerrit.server.project.ChangeControl;
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.gerrit.sshd.BaseCommand.UnloggedFailure;
 import com.google.gwtorm.server.OrmException;
@@ -44,7 +43,6 @@
   private final ChangeFinder changeFinder;
   private final ReviewDb db;
   private final ChangeNotes.Factory changeNotesFactory;
-  private final ChangeControl.GenericFactory changeControlFactory;
   private final PermissionBackend permissionBackend;
 
   @Inject
@@ -54,14 +52,12 @@
       ChangeFinder changeFinder,
       ReviewDb db,
       ChangeNotes.Factory changeNotesFactory,
-      ChangeControl.GenericFactory changeControlFactory,
       PermissionBackend permissionBackend) {
     this.currentUser = currentUser;
     this.changesCollection = changesCollection;
     this.changeFinder = changeFinder;
     this.db = db;
     this.changeNotesFactory = changeNotesFactory;
-    this.changeControlFactory = changeControlFactory;
     this.permissionBackend = permissionBackend;
   }