diff --git a/example-changeHasOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changehasoperator/Module.java b/example-changeHasOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changehasoperator/Module.java
index 2b97a40..485727d 100644
--- a/example-changeHasOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changehasoperator/Module.java
+++ b/example-changeHasOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changehasoperator/Module.java
@@ -21,8 +21,8 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-     bind(ChangeHasOperandFactory.class)
-         .annotatedWith(Exports.named("odd"))
-         .to(SampleHasOperand.class);
+    bind(ChangeHasOperandFactory.class)
+        .annotatedWith(Exports.named("odd"))
+        .to(SampleHasOperand.class);
   }
 }
diff --git a/example-changeHasOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changehasoperator/SampleHasOperand.java b/example-changeHasOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changehasoperator/SampleHasOperand.java
index a3664fd..df6f455 100644
--- a/example-changeHasOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changehasoperator/SampleHasOperand.java
+++ b/example-changeHasOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changehasoperator/SampleHasOperand.java
@@ -22,8 +22,7 @@
 import com.google.inject.Singleton;
 
 @Singleton
-public class SampleHasOperand
-    implements ChangeQueryBuilder.ChangeHasOperandFactory {
+public class SampleHasOperand implements ChangeQueryBuilder.ChangeHasOperandFactory {
   public static class MyOddPredicate extends ChangeOperatorPredicate {
 
     MyOddPredicate() {
@@ -42,8 +41,7 @@
   }
 
   @Override
-  public Predicate<ChangeData> create(ChangeQueryBuilder builder)
-      throws QueryParseException {
+  public Predicate<ChangeData> create(ChangeQueryBuilder builder) throws QueryParseException {
     return new MyOddPredicate();
   }
 }
diff --git a/example-changeOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changeoperator/SampleOperator.java b/example-changeOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changeoperator/SampleOperator.java
index 7049b65..8cc43a6 100644
--- a/example-changeOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changeoperator/SampleOperator.java
+++ b/example-changeOperator/src/main/java/com/googlesource/gerrit/plugins/examples/changeoperator/SampleOperator.java
@@ -23,8 +23,7 @@
 import com.google.inject.Singleton;
 
 @Singleton
-public class SampleOperator
-    implements ChangeQueryBuilder.ChangeOperatorFactory {
+public class SampleOperator implements ChangeQueryBuilder.ChangeOperatorFactory {
   public static class MyPredicate extends ChangeOperatorPredicate {
     private final Change.Id id;
 
diff --git a/example-commitValidator/src/main/java/com/googlesource/gerrit/plugins/examples/commitvalidator/Module.java b/example-commitValidator/src/main/java/com/googlesource/gerrit/plugins/examples/commitvalidator/Module.java
index 5869752..a7ad31f 100644
--- a/example-commitValidator/src/main/java/com/googlesource/gerrit/plugins/examples/commitvalidator/Module.java
+++ b/example-commitValidator/src/main/java/com/googlesource/gerrit/plugins/examples/commitvalidator/Module.java
@@ -14,14 +14,13 @@
 
 package com.googlesource.gerrit.plugins.examples.commitvalidator;
 
-import com.google.inject.AbstractModule;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.server.git.validators.CommitValidationListener;
+import com.google.inject.AbstractModule;
 
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(),
-        CommitValidationListener.class).to(CommitValidator.class);
+    DynamicSet.bind(binder(), CommitValidationListener.class).to(CommitValidator.class);
   }
 }
diff --git a/example-consoleMetricReporter/src/main/java/com/googlesource/gerrit/plugins/examples/consolemetricreporter/ConsoleMetricReporter.java b/example-consoleMetricReporter/src/main/java/com/googlesource/gerrit/plugins/examples/consolemetricreporter/ConsoleMetricReporter.java
index d3b8c5d..eb9fe0d 100644
--- a/example-consoleMetricReporter/src/main/java/com/googlesource/gerrit/plugins/examples/consolemetricreporter/ConsoleMetricReporter.java
+++ b/example-consoleMetricReporter/src/main/java/com/googlesource/gerrit/plugins/examples/consolemetricreporter/ConsoleMetricReporter.java
@@ -13,36 +13,33 @@
 // limitations under the License.
 package com.googlesource.gerrit.plugins.examples.consolemetricreporter;
 
+import com.codahale.metrics.ConsoleReporter;
+import com.codahale.metrics.MetricRegistry;
 import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-
-import com.codahale.metrics.ConsoleReporter;
-import com.codahale.metrics.MetricRegistry;
-
+import java.util.concurrent.TimeUnit;
 import org.eclipse.jgit.lib.Config;
 
-import java.util.concurrent.TimeUnit;
-
 /**
- * Demonstration of how to add a new Dropwizard  Metrics Reporter using
- * Gerrit's plug-in API.
+ * Demonstration of how to add a new Dropwizard Metrics Reporter using Gerrit's plug-in API.
  *
- * @see <a href="https://dropwizard.github.io/metrics/3.1.0/getting-started/#reporting-via-jmx">here</a>
- * @see <a href="https://dropwizard.github.io/metrics/3.1.0/getting-started/#reporting-via-http">here</a>
- * @see <a href="https://dropwizard.github.io/metrics/3.1.0/getting-started/#other-reporting">here</a>
- *
- * Also shows how to fetch plug-in specific configuration values.
- * <@see com.google.gerrit.server.config.PluginConfigFactory>
- *
- * Enable by adding the file etc/example-consoleMetricReporter.config:
- *
+ * @see <a
+ *     href="https://dropwizard.github.io/metrics/3.1.0/getting-started/#reporting-via-jmx">here</a>
+ * @see <a
+ *     href="https://dropwizard.github.io/metrics/3.1.0/getting-started/#reporting-via-http">here</a>
+ * @see <a
+ *     href="https://dropwizard.github.io/metrics/3.1.0/getting-started/#other-reporting">here</a>
+ *     <p>Also shows how to fetch plug-in specific configuration values. <@see
+ *     com.google.gerrit.server.config.PluginConfigFactory>
+ *     <p>Enable by adding the file etc/example-consoleMetricReporter.config:
+ *     <pre>
  *  [console-metrics]
  *      enabled = true
- *
+ * </pre>
  */
 @Listen
 @Singleton
@@ -51,17 +48,18 @@
   private boolean enabled;
 
   @Inject
-  public ConsoleMetricReporter(MetricRegistry registry,
-      PluginConfigFactory configFactory,
-      @PluginName String pluginName) {
+  public ConsoleMetricReporter(
+      MetricRegistry registry, PluginConfigFactory configFactory, @PluginName String pluginName) {
     Config config = configFactory.getGlobalPluginConfig(pluginName);
     enabled = config.getBoolean("console-metrics", "enabled", false);
     if (!enabled) {
       return;
     }
     this.consoleReporter =
-        ConsoleReporter.forRegistry(registry).convertRatesTo(TimeUnit.SECONDS)
-            .convertDurationsTo(TimeUnit.MILLISECONDS).build();
+        ConsoleReporter.forRegistry(registry)
+            .convertRatesTo(TimeUnit.SECONDS)
+            .convertDurationsTo(TimeUnit.MILLISECONDS)
+            .build();
   }
 
   @Override
diff --git a/example-consoleMetricReporter/src/main/java/com/googlesource/gerrit/plugins/examples/consolemetricreporter/Module.java b/example-consoleMetricReporter/src/main/java/com/googlesource/gerrit/plugins/examples/consolemetricreporter/Module.java
index c1e1deb..d0a4879 100644
--- a/example-consoleMetricReporter/src/main/java/com/googlesource/gerrit/plugins/examples/consolemetricreporter/Module.java
+++ b/example-consoleMetricReporter/src/main/java/com/googlesource/gerrit/plugins/examples/consolemetricreporter/Module.java
@@ -21,7 +21,6 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), LifecycleListener.class)
-        .to(ConsoleMetricReporter.class);
+    DynamicSet.bind(binder(), LifecycleListener.class).to(ConsoleMetricReporter.class);
   }
 }
diff --git a/example-deployedOnIncludedInExtension/src/main/java/com/googlesource/gerrit/plugins/examples/deployedonincludedinextension/Module.java b/example-deployedOnIncludedInExtension/src/main/java/com/googlesource/gerrit/plugins/examples/deployedonincludedinextension/Module.java
index 9015ea2..3ad59f7 100644
--- a/example-deployedOnIncludedInExtension/src/main/java/com/googlesource/gerrit/plugins/examples/deployedonincludedinextension/Module.java
+++ b/example-deployedOnIncludedInExtension/src/main/java/com/googlesource/gerrit/plugins/examples/deployedonincludedinextension/Module.java
@@ -14,14 +14,13 @@
 
 package com.googlesource.gerrit.plugins.examples.deployedonincludedinextension;
 
-import com.google.inject.AbstractModule;
-import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.config.ExternalIncludedIn;
+import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.inject.AbstractModule;
 
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(),
-        ExternalIncludedIn.class).to(DeployedOnIncludedInExtension.class);
+    DynamicSet.bind(binder(), ExternalIncludedIn.class).to(DeployedOnIncludedInExtension.class);
   }
 }
diff --git a/example-restApiGetRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapigetrevision/Greetings.java b/example-restApiGetRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapigetrevision/Greetings.java
index 0ba04c1..31314b4 100644
--- a/example-restApiGetRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapigetrevision/Greetings.java
+++ b/example-restApiGetRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapigetrevision/Greetings.java
@@ -17,7 +17,6 @@
 import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.server.change.RevisionResource;
-
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -26,12 +25,9 @@
   @Override
   public Response<Collection<GreetInfo>> apply(RevisionResource rev) {
     Collection<GreetInfo> l = new ArrayList<>(3);
-    l.add(new GreetInfo("Bonjour", "France",
-        "http://en.wikipedia.org/wiki/France"));
-    l.add(new GreetInfo("Hallo", "Germany",
-        "http://en.wikipedia.org/wiki/Germany"));
-    l.add(new GreetInfo("Hello", "USA",
-        "http://en.wikipedia.org/wiki/USA"));
+    l.add(new GreetInfo("Bonjour", "France", "http://en.wikipedia.org/wiki/France"));
+    l.add(new GreetInfo("Hallo", "Germany", "http://en.wikipedia.org/wiki/Germany"));
+    l.add(new GreetInfo("Hello", "USA", "http://en.wikipedia.org/wiki/USA"));
     return Response.ok(l);
   }
 
diff --git a/example-restApiGetRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapigetrevision/Module.java b/example-restApiGetRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapigetrevision/Module.java
index bf23094..b325c96 100644
--- a/example-restApiGetRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapigetrevision/Module.java
+++ b/example-restApiGetRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapigetrevision/Module.java
@@ -22,11 +22,12 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    install(new RestApiModule() {
-      @Override
-      protected void configure() {
-        get(REVISION_KIND, "greetings").to(Greetings.class);
-      }
-    });
+    install(
+        new RestApiModule() {
+          @Override
+          protected void configure() {
+            get(REVISION_KIND, "greetings").to(Greetings.class);
+          }
+        });
   }
 }
diff --git a/example-restApiPostProject/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostproject/Module.java b/example-restApiPostProject/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostproject/Module.java
index d39b4c6..e2dd834 100644
--- a/example-restApiPostProject/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostproject/Module.java
+++ b/example-restApiPostProject/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostproject/Module.java
@@ -22,11 +22,12 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    install(new RestApiModule() {
-      @Override
-      protected void configure() {
-        post(PROJECT_KIND, "hello-project").to(HelloProjectAction.class);
-      }
-    });
+    install(
+        new RestApiModule() {
+          @Override
+          protected void configure() {
+            post(PROJECT_KIND, "hello-project").to(HelloProjectAction.class);
+          }
+        });
   }
 }
diff --git a/example-restApiPostRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostrevision/HelloRevisionAction.java b/example-restApiPostRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostrevision/HelloRevisionAction.java
index 474750e..eecaf03 100644
--- a/example-restApiPostRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostrevision/HelloRevisionAction.java
+++ b/example-restApiPostRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostrevision/HelloRevisionAction.java
@@ -24,8 +24,9 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
-class HelloRevisionAction implements UiAction<RevisionResource>,
-    RestModifyView<RevisionResource, HelloRevisionAction.Input> {
+class HelloRevisionAction
+    implements UiAction<RevisionResource>,
+        RestModifyView<RevisionResource, HelloRevisionAction.Input> {
 
   private Provider<CurrentUser> user;
 
@@ -41,10 +42,9 @@
 
   @Override
   public String apply(RevisionResource rev, Input input) {
-    final String greeting = input.french
-        ? "Bonjour"
-        : "Hello";
-    return String.format("%s %s from change %s, patch set %d!",
+    final String greeting = input.french ? "Bonjour" : "Hello";
+    return String.format(
+        "%s %s from change %s, patch set %d!",
         greeting,
         Strings.isNullOrEmpty(input.message)
             ? MoreObjects.firstNonNull(user.get().getUserName(), "world")
@@ -54,8 +54,7 @@
   }
 
   @Override
-  public Description getDescription(
-      RevisionResource resource) {
+  public Description getDescription(RevisionResource resource) {
     return new Description()
         .setLabel("Say hello")
         .setTitle("Say hello in different languages")
diff --git a/example-restApiPostRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostrevision/Module.java b/example-restApiPostRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostrevision/Module.java
index 252e68b..80a7ce6 100644
--- a/example-restApiPostRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostrevision/Module.java
+++ b/example-restApiPostRevision/src/main/java/com/googlesource/gerrit/plugins/examples/restapipostrevision/Module.java
@@ -22,11 +22,12 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    install(new RestApiModule() {
-      @Override
-      protected void configure() {
-        post(REVISION_KIND, "hello-revision").to(HelloRevisionAction.class);
-      }
-    });
+    install(
+        new RestApiModule() {
+          @Override
+          protected void configure() {
+            post(REVISION_KIND, "hello-revision").to(HelloRevisionAction.class);
+          }
+        });
   }
 }
diff --git a/example-servlet/src/main/java/com/googlesource/gerrit/plugins/examples/servlet/HelloWorldServlet.java b/example-servlet/src/main/java/com/googlesource/gerrit/plugins/examples/servlet/HelloWorldServlet.java
index af718bf..9a8fa9d 100644
--- a/example-servlet/src/main/java/com/googlesource/gerrit/plugins/examples/servlet/HelloWorldServlet.java
+++ b/example-servlet/src/main/java/com/googlesource/gerrit/plugins/examples/servlet/HelloWorldServlet.java
@@ -18,17 +18,14 @@
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.IOException;
 import java.io.Writer;
-
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @Singleton
 class HelloWorldServlet extends HttpServlet {
@@ -36,14 +33,13 @@
   private static final Logger log = LoggerFactory.getLogger(HelloWorldServlet.class);
 
   @Inject
-  HelloWorldServlet(@PluginName String pluginName,
-      @PluginCanonicalWebUrl String url) {
+  HelloWorldServlet(@PluginName String pluginName, @PluginCanonicalWebUrl String url) {
     log.info(String.format("Cookbook Plugin '%s' at url %s", pluginName, url));
   }
 
   @Override
-  protected void doGet(final HttpServletRequest req,
-      final HttpServletResponse rsp) throws IOException, ServletException {
+  protected void doGet(final HttpServletRequest req, final HttpServletResponse rsp)
+      throws IOException, ServletException {
     rsp.setContentType("text/html");
     rsp.setCharacterEncoding("UTF-8");
     try (Writer out = rsp.getWriter()) {
diff --git a/example-simpleSshCommand/src/main/java/com/googlesource/gerrit/plugins/examples/simplesshcommand/PrintHelloWorldCommand.java b/example-simpleSshCommand/src/main/java/com/googlesource/gerrit/plugins/examples/simplesshcommand/PrintHelloWorldCommand.java
index 3d6f704..d7279ae 100644
--- a/example-simpleSshCommand/src/main/java/com/googlesource/gerrit/plugins/examples/simplesshcommand/PrintHelloWorldCommand.java
+++ b/example-simpleSshCommand/src/main/java/com/googlesource/gerrit/plugins/examples/simplesshcommand/PrintHelloWorldCommand.java
@@ -16,7 +16,6 @@
 
 import com.google.gerrit.sshd.CommandMetaData;
 import com.google.gerrit.sshd.SshCommand;
-
 import org.kohsuke.args4j.Argument;
 import org.kohsuke.args4j.Option;
 
diff --git a/example-sshCommandAlias/src/main/java/com/googlesource/gerrit/plugins/examples/sshcommandalias/PrintHelloWorldCommand.java b/example-sshCommandAlias/src/main/java/com/googlesource/gerrit/plugins/examples/sshcommandalias/PrintHelloWorldCommand.java
index dd41852..968a7e6 100644
--- a/example-sshCommandAlias/src/main/java/com/googlesource/gerrit/plugins/examples/sshcommandalias/PrintHelloWorldCommand.java
+++ b/example-sshCommandAlias/src/main/java/com/googlesource/gerrit/plugins/examples/sshcommandalias/PrintHelloWorldCommand.java
@@ -16,7 +16,6 @@
 
 import com.google.gerrit.sshd.CommandMetaData;
 import com.google.gerrit.sshd.SshCommand;
-
 import org.kohsuke.args4j.Argument;
 import org.kohsuke.args4j.Option;
 
diff --git a/example-topMenu/src/main/java/com/googlesource/gerrit/plugins/examples/topmenu/HelloTopMenu.java b/example-topMenu/src/main/java/com/googlesource/gerrit/plugins/examples/topmenu/HelloTopMenu.java
index c2cb559..bf29ee4 100644
--- a/example-topMenu/src/main/java/com/googlesource/gerrit/plugins/examples/topmenu/HelloTopMenu.java
+++ b/example-topMenu/src/main/java/com/googlesource/gerrit/plugins/examples/topmenu/HelloTopMenu.java
@@ -19,7 +19,6 @@
 import com.google.gerrit.extensions.client.MenuItem;
 import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.inject.Inject;
-
 import java.util.List;
 
 public class HelloTopMenu implements TopMenu {
@@ -33,12 +32,15 @@
     menuItems.add(new MenuItem("Documentation", baseUrl));
     menuEntries = Lists.newArrayListWithCapacity(2);
     menuEntries.add(new MenuEntry("Cookbook", menuItems));
-    menuEntries.add(new MenuEntry("Projects", Lists.newArrayList(
-        new MenuItem("Browse Repositories", "https://gerrit.googlesource.com/"))));
+    menuEntries.add(
+        new MenuEntry(
+            "Projects",
+            Lists.newArrayList(
+                new MenuItem("Browse Repositories", "https://gerrit.googlesource.com/"))));
   }
 
   @Override
   public List<MenuEntry> getEntries() {
-      return menuEntries;
+    return menuEntries;
   }
-}
\ No newline at end of file
+}
diff --git a/example-topMenu/src/main/java/com/googlesource/gerrit/plugins/examples/topmenu/Module.java b/example-topMenu/src/main/java/com/googlesource/gerrit/plugins/examples/topmenu/Module.java
index 5da922b..e0932aa 100644
--- a/example-topMenu/src/main/java/com/googlesource/gerrit/plugins/examples/topmenu/Module.java
+++ b/example-topMenu/src/main/java/com/googlesource/gerrit/plugins/examples/topmenu/Module.java
@@ -21,7 +21,6 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), TopMenu.class)
-        .to(HelloTopMenu.class);
+    DynamicSet.bind(binder(), TopMenu.class).to(HelloTopMenu.class);
   }
 }
diff --git a/example-usageDataLogger/src/main/java/com/googlesource/gerrit/plugins/examples/usagedatalogger/Module.java b/example-usageDataLogger/src/main/java/com/googlesource/gerrit/plugins/examples/usagedatalogger/Module.java
index 25c0200..24c13f6 100644
--- a/example-usageDataLogger/src/main/java/com/googlesource/gerrit/plugins/examples/usagedatalogger/Module.java
+++ b/example-usageDataLogger/src/main/java/com/googlesource/gerrit/plugins/examples/usagedatalogger/Module.java
@@ -21,7 +21,6 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), UsageDataPublishedListener.class)
-        .to(UsageDataLogger.class);
+    DynamicSet.bind(binder(), UsageDataPublishedListener.class).to(UsageDataLogger.class);
   }
 }
diff --git a/example-usageDataLogger/src/main/java/com/googlesource/gerrit/plugins/examples/usagedatalogger/UsageDataLogger.java b/example-usageDataLogger/src/main/java/com/googlesource/gerrit/plugins/examples/usagedatalogger/UsageDataLogger.java
index 02f0305..abbefbe 100644
--- a/example-usageDataLogger/src/main/java/com/googlesource/gerrit/plugins/examples/usagedatalogger/UsageDataLogger.java
+++ b/example-usageDataLogger/src/main/java/com/googlesource/gerrit/plugins/examples/usagedatalogger/UsageDataLogger.java
@@ -15,7 +15,6 @@
 package com.googlesource.gerrit.plugins.examples.usagedatalogger;
 
 import com.google.gerrit.extensions.events.UsageDataPublishedListener;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -26,13 +25,14 @@
   @Override
   public void onUsageDataPublished(Event event) {
     if (log.isInfoEnabled()) {
-      log.info(String.format("Usage data for "
-          + "%s at %s", event.getMetaData().getDescription(), event.getInstant()));
+      log.info(
+          String.format(
+              "Usage data for " + "%s at %s",
+              event.getMetaData().getDescription(), event.getInstant()));
       log.info(String.format("project name - %s", event.getMetaData().getName()));
       String unitSymbol = event.getMetaData().getUnitSymbol();
       for (Data data : event.getData()) {
-        log.info(String.format("%s - %d %s", data.getProjectName(), data.getValue(),
-            unitSymbol));
+        log.info(String.format("%s - %d %s", data.getProjectName(), data.getValue(), unitSymbol));
       }
       log.info("");
     }
diff --git a/example-validationListenerAssignee/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerassignee/AssigneeValidator.java b/example-validationListenerAssignee/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerassignee/AssigneeValidator.java
index 63359ca..8fef105 100644
--- a/example-validationListenerAssignee/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerassignee/AssigneeValidator.java
+++ b/example-validationListenerAssignee/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerassignee/AssigneeValidator.java
@@ -23,31 +23,28 @@
 import com.google.gerrit.server.validators.ValidationException;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class AssigneeValidator implements AssigneeValidationListener {
-  private static final Logger log =
-      LoggerFactory.getLogger(AssigneeValidationListener.class);
+  private static final Logger log = LoggerFactory.getLogger(AssigneeValidationListener.class);
 
   private static int MAX_ASSIGNED_CHANGES = 5;
 
-  @Inject
-  ChangeQueryBuilder queryBuilder;
+  @Inject ChangeQueryBuilder queryBuilder;
 
-  @Inject
-  ChangeQueryProcessor queryProcessor;
+  @Inject ChangeQueryProcessor queryProcessor;
 
   @Override
-  public void validateAssignee(Change change, Account assignee)
-      throws ValidationException {
+  public void validateAssignee(Change change, Account assignee) throws ValidationException {
     try {
       if (queryProcessor
-          .query(queryBuilder.assignee(assignee.getPreferredEmail())).entities()
-          .size() > MAX_ASSIGNED_CHANGES) {
-        throw new ValidationException("Cannot assign user to more than "
-            + MAX_ASSIGNED_CHANGES + " changes");
+              .query(queryBuilder.assignee(assignee.getPreferredEmail()))
+              .entities()
+              .size()
+          > MAX_ASSIGNED_CHANGES) {
+        throw new ValidationException(
+            "Cannot assign user to more than " + MAX_ASSIGNED_CHANGES + " changes");
       }
     } catch (OrmException | QueryParseException e) {
       log.error("Failed to validate assignee for change " + change.getId(), e);
diff --git a/example-validationListenerAssignee/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerassignee/Module.java b/example-validationListenerAssignee/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerassignee/Module.java
index 05ff04d..f3304f4 100644
--- a/example-validationListenerAssignee/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerassignee/Module.java
+++ b/example-validationListenerAssignee/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerassignee/Module.java
@@ -21,7 +21,6 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), AssigneeValidationListener.class)
-        .to(AssigneeValidator.class);
+    DynamicSet.bind(binder(), AssigneeValidationListener.class).to(AssigneeValidator.class);
   }
 }
diff --git a/example-validationListenerCommit/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenercommit/CommitValidator.java b/example-validationListenerCommit/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenercommit/CommitValidator.java
index 70bca21..92f873f 100644
--- a/example-validationListenerCommit/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenercommit/CommitValidator.java
+++ b/example-validationListenerCommit/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenercommit/CommitValidator.java
@@ -19,19 +19,17 @@
 import com.google.gerrit.server.git.validators.CommitValidationException;
 import com.google.gerrit.server.git.validators.CommitValidationListener;
 import com.google.gerrit.server.git.validators.CommitValidationMessage;
-
 import java.util.List;
 
 public class CommitValidator implements CommitValidationListener {
   @Override
-  public List<CommitValidationMessage> onCommitReceived(
-      CommitReceivedEvent receiveEvent) throws CommitValidationException {
-    if ("plugins/example-validationListenerCommit".equals(receiveEvent.project.getName()) &&
-        !receiveEvent.commit.getShortMessage().startsWith("Cookbook: ")) {
-      CommitValidationMessage m = new CommitValidationMessage(
-          "Subject should begin with 'Cookbook: '", true);
-      throw new CommitValidationException(
-          "Invalid commit message", ImmutableList.of(m));
+  public List<CommitValidationMessage> onCommitReceived(CommitReceivedEvent receiveEvent)
+      throws CommitValidationException {
+    if ("plugins/example-validationListenerCommit".equals(receiveEvent.project.getName())
+        && !receiveEvent.commit.getShortMessage().startsWith("Cookbook: ")) {
+      CommitValidationMessage m =
+          new CommitValidationMessage("Subject should begin with 'Cookbook: '", true);
+      throw new CommitValidationException("Invalid commit message", ImmutableList.of(m));
     }
     return ImmutableList.of();
   }
diff --git a/example-validationListenerCommit/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenercommit/Module.java b/example-validationListenerCommit/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenercommit/Module.java
index db39957..2220299 100644
--- a/example-validationListenerCommit/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenercommit/Module.java
+++ b/example-validationListenerCommit/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenercommit/Module.java
@@ -21,7 +21,6 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), CommitValidationListener.class)
-        .to(CommitValidator.class);
+    DynamicSet.bind(binder(), CommitValidationListener.class).to(CommitValidator.class);
   }
 }
diff --git a/example-validationListenerHashtag/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerhashtag/HashtagValidator.java b/example-validationListenerHashtag/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerhashtag/HashtagValidator.java
index 02e149e..bccc62e 100644
--- a/example-validationListenerHashtag/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerhashtag/HashtagValidator.java
+++ b/example-validationListenerHashtag/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerhashtag/HashtagValidator.java
@@ -17,7 +17,6 @@
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.server.validators.HashtagValidationListener;
 import com.google.gerrit.server.validators.ValidationException;
-
 import java.util.Set;
 
 public class HashtagValidator implements HashtagValidationListener {
@@ -29,7 +28,8 @@
       if (toAdd.size() > 0) {
         for (String hashtag : toAdd) {
           if (!hashtag.startsWith("example-validationListenerHashtag-")) {
-            throw new ValidationException("Invalid example-validationListenerHashtag hashtag: " + hashtag);
+            throw new ValidationException(
+                "Invalid example-validationListenerHashtag hashtag: " + hashtag);
           }
         }
       }
diff --git a/example-validationListenerHashtag/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerhashtag/Module.java b/example-validationListenerHashtag/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerhashtag/Module.java
index 43c4426..9c6b53d 100644
--- a/example-validationListenerHashtag/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerhashtag/Module.java
+++ b/example-validationListenerHashtag/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerhashtag/Module.java
@@ -21,7 +21,6 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), HashtagValidationListener.class)
-        .to(HashtagValidator.class);
+    DynamicSet.bind(binder(), HashtagValidationListener.class).to(HashtagValidator.class);
   }
 }
diff --git a/example-validationListenerMerge/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenermerge/MergeUserValidator.java b/example-validationListenerMerge/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenermerge/MergeUserValidator.java
index d8cbf98..9413bdd 100644
--- a/example-validationListenerMerge/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenermerge/MergeUserValidator.java
+++ b/example-validationListenerMerge/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenermerge/MergeUserValidator.java
@@ -22,7 +22,6 @@
 import com.google.gerrit.server.git.validators.MergeValidationListener;
 import com.google.gerrit.server.project.ProjectState;
 import com.google.inject.Singleton;
-
 import org.eclipse.jgit.lib.Repository;
 
 // Because we have a dedicated Module, we need to bind to the set
@@ -33,17 +32,19 @@
 @Singleton
 public class MergeUserValidator implements MergeValidationListener {
 
-  /**
-   * Reject all merges if the submitter is not an administrator
-   */
+  /** Reject all merges if the submitter is not an administrator */
   @Override
-  public void onPreMerge(Repository repo, CodeReviewCommit commit,
-      ProjectState destProject, Branch.NameKey destBranch,
-      PatchSet.Id patchSetId, IdentifiedUser caller)
-          throws MergeValidationException {
+  public void onPreMerge(
+      Repository repo,
+      CodeReviewCommit commit,
+      ProjectState destProject,
+      Branch.NameKey destBranch,
+      PatchSet.Id patchSetId,
+      IdentifiedUser caller)
+      throws MergeValidationException {
     if (!caller.getCapabilities().canAdministrateServer()) {
-      throw new MergeValidationException("Submitter " + caller.getNameEmail()
-          + " is not a site administrator");
+      throw new MergeValidationException(
+          "Submitter " + caller.getNameEmail() + " is not a site administrator");
     }
   }
 }
diff --git a/example-validationListenerMerge/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenermerge/Module.java b/example-validationListenerMerge/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenermerge/Module.java
index dde757c..3f5a5d9 100644
--- a/example-validationListenerMerge/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenermerge/Module.java
+++ b/example-validationListenerMerge/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenermerge/Module.java
@@ -21,7 +21,6 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), MergeValidationListener.class)
-        .to(MergeUserValidator.class);
+    DynamicSet.bind(binder(), MergeValidationListener.class).to(MergeUserValidator.class);
   }
 }
diff --git a/example-validationListenerNewProjectCreated/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenernewprojectcreated/Module.java b/example-validationListenerNewProjectCreated/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenernewprojectcreated/Module.java
index 650febf..187a8e8 100644
--- a/example-validationListenerNewProjectCreated/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenernewprojectcreated/Module.java
+++ b/example-validationListenerNewProjectCreated/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenernewprojectcreated/Module.java
@@ -21,7 +21,6 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), NewProjectCreatedListener.class)
-        .to(ProjectCreatedListener.class);
+    DynamicSet.bind(binder(), NewProjectCreatedListener.class).to(ProjectCreatedListener.class);
   }
 }
diff --git a/example-validationListenerNewProjectCreated/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenernewprojectcreated/ProjectCreatedListener.java b/example-validationListenerNewProjectCreated/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenernewprojectcreated/ProjectCreatedListener.java
index 33c4cc7..61afa48 100644
--- a/example-validationListenerNewProjectCreated/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenernewprojectcreated/ProjectCreatedListener.java
+++ b/example-validationListenerNewProjectCreated/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenernewprojectcreated/ProjectCreatedListener.java
@@ -19,27 +19,22 @@
 import com.google.gerrit.extensions.events.NewProjectCreatedListener;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.inject.Inject;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class ProjectCreatedListener implements NewProjectCreatedListener {
-  private static final Logger log =
-      LoggerFactory.getLogger(ProjectCreatedListener.class);
+  private static final Logger log = LoggerFactory.getLogger(ProjectCreatedListener.class);
 
-  @Inject
-  protected GerritApi gApi;
+  @Inject protected GerritApi gApi;
 
   @Override
   public void onNewProjectCreated(Event event) {
     String name = event.getProjectName();
     try {
       ProjectApi api = gApi.projects().name(name);
-      log.info(String.format(
-          "New project: '%s', Parent: '%s'", name, api.get().parent));
+      log.info(String.format("New project: '%s', Parent: '%s'", name, api.get().parent));
     } catch (RestApiException e) {
-      log.error(String.format(
-          "Failed to get info for new project %s", name), e);
+      log.error(String.format("Failed to get info for new project %s", name), e);
     }
   }
 }
diff --git a/example-validationListenerRefOperation/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerrefoperation/RefOperationValidationExample.java b/example-validationListenerRefOperation/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerrefoperation/RefOperationValidationExample.java
index 4cabd36..145edc0 100644
--- a/example-validationListenerRefOperation/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerrefoperation/RefOperationValidationExample.java
+++ b/example-validationListenerRefOperation/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerrefoperation/RefOperationValidationExample.java
@@ -20,25 +20,20 @@
 import com.google.gerrit.server.git.validators.RefOperationValidationListener;
 import com.google.gerrit.server.git.validators.ValidationMessage;
 import com.google.gerrit.server.validators.ValidationException;
-
 import java.util.ArrayList;
 import java.util.List;
 
-public class RefOperationValidationExample implements
-    RefOperationValidationListener {
+public class RefOperationValidationExample implements RefOperationValidationListener {
 
   @Override
-  public List<ValidationMessage> onRefOperation(RefReceivedEvent event)
-      throws ValidationException {
+  public List<ValidationMessage> onRefOperation(RefReceivedEvent event) throws ValidationException {
     ArrayList<ValidationMessage> messages = Lists.newArrayList();
-    if (event.command.getRefName()
-        .startsWith(RefNames.REFS_HEADS + "protected-")
+    if (event.command.getRefName().startsWith(RefNames.REFS_HEADS + "protected-")
         && !event.user.getCapabilities().canAdministrateServer()) {
-      throw new ValidationException(String.format(
-          "Operation %s on %s branch in project %s is not valid!",
-          event.command.getType(),
-          event.command.getRefName(),
-          event.project.getName()));
+      throw new ValidationException(
+          String.format(
+              "Operation %s on %s branch in project %s is not valid!",
+              event.command.getType(), event.command.getRefName(), event.project.getName()));
     }
     return messages;
   }
diff --git a/example-validationListenerUpload/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerupload/DenyUploadExample.java b/example-validationListenerUpload/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerupload/DenyUploadExample.java
index 7d85dce..e2231f8 100644
--- a/example-validationListenerUpload/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerupload/DenyUploadExample.java
+++ b/example-validationListenerUpload/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerupload/DenyUploadExample.java
@@ -19,21 +19,23 @@
 import com.google.gerrit.server.git.validators.UploadValidationListener;
 import com.google.gerrit.server.validators.ValidationException;
 import com.google.inject.Inject;
-
+import java.util.Collection;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.transport.UploadPack;
 
-import java.util.Collection;
-
 public class DenyUploadExample implements UploadValidationListener {
-  @Inject
-  private CurrentUser user;
+  @Inject private CurrentUser user;
 
   @Override
-  public void onPreUpload(Repository repository, Project project,
-      String remoteHost, UploadPack up, Collection<? extends ObjectId> wants,
-      Collection<? extends ObjectId> haves) throws ValidationException {
+  public void onPreUpload(
+      Repository repository,
+      Project project,
+      String remoteHost,
+      UploadPack up,
+      Collection<? extends ObjectId> wants,
+      Collection<? extends ObjectId> haves)
+      throws ValidationException {
     up.sendMessage("Validating project name for " + user.getUserName() + "\n");
     up.sendMessage("  from host: " + remoteHost + "\n");
     if (project.getName().equals("deny-upload-project")) {
diff --git a/example-validationListenerUpload/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerupload/Module.java b/example-validationListenerUpload/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerupload/Module.java
index 8bb84a3..9df23d8 100644
--- a/example-validationListenerUpload/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerupload/Module.java
+++ b/example-validationListenerUpload/src/main/java/com/googlesource/gerrit/plugins/examples/validationlistenerupload/Module.java
@@ -21,7 +21,6 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), UploadValidationListener.class)
-        .to(DenyUploadExample.class);
+    DynamicSet.bind(binder(), UploadValidationListener.class).to(DenyUploadExample.class);
   }
 }
diff --git a/example-webLinkBranch/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkbranch/HelloWeblink.java b/example-webLinkBranch/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkbranch/HelloWeblink.java
index 1a73ada..6a0ba2a 100644
--- a/example-webLinkBranch/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkbranch/HelloWeblink.java
+++ b/example-webLinkBranch/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkbranch/HelloWeblink.java
@@ -19,13 +19,13 @@
 
 public class HelloWeblink implements BranchWebLink {
   private String name = "HelloLink";
-  private String placeHolderUrlProjectBranch =
-      "http://my.hellolink.com/project=%s-branch=%s";
+  private String placeHolderUrlProjectBranch = "http://my.hellolink.com/project=%s-branch=%s";
   private String myImageUrl = "http://placehold.it/16x16.gif";
 
   @Override
   public WebLinkInfo getBranchWebLink(String projectName, String branchName) {
-    return new WebLinkInfo(name,
+    return new WebLinkInfo(
+        name,
         myImageUrl,
         String.format(placeHolderUrlProjectBranch, projectName, branchName),
         Target.BLANK);
diff --git a/example-webLinkFileHistory/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkfilehistory/HelloWeblink.java b/example-webLinkFileHistory/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkfilehistory/HelloWeblink.java
index e5462c8..f0d9ef2 100644
--- a/example-webLinkFileHistory/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkfilehistory/HelloWeblink.java
+++ b/example-webLinkFileHistory/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkfilehistory/HelloWeblink.java
@@ -19,19 +19,17 @@
 
 public class HelloWeblink implements FileHistoryWebLink {
   private String name = "HelloLink";
-  private String placeHolderUrlProject =
-      "http://my.hellolink.com/project=%s";
+  private String placeHolderUrlProject = "http://my.hellolink.com/project=%s";
   private String placeHolderUrlProjectRevisionFileName =
       placeHolderUrlProject + "-revision=%s-file=%s";
   private String myImageUrl = "http://placehold.it/16x16.gif";
 
   @Override
-  public WebLinkInfo getFileHistoryWebLink(String projectName, String revision,
-      String fileName) {
-    return new WebLinkInfo(name,
+  public WebLinkInfo getFileHistoryWebLink(String projectName, String revision, String fileName) {
+    return new WebLinkInfo(
+        name,
         myImageUrl,
-        String.format(placeHolderUrlProjectRevisionFileName, projectName,
-            revision, fileName),
+        String.format(placeHolderUrlProjectRevisionFileName, projectName, revision, fileName),
         Target.BLANK);
   }
 }
diff --git a/example-webLinkPatchSet/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkpatchset/HelloWeblink.java b/example-webLinkPatchSet/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkpatchset/HelloWeblink.java
index 6ec68ac..b6d1a45 100644
--- a/example-webLinkPatchSet/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkpatchset/HelloWeblink.java
+++ b/example-webLinkPatchSet/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkpatchset/HelloWeblink.java
@@ -19,15 +19,14 @@
 
 public class HelloWeblink implements PatchSetWebLink {
   private String name = "HelloLink";
-  private String placeHolderUrlProject =
-      "http://my.hellolink.com/project=%s";
-  private String placeHolderUrlProjectCommit =
-      placeHolderUrlProject + "/commit=%s";
+  private String placeHolderUrlProject = "http://my.hellolink.com/project=%s";
+  private String placeHolderUrlProjectCommit = placeHolderUrlProject + "/commit=%s";
   private String myImageUrl = "http://placehold.it/16x16.gif";
 
   @Override
   public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
-    return new WebLinkInfo(name,
+    return new WebLinkInfo(
+        name,
         myImageUrl,
         String.format(placeHolderUrlProjectCommit, projectName, commit),
         Target.BLANK);
diff --git a/example-webLinkProject/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkproject/HelloWeblink.java b/example-webLinkProject/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkproject/HelloWeblink.java
index 91ba9d0..e1a264f 100644
--- a/example-webLinkProject/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkproject/HelloWeblink.java
+++ b/example-webLinkProject/src/main/java/com/googlesource/gerrit/plugins/examples/weblinkproject/HelloWeblink.java
@@ -15,22 +15,16 @@
 package com.googlesource.gerrit.plugins.examples.weblinkproject;
 
 import com.google.gerrit.extensions.common.WebLinkInfo;
-import com.google.gerrit.extensions.webui.BranchWebLink;
-import com.google.gerrit.extensions.webui.FileHistoryWebLink;
-import com.google.gerrit.extensions.webui.PatchSetWebLink;
 import com.google.gerrit.extensions.webui.ProjectWebLink;
 
 public class HelloWeblink implements ProjectWebLink {
   private String name = "HelloLink";
-  private String placeHolderUrlProject =
-      "http://my.hellolink.com/project=%s";
+  private String placeHolderUrlProject = "http://my.hellolink.com/project=%s";
   private String myImageUrl = "http://placehold.it/16x16.gif";
 
   @Override
   public WebLinkInfo getProjectWeblink(String projectName) {
-    return new WebLinkInfo(name,
-        myImageUrl,
-        String.format(placeHolderUrlProject, projectName),
-        Target.BLANK);
+    return new WebLinkInfo(
+        name, myImageUrl, String.format(placeHolderUrlProject, projectName), Target.BLANK);
   }
 }
diff --git a/example-wuiChangeScreenBelowChangeInfoBlock/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenbelowchangeinfoblock/Module.java b/example-wuiChangeScreenBelowChangeInfoBlock/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenbelowchangeinfoblock/Module.java
index 836d631..0000021 100644
--- a/example-wuiChangeScreenBelowChangeInfoBlock/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenbelowchangeinfoblock/Module.java
+++ b/example-wuiChangeScreenBelowChangeInfoBlock/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenbelowchangeinfoblock/Module.java
@@ -16,9 +16,7 @@
 
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.webui.GwtPlugin;
-import com.google.gerrit.extensions.webui.JavaScriptPlugin;
 import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.gerrit.server.plugins.ServerPluginProvider;
 import com.google.inject.AbstractModule;
 
 public class Module extends AbstractModule {
diff --git a/example-wuiChangeScreenBelowChangeInfoBlock/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenbelowchangeinfoblock/client/ExamplePlugin.java b/example-wuiChangeScreenBelowChangeInfoBlock/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenbelowchangeinfoblock/client/ExamplePlugin.java
index 4e89d5b..312c857 100644
--- a/example-wuiChangeScreenBelowChangeInfoBlock/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenbelowchangeinfoblock/client/ExamplePlugin.java
+++ b/example-wuiChangeScreenBelowChangeInfoBlock/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenbelowchangeinfoblock/client/ExamplePlugin.java
@@ -18,12 +18,7 @@
 import com.google.gerrit.client.Resources;
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.PluginEntryPoint;
-import com.google.gerrit.plugin.client.extension.Panel;
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Button;
 
 public class ExamplePlugin extends PluginEntryPoint {
   public static final Resources RESOURCES = GWT.create(Resources.class);
@@ -33,10 +28,12 @@
     Plugin.get()
         .panel(
             GerritUiExtensionPoint.CHANGE_SCREEN_BELOW_CHANGE_INFO_BLOCK,
-            new ExampleChangeScreenExtension.Factory(), "first");
+            new ExampleChangeScreenExtension.Factory(),
+            "first");
     Plugin.get()
         .panel(
             GerritUiExtensionPoint.CHANGE_SCREEN_BELOW_CHANGE_INFO_BLOCK,
-            new ExampleChangeScreenExtensionTwo.Factory(), "second");
+            new ExampleChangeScreenExtensionTwo.Factory(),
+            "second");
   }
 }
diff --git a/example-wuiChangeScreenHeader/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheader/Module.java b/example-wuiChangeScreenHeader/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheader/Module.java
index d0905d4..8507a5e 100644
--- a/example-wuiChangeScreenHeader/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheader/Module.java
+++ b/example-wuiChangeScreenHeader/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheader/Module.java
@@ -16,9 +16,7 @@
 
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.webui.GwtPlugin;
-import com.google.gerrit.extensions.webui.JavaScriptPlugin;
 import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.gerrit.server.plugins.ServerPluginProvider;
 import com.google.inject.AbstractModule;
 
 public class Module extends AbstractModule {
diff --git a/example-wuiChangeScreenHeader/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheader/client/ExamplePlugin.java b/example-wuiChangeScreenHeader/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheader/client/ExamplePlugin.java
index 33c96a9..5679e0d 100644
--- a/example-wuiChangeScreenHeader/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheader/client/ExamplePlugin.java
+++ b/example-wuiChangeScreenHeader/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheader/client/ExamplePlugin.java
@@ -18,12 +18,7 @@
 import com.google.gerrit.client.Resources;
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.PluginEntryPoint;
-import com.google.gerrit.plugin.client.extension.Panel;
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Button;
 
 public class ExamplePlugin extends PluginEntryPoint {
   public static final Resources RESOURCES = GWT.create(Resources.class);
@@ -33,6 +28,7 @@
     Plugin.get()
         .panel(
             GerritUiExtensionPoint.CHANGE_SCREEN_HEADER,
-            new ChangeScreenStatusExtension.Factory(), "status");
+            new ChangeScreenStatusExtension.Factory(),
+            "status");
   }
 }
diff --git a/example-wuiChangeScreenHeaderRightOfButtons/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofbuttons/Module.java b/example-wuiChangeScreenHeaderRightOfButtons/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofbuttons/Module.java
index bc92f20..25b6824 100644
--- a/example-wuiChangeScreenHeaderRightOfButtons/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofbuttons/Module.java
+++ b/example-wuiChangeScreenHeaderRightOfButtons/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofbuttons/Module.java
@@ -16,9 +16,7 @@
 
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.webui.GwtPlugin;
-import com.google.gerrit.extensions.webui.JavaScriptPlugin;
 import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.gerrit.server.plugins.ServerPluginProvider;
 import com.google.inject.AbstractModule;
 
 public class Module extends AbstractModule {
diff --git a/example-wuiChangeScreenHeaderRightOfButtons/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofbuttons/client/ExamplePlugin.java b/example-wuiChangeScreenHeaderRightOfButtons/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofbuttons/client/ExamplePlugin.java
index c2bf459..e1200a3 100644
--- a/example-wuiChangeScreenHeaderRightOfButtons/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofbuttons/client/ExamplePlugin.java
+++ b/example-wuiChangeScreenHeaderRightOfButtons/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofbuttons/client/ExamplePlugin.java
@@ -46,6 +46,7 @@
                     });
                 panel.setWidget(b);
               }
-            }, "library_compliance");
+            },
+            "library_compliance");
   }
 }
diff --git a/example-wuiChangeScreenHeaderRightOfPopDowns/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofpopdowns/Module.java b/example-wuiChangeScreenHeaderRightOfPopDowns/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofpopdowns/Module.java
index fade050..d9d071b 100644
--- a/example-wuiChangeScreenHeaderRightOfPopDowns/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofpopdowns/Module.java
+++ b/example-wuiChangeScreenHeaderRightOfPopDowns/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofpopdowns/Module.java
@@ -16,9 +16,7 @@
 
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.webui.GwtPlugin;
-import com.google.gerrit.extensions.webui.JavaScriptPlugin;
 import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.gerrit.server.plugins.ServerPluginProvider;
 import com.google.inject.AbstractModule;
 
 public class Module extends AbstractModule {
diff --git a/example-wuiChangeScreenHeaderRightOfPopDowns/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofpopdowns/client/ExamplePlugin.java b/example-wuiChangeScreenHeaderRightOfPopDowns/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofpopdowns/client/ExamplePlugin.java
index 7bcd400..582b7b6 100644
--- a/example-wuiChangeScreenHeaderRightOfPopDowns/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofpopdowns/client/ExamplePlugin.java
+++ b/example-wuiChangeScreenHeaderRightOfPopDowns/src/main/java/com/googlesource/gerrit/plugins/examples/wuichangescreenheaderrightofpopdowns/client/ExamplePlugin.java
@@ -18,12 +18,7 @@
 import com.google.gerrit.client.Resources;
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.PluginEntryPoint;
-import com.google.gerrit.plugin.client.extension.Panel;
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Button;
 
 public class ExamplePlugin extends PluginEntryPoint {
   public static final Resources RESOURCES = GWT.create(Resources.class);
@@ -33,6 +28,7 @@
     Plugin.get()
         .panel(
             GerritUiExtensionPoint.CHANGE_SCREEN_HEADER_RIGHT_OF_POP_DOWNS,
-            new BuildsDropDownPanel.Factory(), "status");
+            new BuildsDropDownPanel.Factory(),
+            "status");
   }
 }
diff --git a/example-wuiPreferenceScreenBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuipreferencescreenbottom/Module.java b/example-wuiPreferenceScreenBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuipreferencescreenbottom/Module.java
index 306be40..79883b0 100644
--- a/example-wuiPreferenceScreenBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuipreferencescreenbottom/Module.java
+++ b/example-wuiPreferenceScreenBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuipreferencescreenbottom/Module.java
@@ -16,9 +16,7 @@
 
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.webui.GwtPlugin;
-import com.google.gerrit.extensions.webui.JavaScriptPlugin;
 import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.gerrit.server.plugins.ServerPluginProvider;
 import com.google.inject.AbstractModule;
 
 public class Module extends AbstractModule {
diff --git a/example-wuiPreferenceScreenBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuipreferencescreenbottom/client/ExamplePlugin.java b/example-wuiPreferenceScreenBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuipreferencescreenbottom/client/ExamplePlugin.java
index 8a88fba..2714cf6 100644
--- a/example-wuiPreferenceScreenBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuipreferencescreenbottom/client/ExamplePlugin.java
+++ b/example-wuiPreferenceScreenBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuipreferencescreenbottom/client/ExamplePlugin.java
@@ -18,12 +18,7 @@
 import com.google.gerrit.client.Resources;
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.PluginEntryPoint;
-import com.google.gerrit.plugin.client.extension.Panel;
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Button;
 
 public class ExamplePlugin extends PluginEntryPoint {
   public static final Resources RESOURCES = GWT.create(Resources.class);
diff --git a/example-wuiProfileExtensionBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuiprofileextensionbottom/Module.java b/example-wuiProfileExtensionBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuiprofileextensionbottom/Module.java
index 637b947..ef5d5a2 100644
--- a/example-wuiProfileExtensionBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuiprofileextensionbottom/Module.java
+++ b/example-wuiProfileExtensionBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuiprofileextensionbottom/Module.java
@@ -16,9 +16,7 @@
 
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.webui.GwtPlugin;
-import com.google.gerrit.extensions.webui.JavaScriptPlugin;
 import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.gerrit.server.plugins.ServerPluginProvider;
 import com.google.inject.AbstractModule;
 
 public class Module extends AbstractModule {
diff --git a/example-wuiProfileExtensionBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuiprofileextensionbottom/client/ExamplePlugin.java b/example-wuiProfileExtensionBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuiprofileextensionbottom/client/ExamplePlugin.java
index a537b27..2770325 100644
--- a/example-wuiProfileExtensionBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuiprofileextensionbottom/client/ExamplePlugin.java
+++ b/example-wuiProfileExtensionBottom/src/main/java/com/googlesource/gerrit/plugins/examples/wuiprofileextensionbottom/client/ExamplePlugin.java
@@ -18,12 +18,7 @@
 import com.google.gerrit.client.Resources;
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.PluginEntryPoint;
-import com.google.gerrit.plugin.client.extension.Panel;
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Button;
 
 public class ExamplePlugin extends PluginEntryPoint {
   public static final Resources RESOURCES = GWT.create(Resources.class);
@@ -33,6 +28,7 @@
     Plugin.get()
         .panel(
             GerritUiExtensionPoint.PROFILE_SCREEN_BOTTOM,
-	    new ExampleProfileExtension.Factory(), "account_info");
+            new ExampleProfileExtension.Factory(),
+            "account_info");
   }
 }
diff --git a/example-wuiSettingsScreen/src/main/java/com/googlesource/gerrit/plugins/examples/wuisettingsscreen/Module.java b/example-wuiSettingsScreen/src/main/java/com/googlesource/gerrit/plugins/examples/wuisettingsscreen/Module.java
index c17232d..bb203d2 100644
--- a/example-wuiSettingsScreen/src/main/java/com/googlesource/gerrit/plugins/examples/wuisettingsscreen/Module.java
+++ b/example-wuiSettingsScreen/src/main/java/com/googlesource/gerrit/plugins/examples/wuisettingsscreen/Module.java
@@ -16,9 +16,7 @@
 
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.webui.GwtPlugin;
-import com.google.gerrit.extensions.webui.JavaScriptPlugin;
 import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.gerrit.server.plugins.ServerPluginProvider;
 import com.google.inject.AbstractModule;
 
 public class Module extends AbstractModule {
diff --git a/example-wuiSettingsScreen/src/main/java/com/googlesource/gerrit/plugins/examples/wuisettingsscreen/client/ExamplePlugin.java b/example-wuiSettingsScreen/src/main/java/com/googlesource/gerrit/plugins/examples/wuisettingsscreen/client/ExamplePlugin.java
index 292e649..c612751 100644
--- a/example-wuiSettingsScreen/src/main/java/com/googlesource/gerrit/plugins/examples/wuisettingsscreen/client/ExamplePlugin.java
+++ b/example-wuiSettingsScreen/src/main/java/com/googlesource/gerrit/plugins/examples/wuisettingsscreen/client/ExamplePlugin.java
@@ -14,16 +14,10 @@
 
 package com.googlesource.gerrit.plugins.examples.wuisettingsscreen.client;
 
-import com.google.gerrit.client.GerritUiExtensionPoint;
 import com.google.gerrit.client.Resources;
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.PluginEntryPoint;
-import com.google.gerrit.plugin.client.extension.Panel;
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.Button;
 
 public class ExamplePlugin extends PluginEntryPoint {
   public static final Resources RESOURCES = GWT.create(Resources.class);
