diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/FilteredRepository.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/FilteredRepository.java
index 098910c..de023e0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/FilteredRepository.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/FilteredRepository.java
@@ -21,15 +21,17 @@
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.git.SearchingChangeCacheImpl;
 import com.google.gerrit.server.git.TagCache;
 import com.google.gerrit.server.git.VisibleRefFilter;
-import com.google.gerrit.server.git.SearchingChangeCacheImpl;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
 import org.eclipse.jgit.attributes.AttributesNodeProvider;
 import org.eclipse.jgit.lib.ObjectDatabase;
 import org.eclipse.jgit.lib.Ref;
@@ -41,10 +43,6 @@
 import org.eclipse.jgit.lib.RepositoryBuilder;
 import org.eclipse.jgit.lib.StoredConfig;
 
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
 class FilteredRepository extends Repository {
   static class Factory {
     private final Provider<ReviewDb> db;
@@ -56,7 +54,8 @@
     private final SearchingChangeCacheImpl changeCache;
 
     @Inject
-    Factory(Provider<ReviewDb> db,
+    Factory(
+        Provider<ReviewDb> db,
         ProjectControl.GenericFactory projectControlFactory,
         Provider<CurrentUser> userProvider,
         GitRepositoryManager repoManager,
@@ -72,24 +71,24 @@
       this.changeCache = changeCache;
     }
 
-    FilteredRepository create(Project.NameKey name)
-        throws NoSuchProjectException, IOException {
+    FilteredRepository create(Project.NameKey name) throws NoSuchProjectException, IOException {
       ProjectControl ctl = projectControlFactory.controlFor(name, userProvider.get());
       if (!ctl.isVisible()) {
         throw new NoSuchProjectException(name);
       }
       Repository repo = repoManager.openRepository(name);
-      return new FilteredRepository(ctl, repo,
-          new VisibleRefFilter(tagCache, changeNotesFactory, changeCache, repo,
-              ctl, db.get(), true));
+      return new FilteredRepository(
+          ctl,
+          repo,
+          new VisibleRefFilter(
+              tagCache, changeNotesFactory, changeCache, repo, ctl, db.get(), true));
     }
   }
 
   private final Repository delegate;
   private final RefDatabase refdb;
 
-  private FilteredRepository(ProjectControl ctl, Repository delegate,
-      VisibleRefFilter refFilter) {
+  private FilteredRepository(ProjectControl ctl, Repository delegate, VisibleRefFilter refFilter) {
     super(toBuilder(delegate));
     this.delegate = delegate;
     if (ctl.allRefsAreVisible()) {
@@ -100,8 +99,8 @@
   }
 
   private static RepositoryBuilder toBuilder(Repository repo) {
-    RepositoryBuilder b = new RepositoryBuilder().setGitDir(repo.getDirectory())
-      .setFS(repo.getFS());
+    RepositoryBuilder b =
+        new RepositoryBuilder().setGitDir(repo.getDirectory()).setFS(repo.getFS());
     if (!repo.isBare()) {
       b.setWorkTree(repo.getWorkTree()).setIndexFile(repo.getIndexFile());
     }
@@ -185,8 +184,7 @@
     }
 
     @Override
-    public RefRename newRename(String fromName, String toName)
-        throws IOException {
+    public RefRename newRename(String fromName, String toName) throws IOException {
       throw new UnsupportedOperationException(); // Gitiles is read-only.
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/GerritGitilesAccess.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/GerritGitilesAccess.java
index d7af64e..4e7e612 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/GerritGitilesAccess.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/GerritGitilesAccess.java
@@ -31,18 +31,15 @@
 import com.google.gitiles.RepositoryDescription;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
-import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
-
 import java.io.IOException;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
-
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
+import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 
 class GerritGitilesAccess implements GitilesAccess {
   // Assisted injection doesn't work with the overridden method, so write the
@@ -56,7 +53,8 @@
     private final String anonymousCowardName;
 
     @Inject
-    Factory(ProjectCache projectCache,
+    Factory(
+        ProjectCache projectCache,
         ProjectJson projectJson,
         Provider<ListProjects> listProjects,
         GitilesUrls urls,
@@ -97,8 +95,8 @@
 
   @Override
   public Map<String, RepositoryDescription> listRepositories(
-      @Nullable String prefix, Set<String> branches) throws ServiceNotEnabledException,
-      ServiceNotAuthorizedException, IOException  {
+      @Nullable String prefix, Set<String> branches)
+      throws ServiceNotEnabledException, ServiceNotAuthorizedException, IOException {
     ListProjects lp = listProjects.get();
     lp.setShowDescription(true);
     lp.setAll(true);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/GitilesWeblinks.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/GitilesWeblinks.java
index d20d04b..4ec8a2d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/GitilesWeblinks.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/GitilesWeblinks.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.gitiles;
 
+import com.google.common.base.MoreObjects;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.common.WebLinkInfo;
 import com.google.gerrit.extensions.webui.BranchWebLink;
@@ -24,64 +25,66 @@
 import com.google.gerrit.extensions.webui.ProjectWebLink;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.inject.Inject;
-import com.google.common.base.MoreObjects;
-
 import org.eclipse.jgit.lib.Config;
 
-public class GitilesWeblinks implements BranchWebLink, FileWebLink,
-    PatchSetWebLink, ProjectWebLink, FileHistoryWebLink, ParentWebLink {
+public class GitilesWeblinks
+    implements BranchWebLink,
+        FileWebLink,
+        PatchSetWebLink,
+        ProjectWebLink,
+        FileHistoryWebLink,
+        ParentWebLink {
   private final String name;
   private final String baseUrl;
   private final String target;
 
   @Inject
-  public GitilesWeblinks(@PluginName String pluginName,
-                         PluginConfigFactory configFactory) {
+  public GitilesWeblinks(@PluginName String pluginName, PluginConfigFactory configFactory) {
     Config config = configFactory.getGlobalPluginConfig("gitiles");
-    name = MoreObjects.firstNonNull(
-                          config.getString("gerrit", null, "linkname"),
-                          "browse");
+    name = MoreObjects.firstNonNull(config.getString("gerrit", null, "linkname"), "browse");
     baseUrl = "plugins/" + pluginName;
 
-    target = MoreObjects.firstNonNull(
-        config.getString("gerrit", null, "target"),
-        Target.BLANK);
+    target = MoreObjects.firstNonNull(config.getString("gerrit", null, "target"), Target.BLANK);
   }
 
   @Override
   public WebLinkInfo getProjectWeblink(String projectName) {
-    return new WebLinkInfo(name, null, String.format("%s/%s", baseUrl,
-        projectName), target);
+    return new WebLinkInfo(name, null, String.format("%s/%s", baseUrl, projectName), target);
   }
 
   @Override
   public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
-    return new WebLinkInfo(name, null, String.format("%s/%s/+/%s", baseUrl,
-        projectName, commit), target);
+    return new WebLinkInfo(
+        name, null, String.format("%s/%s/+/%s", baseUrl, projectName, commit), target);
   }
 
   @Override
   public WebLinkInfo getParentWebLink(String projectName, String commit) {
-    return new WebLinkInfo(name, null, String.format("%s/%s/+/%s", baseUrl,
-        projectName, commit), target);
+    return new WebLinkInfo(
+        name, null, String.format("%s/%s/+/%s", baseUrl, projectName, commit), target);
   }
 
   @Override
-  public WebLinkInfo getFileWebLink(String projectName, String revision,
-      String fileName) {
-    return new WebLinkInfo(name, null, String.format("%s/%s/+/%s/%s", baseUrl,
-        projectName, revision, fileName), target);
+  public WebLinkInfo getFileWebLink(String projectName, String revision, String fileName) {
+    return new WebLinkInfo(
+        name,
+        null,
+        String.format("%s/%s/+/%s/%s", baseUrl, projectName, revision, fileName),
+        target);
   }
 
   @Override
   public WebLinkInfo getBranchWebLink(String projectName, String branchName) {
-    return new WebLinkInfo(name, null, String.format("%s/%s/+/%s", baseUrl,
-        projectName, branchName), target);
+    return new WebLinkInfo(
+        name, null, String.format("%s/%s/+/%s", baseUrl, projectName, branchName), target);
   }
 
   @Override
   public WebLinkInfo getFileHistoryWebLink(String projectName, String revision, String fileName) {
-    return new WebLinkInfo(name, null, String.format("%s/%s/+log/%s/%s", baseUrl,
-        projectName, revision, fileName), target);
+    return new WebLinkInfo(
+        name,
+        null,
+        String.format("%s/%s/+log/%s/%s", baseUrl, projectName, revision, fileName),
+        target);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/HttpModule.java
index c1163cf..9402bf4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/HttpModule.java
@@ -26,20 +26,10 @@
 import com.google.inject.Singleton;
 import com.google.inject.name.Named;
 import com.google.inject.servlet.ServletModule;
-
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.storage.file.FileBasedConfig;
-import org.eclipse.jgit.transport.resolver.RepositoryResolver;
-import org.eclipse.jgit.util.FS;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -48,6 +38,13 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.storage.file.FileBasedConfig;
+import org.eclipse.jgit.transport.resolver.RepositoryResolver;
+import org.eclipse.jgit.util.FS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class HttpModule extends ServletModule {
   private final Provider<CurrentUser> userProvider;
@@ -62,8 +59,8 @@
   protected Filter createPathFilter() {
     return new Filter() {
       @Override
-      public void doFilter(ServletRequest request, ServletResponse response,
-          FilterChain chain) throws IOException, ServletException {
+      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+          throws IOException, ServletException {
         HttpServletRequestWrapper wrappedRequest =
             new HttpServletRequestWrapper((HttpServletRequest) request) {
               @Override
@@ -89,8 +86,7 @@
     };
   }
 
-  private static final Logger log = LoggerFactory
-      .getLogger(HttpModule.class);
+  private static final Logger log = LoggerFactory.getLogger(HttpModule.class);
 
   @Override
   protected void configureServlets() {
@@ -109,11 +105,14 @@
 
   @Provides
   @Singleton
-  GitilesServlet getServlet(@Named("gitiles") Config cfg, GitilesUrls urls,
+  GitilesServlet getServlet(
+      @Named("gitiles") Config cfg,
+      GitilesUrls urls,
       GitilesAccess.Factory accessFactory,
       RepositoryResolver<HttpServletRequest> resolver,
       MenuFilter menuFilter) {
-    GitilesServlet s = new GitilesServlet(cfg, null, urls, accessFactory, resolver, null, null, null, null);
+    GitilesServlet s =
+        new GitilesServlet(cfg, null, urls, accessFactory, resolver, null, null, null, null);
     for (GitilesView.Type view : GitilesView.Type.values()) {
       s.addFilter(view, menuFilter);
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginFilter.java
index 42d1837..7009f1a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginFilter.java
@@ -20,9 +20,7 @@
 import com.google.gitiles.GitilesUrls;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
 import java.io.IOException;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -44,40 +42,39 @@
   }
 
   @Override
-  public void doFilter(ServletRequest request, ServletResponse response,
-      FilterChain chain) throws IOException, ServletException {
+  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+      throws IOException, ServletException {
     final HttpServletRequest req = (HttpServletRequest) request;
-    HttpServletResponseWrapper rsp = new HttpServletResponseWrapper((HttpServletResponse) response) {
-      @Override
-      public void sendError(int sc) throws IOException {
-        CurrentUser user = userProvider.get();
-        if (sc == SC_UNAUTHORIZED && !(user instanceof IdentifiedUser)) {
-          sendRedirect(getLoginRedirectUrl(req));
-          return;
-        }
-        super.sendError(sc);
-      }
+    HttpServletResponseWrapper rsp =
+        new HttpServletResponseWrapper((HttpServletResponse) response) {
+          @Override
+          public void sendError(int sc) throws IOException {
+            CurrentUser user = userProvider.get();
+            if (sc == SC_UNAUTHORIZED && !(user instanceof IdentifiedUser)) {
+              sendRedirect(getLoginRedirectUrl(req));
+              return;
+            }
+            super.sendError(sc);
+          }
 
-      @Override
-      public void sendError(int sc, String msg) throws IOException {
-        CurrentUser user = userProvider.get();
-        if (sc == SC_UNAUTHORIZED && !(user instanceof IdentifiedUser)) {
-          sendRedirect(getLoginRedirectUrl(req));
-          return;
-        }
-        super.sendError(sc, msg);
-      }
-    };
+          @Override
+          public void sendError(int sc, String msg) throws IOException {
+            CurrentUser user = userProvider.get();
+            if (sc == SC_UNAUTHORIZED && !(user instanceof IdentifiedUser)) {
+              sendRedirect(getLoginRedirectUrl(req));
+              return;
+            }
+            super.sendError(sc, msg);
+          }
+        };
     chain.doFilter(request, rsp);
   }
 
   @Override
-  public void init(FilterConfig filterConfig) throws ServletException {
-  }
+  public void init(FilterConfig filterConfig) throws ServletException {}
 
   @Override
-  public void destroy() {
-  }
+  public void destroy() {}
 
   private String getLoginRedirectUrl(HttpServletRequest req) {
     String baseUrl = urls.getBaseGerritUrl(req);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java
index 76e3584..058dd2b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java
@@ -21,10 +21,8 @@
 import com.google.gitiles.GitilesUrls;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
 import java.io.IOException;
 import java.util.List;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -44,30 +42,25 @@
   }
 
   @Override
-  public void doFilter(ServletRequest request, ServletResponse response,
-      FilterChain chain) throws IOException, ServletException {
+  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+      throws IOException, ServletException {
     HttpServletRequest req = (HttpServletRequest) request;
     CurrentUser user = userProvider.get();
     List<Object> entries = Lists.newArrayListWithCapacity(3);
     entries.add(BaseServlet.menuEntry("Code Review", urls.getBaseGerritUrl(req)));
     if (user instanceof IdentifiedUser) {
-      entries
-          .add(BaseServlet.menuEntry(((IdentifiedUser) user).getName(), null));
-      entries.add(BaseServlet.menuEntry("Sign Out", urls.getBaseGerritUrl(req)
-          + "logout"));
+      entries.add(BaseServlet.menuEntry(((IdentifiedUser) user).getName(), null));
+      entries.add(BaseServlet.menuEntry("Sign Out", urls.getBaseGerritUrl(req) + "logout"));
     } else {
-      entries.add(BaseServlet.menuEntry("Sign In", urls.getBaseGerritUrl(req)
-          + "login"));
+      entries.add(BaseServlet.menuEntry("Sign In", urls.getBaseGerritUrl(req) + "login"));
     }
     BaseServlet.putSoyData(req, "menuEntries", entries);
     chain.doFilter(request, response);
   }
 
   @Override
-  public void init(FilterConfig filterConfig) throws ServletException {
-  }
+  public void init(FilterConfig filterConfig) throws ServletException {}
 
   @Override
-  public void destroy() {
-  }
+  public void destroy() {}
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/Module.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/Module.java
index 87f07ca..343e716 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/Module.java
@@ -35,17 +35,14 @@
 import com.google.inject.ProvisionException;
 import com.google.inject.Singleton;
 import com.google.inject.TypeLiteral;
-
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.transport.resolver.RepositoryResolver;
-
 import java.net.InetAddress;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.UnknownHostException;
 import java.util.List;
-
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.transport.resolver.RepositoryResolver;
 
 class Module extends LifecycleModule {
   @Override
@@ -62,7 +59,8 @@
   }
 
   @Provides
-  GitilesUrls getGitilesUrls(@GerritServerConfig Config gerritConfig,
+  GitilesUrls getGitilesUrls(
+      @GerritServerConfig Config gerritConfig,
       @Nullable @CanonicalWebUrl String gerritUrl,
       @SshAdvertisedAddresses List<String> advertisedSshAddresses)
       throws MalformedURLException, UnknownHostException {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/Resolver.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/Resolver.java
index f47d7c0..4b08996 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/Resolver.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/Resolver.java
@@ -21,20 +21,16 @@
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
+import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.transport.ServiceMayNotContinueException;
 import org.eclipse.jgit.transport.resolver.RepositoryResolver;
 import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
 
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-
 class Resolver implements RepositoryResolver<HttpServletRequest> {
-  private static final String NAME_KEY_ATTRIBUTE = Resolver.class.getName()
-      + "/NameKey";
+  private static final String NAME_KEY_ATTRIBUTE = Resolver.class.getName() + "/NameKey";
   private final Provider<CurrentUser> userProvider;
 
   static Project.NameKey getNameKey(HttpServletRequest req) {
@@ -44,8 +40,7 @@
   private final FilteredRepository.Factory repoFactory;
 
   @Inject
-  Resolver(FilteredRepository.Factory repoFactory,
-      Provider<CurrentUser> userProvider) {
+  Resolver(FilteredRepository.Factory repoFactory, Provider<CurrentUser> userProvider) {
     this.repoFactory = repoFactory;
     this.userProvider = userProvider;
   }
@@ -53,10 +48,14 @@
   @Override
   public Repository open(HttpServletRequest req, String name)
       throws RepositoryNotFoundException, ServiceMayNotContinueException,
-      ServiceNotAuthorizedException {
+          ServiceNotAuthorizedException {
     Project.NameKey oldName = getNameKey(req);
-    checkState(oldName == null, "Resolved multiple repositories on %s: %s, %s",
-        req.getRequestURL(), oldName, name);
+    checkState(
+        oldName == null,
+        "Resolved multiple repositories on %s: %s, %s",
+        req.getRequestURL(),
+        oldName,
+        name);
     Project.NameKey nameKey = new Project.NameKey(name);
     req.setAttribute(NAME_KEY_ATTRIBUTE, nameKey);
     try {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/SetContextClassLoader.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/SetContextClassLoader.java
index e14454f..40baabd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/SetContextClassLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/SetContextClassLoader.java
@@ -15,9 +15,7 @@
 package com.googlesource.gerrit.plugins.gitiles;
 
 import com.google.inject.Singleton;
-
 import java.io.IOException;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -29,12 +27,11 @@
 public class SetContextClassLoader implements Filter {
 
   @Override
-  public void init(FilterConfig arg0) throws ServletException {
-  }
+  public void init(FilterConfig arg0) throws ServletException {}
 
   @Override
-  public void doFilter(ServletRequest request, ServletResponse response,
-      FilterChain chain) throws IOException, ServletException {
+  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+      throws IOException, ServletException {
     Thread t = Thread.currentThread();
     ClassLoader old = t.getContextClassLoader();
     try {
@@ -46,6 +43,5 @@
   }
 
   @Override
-  public void destroy() {
-  }
+  public void destroy() {}
 }
