diff --git a/src/main/java/com/googlesource/gerrit/plugins/zuul/GetCrd.java b/src/main/java/com/googlesource/gerrit/plugins/zuul/GetCrd.java
index cae884c..ec4a7ba 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/zuul/GetCrd.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/zuul/GetCrd.java
@@ -28,18 +28,16 @@
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
-import org.eclipse.jgit.lib.ObjectId;
-import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.revwalk.RevCommit;
-import org.eclipse.jgit.revwalk.RevWalk;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevWalk;
 
 @Singleton
 public class GetCrd implements RestReadView<RevisionResource> {
@@ -55,8 +53,8 @@
   @Override
   @SuppressWarnings("unchecked")
   public CrdInfo apply(RevisionResource rsrc)
-      throws RepositoryNotFoundException, IOException, BadRequestException,
-      AuthException, OrmException {
+      throws RepositoryNotFoundException, IOException, BadRequestException, AuthException,
+          OrmException {
 
     CrdInfo out = new CrdInfo();
     out.dependsOn = new ArrayList<>();
@@ -69,8 +67,7 @@
       String rev = rsrc.getPatchSet().getRevision().get();
       RevCommit commit = rw.parseCommit(ObjectId.fromString(rev));
       String commitMsg = commit.getFullMessage();
-      Pattern pattern = Pattern.compile("[Dd]epends-[Oo]n:? (I[0-9a-f]{8,40})",
-          Pattern.DOTALL);
+      Pattern pattern = Pattern.compile("[Dd]epends-[Oo]n:? (I[0-9a-f]{8,40})", Pattern.DOTALL);
       Matcher matcher = pattern.matcher(commitMsg);
       while (matcher.find()) {
         out.dependsOn.add(matcher.group(1));
@@ -82,8 +79,7 @@
     QueryChanges query = changes.list();
     String neededByQuery = "message:" + chgKey + " -change:" + chgKey;
     query.addQuery(neededByQuery);
-    List<ChangeInfo> changes =
-        (List<ChangeInfo>) query.apply(TopLevelResource.INSTANCE);
+    List<ChangeInfo> changes = (List<ChangeInfo>) query.apply(TopLevelResource.INSTANCE);
     // check for dependency cycles
     for (ChangeInfo change : changes) {
       if (out.dependsOn.contains(change.changeId)) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/zuul/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/zuul/HttpModule.java
index 6c6ad48..3dd15eb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/zuul/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/zuul/HttpModule.java
@@ -23,7 +23,6 @@
 
   @Override
   protected void configureServlets() {
-    DynamicSet.bind(binder(), WebUiPlugin.class)
-        .toInstance(new GwtPlugin("zuul"));
+    DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(new GwtPlugin("zuul"));
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/zuul/Module.java b/src/main/java/com/googlesource/gerrit/plugins/zuul/Module.java
index ee40f88..67b9745 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/zuul/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/zuul/Module.java
@@ -23,11 +23,12 @@
 
   @Override
   protected void configure() {
-    install(new RestApiModule() {
-      @Override
-      protected void configure() {
-        get(REVISION_KIND, "crd").to(GetCrd.class);
-      }
-    });
+    install(
+        new RestApiModule() {
+          @Override
+          protected void configure() {
+            get(REVISION_KIND, "crd").to(GetCrd.class);
+          }
+        });
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/zuul/client/DependencyInfo.java b/src/main/java/com/googlesource/gerrit/plugins/zuul/client/DependencyInfo.java
index 6541ffa..d1d37d2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/zuul/client/DependencyInfo.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/zuul/client/DependencyInfo.java
@@ -6,9 +6,10 @@
 public class DependencyInfo extends JavaScriptObject {
 
   public final native JsArrayString dependsOn() /*-{ return this.depends_on; }-*/;
+
   public final native JsArrayString neededBy() /*-{ return this.needed_by; }-*/;
+
   public final native boolean cycle() /*-{ return this.cycle; }-*/;
 
-  protected DependencyInfo() {
-  }
+  protected DependencyInfo() {}
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/zuul/client/LabelPanel.java b/src/main/java/com/googlesource/gerrit/plugins/zuul/client/LabelPanel.java
index 6e49ee9..68c1756 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/zuul/client/LabelPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/zuul/client/LabelPanel.java
@@ -25,7 +25,6 @@
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Label;
-
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwtexpui.clippy.client.CopyableLabel;
 
@@ -37,31 +36,33 @@
     }
   }
 
-  private final static String COLOR_RED = "#F00";
+  private static final String COLOR_RED = "#F00";
 
   LabelPanel(final Panel panel) {
-    final ChangeInfo change =
-        panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
-    final RevisionInfo rev =
-        panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
+    final ChangeInfo change = panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
+    final RevisionInfo rev = panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
 
     if (!rev.isEdit()) {
       String decodedChangeId = URL.decodePathSegment(change.id());
-      new RestApi("changes").id(decodedChangeId).view("revisions").id(rev.id())
+      new RestApi("changes")
+          .id(decodedChangeId)
+          .view("revisions")
+          .id(rev.id())
           .view(Plugin.get().getPluginName(), "crd")
-          .get(new AsyncCallback<DependencyInfo>() {
-            @Override
-            public void onSuccess(DependencyInfo result) {
-              if (result != null) {
-                display(result);
-              }
-            }
+          .get(
+              new AsyncCallback<DependencyInfo>() {
+                @Override
+                public void onSuccess(DependencyInfo result) {
+                  if (result != null) {
+                    display(result);
+                  }
+                }
 
-            @Override
-            public void onFailure(Throwable caught) {
-              // never invoked
-            }
-          });
+                @Override
+                public void onFailure(Throwable caught) {
+                  // never invoked
+                }
+              });
     }
   }
 
@@ -70,7 +71,7 @@
     int column = 1;
     Grid grid = new Grid(row, column);
     // show depends-on ids
-    for (int i=0; i < result.dependsOn().length(); i++) {
+    for (int i = 0; i < result.dependsOn().length(); i++) {
       HorizontalPanel p = new HorizontalPanel();
       p.addStyleName("infoBlock");
       Label label = new Label("Depends-on");
@@ -86,7 +87,7 @@
       row++;
     }
     // show needed-by ids
-    for (int i=0; i < result.neededBy().length(); i++) {
+    for (int i = 0; i < result.neededBy().length(); i++) {
       HorizontalPanel p = new HorizontalPanel();
       p.addStyleName("infoBlock");
       Label label = new Label("Needed-by");
diff --git a/src/main/java/com/googlesource/gerrit/plugins/zuul/client/ZuulPlugin.java b/src/main/java/com/googlesource/gerrit/plugins/zuul/client/ZuulPlugin.java
index ecd24df..9336f47 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/zuul/client/ZuulPlugin.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/zuul/client/ZuulPlugin.java
@@ -26,9 +26,10 @@
   @Override
   public void onPluginLoad() {
 
-    Plugin.get().panel(
-        GerritUiExtensionPoint.CHANGE_SCREEN_BELOW_COMMIT_INFO_BLOCK,
-        new LabelPanel.Factory(),
-        null);
+    Plugin.get()
+        .panel(
+            GerritUiExtensionPoint.CHANGE_SCREEN_BELOW_COMMIT_INFO_BLOCK,
+            new LabelPanel.Factory(),
+            null);
   }
 }
