diff --git a/src/main/java/com/googlesource/gerrit/plugins/serverconfig/HideFromNonAdmins.java b/src/main/java/com/googlesource/gerrit/plugins/serverconfig/HideFromNonAdmins.java
index 631060f..796cc34 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serverconfig/HideFromNonAdmins.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serverconfig/HideFromNonAdmins.java
@@ -22,9 +22,7 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
-
 import java.io.IOException;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -33,9 +31,7 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
-/**
- * Allow only administrators to access the default UI.
- */
+/** Allow only administrators to access the default UI. */
 @Singleton
 public class HideFromNonAdmins implements Filter {
 
@@ -49,23 +45,20 @@
   }
 
   @Override
-  public void doFilter(ServletRequest req, ServletResponse rsp,
-      FilterChain chain) throws IOException, ServletException {
+  public void doFilter(ServletRequest req, ServletResponse rsp, FilterChain chain)
+      throws IOException, ServletException {
     try {
       permissionBackend.user(user.get()).check(GlobalPermission.ADMINISTRATE_SERVER);
     } catch (AuthException | PermissionBackendException e) {
-      ((HttpServletResponse) rsp).sendError(HttpServletResponse.SC_NOT_FOUND,
-          "Not Found");
+      ((HttpServletResponse) rsp).sendError(HttpServletResponse.SC_NOT_FOUND, "Not Found");
       return;
     }
     chain.doFilter(req, rsp);
   }
 
   @Override
-  public void init(FilterConfig cfg) throws ServletException {
-  }
+  public void init(FilterConfig cfg) throws ServletException {}
 
   @Override
-  public void destroy() {
-  }
+  public void destroy() {}
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serverconfig/ServerConfigServlet.java b/src/main/java/com/googlesource/gerrit/plugins/serverconfig/ServerConfigServlet.java
index 4959224..2fbdf03 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serverconfig/ServerConfigServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serverconfig/ServerConfigServlet.java
@@ -16,29 +16,19 @@
 
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Charsets;
-import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.ListMultimap;
-import com.google.common.collect.Multimap;
 import com.google.common.collect.MultimapBuilder;
 import com.google.common.io.ByteStreams;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.httpd.WebSession;
-import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.AuditEvent;
+import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.audit.AuditService;
 import com.google.gerrit.server.config.SitePaths;
 import com.google.gerrit.server.util.time.TimeUtil;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-
-import org.eclipse.jgit.diff.RawText;
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.storage.file.FileBasedConfig;
-import org.eclipse.jgit.util.FS;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -50,16 +40,20 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.text.MessageFormat;
-
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jgit.diff.RawText;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.storage.file.FileBasedConfig;
+import org.eclipse.jgit.util.FS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @Singleton
 public class ServerConfigServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;
-  private static final Logger log = LoggerFactory
-      .getLogger(ServerConfigServlet.class);
+  private static final Logger log = LoggerFactory.getLogger(ServerConfigServlet.class);
 
   private final SitePaths sitePaths;
   private final AuditService auditService;
@@ -67,8 +61,11 @@
   private final String pluginName;
 
   @Inject
-  ServerConfigServlet(SitePaths sitePaths, DynamicItem<WebSession> webSession,
-      AuditService auditService, @PluginName String pluginName) {
+  ServerConfigServlet(
+      SitePaths sitePaths,
+      DynamicItem<WebSession> webSession,
+      AuditService auditService,
+      @PluginName String pluginName) {
     this.webSession = webSession;
     this.auditService = auditService;
     this.pluginName = pluginName;
@@ -76,8 +73,7 @@
   }
 
   @Override
-  public void doGet(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
     if (!isAllowedPath(req)) {
       res.setStatus(HttpServletResponse.SC_FORBIDDEN);
       return;
@@ -86,8 +82,7 @@
   }
 
   @Override
-  public void doPut(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  public void doPut(HttpServletRequest req, HttpServletResponse res) throws IOException {
     if (!isAllowedPath(req)) {
       res.setStatus(HttpServletResponse.SC_FORBIDDEN);
       return;
@@ -99,8 +94,8 @@
     }
   }
 
-  private void writeFileAndFireAuditEvent(HttpServletRequest req,
-      HttpServletResponse res) throws IOException {
+  private void writeFileAndFireAuditEvent(HttpServletRequest req, HttpServletResponse res)
+      throws IOException {
     File oldFile = resolvePath(req).toFile();
     File dir = oldFile.getParentFile();
     File newFile = File.createTempFile(oldFile.getName(), ".new", dir);
@@ -122,19 +117,17 @@
 
       Throwable cause = e.getCause();
       final String msg =
-          cause instanceof ConfigInvalidException ? cause.getMessage()
-              : e.getMessage();
+          cause instanceof ConfigInvalidException ? cause.getMessage() : e.getMessage();
 
       newFile.delete();
       respondInvalidConfig(req, res, msg);
     }
   }
 
-  private void respondInvalidConfig(HttpServletRequest req,
-      HttpServletResponse res, String messageTxt) throws IOException {
+  private void respondInvalidConfig(
+      HttpServletRequest req, HttpServletResponse res, String messageTxt) throws IOException {
     String message =
-        MessageFormat.format("Invalid config file {0}: {1}", req.getPathInfo(),
-            messageTxt);
+        MessageFormat.format("Invalid config file {0}: {1}", req.getPathInfo(), messageTxt);
     res.setStatus(HttpServletResponse.SC_BAD_REQUEST);
     res.setContentType("application/octet-stream");
     res.setContentLength(message.length());
@@ -156,8 +149,7 @@
     String sessionId = webSession.get().getSessionId();
     CurrentUser who = webSession.get().getUser();
     long when = TimeUtil.nowMs();
-    ListMultimap<String, Object> params =
-        MultimapBuilder.hashKeys().arrayListValues().build();
+    ListMultimap<String, Object> params = MultimapBuilder.hashKeys().arrayListValues().build();
     params.put("plugin", pluginName);
     params.put("class", ServerConfigServlet.class);
     params.put("diff", diff);
@@ -178,13 +170,13 @@
   }
 
   private Path resolvePath(HttpServletRequest req) {
-    return sitePaths.resolve(CharMatcher.is('/').trimLeadingFrom(
-        req.getServletPath() + req.getPathInfo()));
+    return sitePaths.resolve(
+        CharMatcher.is('/').trimLeadingFrom(req.getServletPath() + req.getPathInfo()));
   }
 
   private boolean isParent(Path parent, Path child) throws IOException {
     Path p = child;
-    for (;;) {
+    for (; ; ) {
       p = p.getParent();
       if (p == null) {
         return false;
@@ -195,8 +187,7 @@
     }
   }
 
-  private void streamFile(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  private void streamFile(HttpServletRequest req, HttpServletResponse res) throws IOException {
     File f = resolvePath(req).toFile();
     res.setStatus(HttpServletResponse.SC_OK);
     res.setContentType("application/octet-stream");
@@ -207,8 +198,7 @@
     }
   }
 
-  private void writeFile(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  private void writeFile(HttpServletRequest req, HttpServletResponse res) throws IOException {
     res.setStatus(HttpServletResponse.SC_NO_CONTENT);
     streamRequestToFile(req, resolvePath(req).toFile());
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serverconfig/UnifiedDiffer.java b/src/main/java/com/googlesource/gerrit/plugins/serverconfig/UnifiedDiffer.java
index ecdad74..406cbec 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serverconfig/UnifiedDiffer.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serverconfig/UnifiedDiffer.java
@@ -14,6 +14,8 @@
 
 package com.googlesource.gerrit.plugins.serverconfig;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import org.eclipse.jgit.diff.DiffAlgorithm;
 import org.eclipse.jgit.diff.DiffFormatter;
 import org.eclipse.jgit.diff.EditList;
@@ -21,9 +23,6 @@
 import org.eclipse.jgit.diff.RawText;
 import org.eclipse.jgit.diff.RawTextComparator;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
 public class UnifiedDiffer {
 
   static final String CHARSET_NAME = "UTF-8";
@@ -40,5 +39,4 @@
 
     return os.toString(CHARSET_NAME);
   }
-
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/serverconfig/UnifiedDifferTest.java b/src/test/java/com/googlesource/gerrit/plugins/serverconfig/UnifiedDifferTest.java
index c81e156..e6ec226 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/serverconfig/UnifiedDifferTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/serverconfig/UnifiedDifferTest.java
@@ -16,11 +16,10 @@
 
 import static org.junit.Assert.*;
 
+import java.io.UnsupportedEncodingException;
 import org.eclipse.jgit.diff.RawText;
 import org.junit.Test;
 
-import java.io.UnsupportedEncodingException;
-
 public class UnifiedDifferTest {
 
   @Test
@@ -40,24 +39,18 @@
   @Test
   public void testAddedValue() throws Exception {
     UnifiedDiffer classUnderTest = new UnifiedDiffer();
-    String diff =
-        classUnderTest.diff(t("key1 = old\n"), t("key1 = old\n"
-            + "key2 = new\n"));
+    String diff = classUnderTest.diff(t("key1 = old\n"), t("key1 = old\n" + "key2 = new\n"));
     assertEquals("@@ -1 +1,2 @@\n" + " key1 = old\n" + "+key2 = new\n", diff);
   }
 
   @Test
   public void testDeletedValue() throws Exception {
     UnifiedDiffer classUnderTest = new UnifiedDiffer();
-    String diff =
-        classUnderTest.diff(t("key1 = old1\n" + "key1 = old2\n"),
-            t("key1 = old1\n"));
+    String diff = classUnderTest.diff(t("key1 = old1\n" + "key1 = old2\n"), t("key1 = old1\n"));
     assertEquals("@@ -1,2 +1 @@\n" + " key1 = old1\n" + "-key1 = old2\n", diff);
   }
 
   private static RawText t(String text) throws UnsupportedEncodingException {
     return new RawText(text.toString().getBytes(UnifiedDiffer.CHARSET_NAME));
   }
-
-
 }
