diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/project/DownloadCommandUpdater.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/project/DownloadCommandUpdater.java
index 1a2556d..e3c02a5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/project/DownloadCommandUpdater.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/project/DownloadCommandUpdater.java
@@ -33,21 +33,17 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
-
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ScheduledExecutorService;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.ObjectId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.Map;
-
 @Singleton
-public class DownloadCommandUpdater implements GitReferenceUpdatedListener,
-    LifecycleListener {
-  private static final Logger log = LoggerFactory
-      .getLogger(DownloadCommandUpdater.class);
+public class DownloadCommandUpdater implements GitReferenceUpdatedListener, LifecycleListener {
+  private static final Logger log = LoggerFactory.getLogger(DownloadCommandUpdater.class);
 
   private final String pluginName;
   private final DynamicMap<DownloadCommand> downloadCommands;
@@ -58,10 +54,12 @@
   private final ScheduledExecutorService executor;
 
   @Inject
-  DownloadCommandUpdater(@PluginName String pluginName,
+  DownloadCommandUpdater(
+      @PluginName String pluginName,
       DynamicMap<DownloadCommand> downloadCommands,
       MetaDataUpdate.Server metaDataUpdateFactory,
-      ProjectCache projectCache, WorkQueue queue) {
+      ProjectCache projectCache,
+      WorkQueue queue) {
     this.pluginName = pluginName;
     this.downloadCommands = downloadCommands;
     this.metaDataUpdateFactory = metaDataUpdateFactory;
@@ -73,22 +71,21 @@
 
   @Override
   public void start() {
-    executor.submit(new Runnable() {
-      @Override
-      public void run() {
-        for (Project.NameKey p : projectCache.all()) {
-          ProjectState projectState = projectCache.get(p);
-          if (projectState != null) {
-            PluginConfig cfg =
-                projectState.getConfig().getPluginConfig(pluginName);
-            for (String name : cfg.getNames()) {
-              installCommand(projectState.getProject().getNameKey(), name,
-                  cfg.getString(name));
+    executor.submit(
+        new Runnable() {
+          @Override
+          public void run() {
+            for (Project.NameKey p : projectCache.all()) {
+              ProjectState projectState = projectCache.get(p);
+              if (projectState != null) {
+                PluginConfig cfg = projectState.getConfig().getPluginConfig(pluginName);
+                for (String name : cfg.getNames()) {
+                  installCommand(projectState.getProject().getNameKey(), name, cfg.getString(name));
+                }
+              }
             }
           }
-        }
-      }
-    });
+        });
   }
 
   @Override
@@ -106,37 +103,39 @@
       Project.NameKey p = new Project.NameKey(event.getProjectName());
       try {
         ProjectConfig oldCfg =
-            ProjectConfig.read(metaDataUpdateFactory.create(p),
-                ObjectId.fromString(event.getOldObjectId()));
+            ProjectConfig.read(
+                metaDataUpdateFactory.create(p), ObjectId.fromString(event.getOldObjectId()));
         PluginConfig oldPluginCfg = oldCfg.getPluginConfig(pluginName);
         for (String name : oldPluginCfg.getNames()) {
           removeCommand(p, name);
         }
 
         ProjectConfig newCfg =
-            ProjectConfig.read(metaDataUpdateFactory.create(p),
-                ObjectId.fromString(event.getNewObjectId()));
+            ProjectConfig.read(
+                metaDataUpdateFactory.create(p), ObjectId.fromString(event.getNewObjectId()));
         PluginConfig newPluginCfg = newCfg.getPluginConfig(pluginName);
         for (String name : newPluginCfg.getNames()) {
           installCommand(p, name, newPluginCfg.getString(name));
         }
       } catch (IOException | ConfigInvalidException e) {
-        log.error("Failed to update download commands for project "
-            + p.get() + " on update of " + RefNames.REFS_CONFIG, e);
+        log.error(
+            "Failed to update download commands for project "
+                + p.get()
+                + " on update of "
+                + RefNames.REFS_CONFIG,
+            e);
       }
     }
   }
 
-  private void installCommand(final Project.NameKey p, String name,
-      final String command) {
+  private void installCommand(final Project.NameKey p, String name, final String command) {
     ProjectDownloadCommand dc = projectDownloadCommands.get(name);
     if (dc != null) {
       dc.add(p, command);
     } else {
       dc = new ProjectDownloadCommand(projectCache, p, command);
       projectDownloadCommands.put(name, dc);
-      registrationHandles.put(name,
-          map().put(pluginName, name.replaceAll("-", " "), provider(dc)));
+      registrationHandles.put(name, map().put(pluginName, name.replaceAll("-", " "), provider(dc)));
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/project/Module.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/project/Module.java
index 486b8b6..e79131c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/project/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/project/Module.java
@@ -22,14 +22,14 @@
 class Module extends AbstractModule {
   @Override
   protected void configure() {
-    install(new LifecycleModule() {
-      @Override
-      protected void configure() {
-        listener().to(DownloadCommandUpdater.class);
-      }
-    });
+    install(
+        new LifecycleModule() {
+          @Override
+          protected void configure() {
+            listener().to(DownloadCommandUpdater.class);
+          }
+        });
 
-    DynamicSet.bind(binder(), GitReferenceUpdatedListener.class)
-        .to(DownloadCommandUpdater.class);
+    DynamicSet.bind(binder(), GitReferenceUpdatedListener.class).to(DownloadCommandUpdater.class);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/download/command/project/ProjectDownloadCommand.java b/src/main/java/com/googlesource/gerrit/plugins/download/command/project/ProjectDownloadCommand.java
index be3246a..561a160 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/download/command/project/ProjectDownloadCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/download/command/project/ProjectDownloadCommand.java
@@ -21,15 +21,13 @@
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.project.ProjectState;
-
 import java.util.Map;
 
 public class ProjectDownloadCommand extends DownloadCommand {
   private final ProjectCache projectCache;
   private final Map<Project.NameKey, String> commands;
 
-  ProjectDownloadCommand(ProjectCache projectCache, Project.NameKey project,
-      String command) {
+  ProjectDownloadCommand(ProjectCache projectCache, Project.NameKey project, String command) {
     this.projectCache = projectCache;
     this.commands = Maps.newHashMap();
     add(project, command);
@@ -63,9 +61,11 @@
       }
     }
     if (command != null) {
-      command = command.replaceAll("\\$\\{ref\\}", ref)
-          .replaceAll("\\$\\{url\\}", scheme.getUrl(project))
-          .replaceAll("\\$\\{project\\}", project);
+      command =
+          command
+              .replaceAll("\\$\\{ref\\}", ref)
+              .replaceAll("\\$\\{url\\}", scheme.getUrl(project))
+              .replaceAll("\\$\\{project\\}", project);
     }
     return Strings.emptyToNull(command);
   }
