diff --git a/.bazelversion b/.bazelversion
index 0062ac9..91e4a9f 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-5.0.0
+6.3.2
diff --git a/.zuul.yaml b/.zuul.yaml
new file mode 100644
index 0000000..0758980
--- /dev/null
+++ b/.zuul.yaml
@@ -0,0 +1,4 @@
+- project:
+    check:
+      jobs:
+        - gitiles-build
diff --git a/WORKSPACE b/WORKSPACE
index ff06b2b..0c55d21 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -38,6 +38,18 @@
 register_toolchains("//tools:error_prone_warnings_toolchain_java17_definition")
 
 maven_jar(
+    name = "error-prone-annotations",
+    artifact = "com.google.errorprone:error_prone_annotations:2.22.0",
+    sha1 = "bfb9e4281a4cea34f0ec85b3acd47621cfab35b4",
+)
+
+maven_jar(
+    name = "commons-codec",
+    artifact = "commons-codec:commons-codec:1.15",
+    sha1 = "49d94806b6e3dc933dacbd8acb0fdbab8ebd1e5d",
+)
+
+maven_jar(
     name = "commons-lang3",
     artifact = "org.apache.commons:commons-lang3:3.8.1",
     sha1 = "6505a72a097d9270f7a9e7bf42c4238283247755",
@@ -57,8 +69,8 @@
 
 maven_jar(
     name = "guava",
-    artifact = "com.google.guava:guava:30.1-jre",
-    sha1 = "00d0c3ce2311c9e36e73228da25a6e99b2ab826f",
+    artifact = "com.google.guava:guava:32.1.2-jre",
+    sha1 = "5e64ec7e056456bef3a4bc4c6fdaef71e8ab6318",
 )
 
 maven_jar(
@@ -128,8 +140,40 @@
 
 maven_jar(
     name = "soy",
-    artifact = "com.google.template:soy:2021-02-01",
-    sha1 = "8e833744832ba88059205a1e30e0898f925d8cb5",
+    artifact = "com.google.template:soy:2022-07-20",
+    sha1 = "f64eb90da6d91beddf11653865c90f26d26710cf",
+)
+
+FLOGGER_VERS = "0.7.4"
+
+maven_jar(
+    name = "log4j",
+    artifact = "ch.qos.reload4j:reload4j:1.2.18.0",
+    sha1 = "03b2b708403ab00eb0678bffdbbd567070bbdfab",
+)
+
+maven_jar(
+    name = "flogger",
+    artifact = "com.google.flogger:flogger:" + FLOGGER_VERS,
+    sha1 = "cec29ed8b58413c2e935d86b12d6b696dc285419",
+)
+
+maven_jar(
+    name = "flogger-log4j-backend",
+    artifact = "com.google.flogger:flogger-log4j-backend:" + FLOGGER_VERS,
+    sha1 = "7486b1c0138647cd7714eccb8ce37b5f2ae20a76",
+)
+
+maven_jar(
+    name = "flogger-google-extensions",
+    artifact = "com.google.flogger:google-extensions:" + FLOGGER_VERS,
+    sha1 = "c49493bd815e3842b8406e21117119d560399977",
+)
+
+maven_jar(
+    name = "flogger-system-backend",
+    artifact = "com.google.flogger:flogger-system-backend:" + FLOGGER_VERS,
+    sha1 = "4bee7ebbd97c63ca7fb17529aeb49a57b670d061",
 )
 
 maven_jar(
@@ -225,32 +269,6 @@
     sha1 = "a41f9cfe6faafb2eb83a1c7dd2d0dfd844e2a936",
 )
 
-GUICE_VERSION = "5.0.1"
-
-maven_jar(
-    name = "guice-library",
-    artifact = "com.google.inject:guice:" + GUICE_VERSION,
-    sha1 = "0dae7556b441cada2b4f0a2314eb68e1ff423429",
-)
-
-maven_jar(
-    name = "guice-assistedinject",
-    artifact = "com.google.inject.extensions:guice-assistedinject:" + GUICE_VERSION,
-    sha1 = "62e02f2aceb7d90ba354584dacc018c1e94ff01c",
-)
-
-maven_jar(
-    name = "aopalliance",
-    artifact = "aopalliance:aopalliance:1.0",
-    sha1 = "0235ba8b489512805ac13a8f9ea77a1ca5ebe3e8",
-)
-
-maven_jar(
-    name = "javax-inject",
-    artifact = "javax.inject:javax.inject:1",
-    sha1 = "6975da39a7040257bd51d21a231b76c915872d38",
-)
-
 JETTY_VERSION = "9.4.49.v20220914"
 
 maven_jar(
diff --git a/java/com/google/gitiles/AbstractHttpFilter.java b/java/com/google/gitiles/AbstractHttpFilter.java
index f1a7657..51035b7 100644
--- a/java/com/google/gitiles/AbstractHttpFilter.java
+++ b/java/com/google/gitiles/AbstractHttpFilter.java
@@ -42,7 +42,12 @@
     // Default implementation does nothing.
   }
 
-  /** @see #doFilter(ServletRequest, ServletResponse, FilterChain) */
+  /**
+   * The FilterChain passed in to this method allows the Filter to pass on the request and response
+   * to the next entity in the chain.
+   *
+   * @see #doFilter(ServletRequest, ServletResponse, FilterChain)
+   */
   public abstract void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain)
       throws IOException, ServletException;
 }
diff --git a/java/com/google/gitiles/BUILD b/java/com/google/gitiles/BUILD
index 4b0850a..58934c0 100644
--- a/java/com/google/gitiles/BUILD
+++ b/java/com/google/gitiles/BUILD
@@ -6,6 +6,7 @@
     "//lib:autolink",
     "//lib:commons-lang3",
     "//lib:commons-text",
+    "//lib:errorprone-annotations",
     "//lib:gson",
     "//lib:guava",
     "//lib:html-types",
@@ -18,13 +19,13 @@
     "//lib:jgit",
     "//lib:jgit-servlet",
     "//lib:slf4j-api",
-    "//lib/soy:soy",
+    "//lib/flogger",
+    "//lib/soy",
     "//java/com/google/gitiles/blame/cache",
 ]
 
 DEPS_ALL = DEPS + [
     "//lib:jgit-archive",
-    "//lib/guice:guice",
 ]
 
 java_library(
diff --git a/java/com/google/gitiles/BaseServlet.java b/java/com/google/gitiles/BaseServlet.java
index 860ffd8..2aea97d 100644
--- a/java/com/google/gitiles/BaseServlet.java
+++ b/java/com/google/gitiles/BaseServlet.java
@@ -133,6 +133,8 @@
   }
 
   /**
+   * Get default format
+   *
    * @param req in-progress request.
    * @return the default {@link FormatType} used when {@code ?format=} is not specified.
    */
@@ -294,8 +296,8 @@
    *
    * @param req in-progress request.
    * @param res in-progress response.
-   * @param src @see com.google.gson.Gson#toJson(Object, Type, Appendable)
-   * @param typeOfSrc @see com.google.gson.Gson#toJson(Object, Type, Appendable)
+   * @param src source, @see com.google.gson.Gson#toJson(Object, Type, Appendable)
+   * @param typeOfSrc type of source, @see com.google.gson.Gson#toJson(Object, Type, Appendable)
    */
   protected void renderJson(
       HttpServletRequest req, HttpServletResponse res, Object src, Type typeOfSrc)
@@ -317,6 +319,8 @@
   }
 
   /**
+   * Start to render text.
+   *
    * @see #startRenderText(HttpServletRequest, HttpServletResponse)
    * @param req in-progress request.
    * @param res in-progress response.
@@ -353,7 +357,7 @@
    * @param res in-progress response.
    * @param statusCode HTTP status code.
    * @param message full message text.
-   * @throws IOException
+   * @throws IOException if an IO error occurred.
    */
   protected void renderTextError(
       HttpServletRequest req, HttpServletResponse res, int statusCode, String message)
diff --git a/java/com/google/gitiles/BlobSoyData.java b/java/com/google/gitiles/BlobSoyData.java
index 7e96d65..a6879ae 100644
--- a/java/com/google/gitiles/BlobSoyData.java
+++ b/java/com/google/gitiles/BlobSoyData.java
@@ -28,6 +28,7 @@
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import javax.annotation.Nullable;
 import org.eclipse.jgit.diff.RawText;
 import org.eclipse.jgit.errors.LargeObjectException;
 import org.eclipse.jgit.errors.MissingObjectException;
@@ -194,7 +195,7 @@
     return n < end ? n : -1;
   }
 
-  private static String extension(String path, String content) {
+  private static @Nullable String extension(String path, String content) {
     if (content.startsWith("#!/bin/sh") || content.startsWith("#!/bin/bash")) {
       return "sh";
     } else if (content.startsWith("#!/usr/bin/perl")) {
diff --git a/java/com/google/gitiles/CommitJsonData.java b/java/com/google/gitiles/CommitJsonData.java
index 5f94a70..478d98f 100644
--- a/java/com/google/gitiles/CommitJsonData.java
+++ b/java/com/google/gitiles/CommitJsonData.java
@@ -64,7 +64,7 @@
     List<Diff> treeDiff;
   }
 
-  /** @see DiffEntry */
+  /** Diff @see DiffEntry */
   static class Diff {
     String type;
     String oldId;
@@ -108,7 +108,7 @@
     if (cd.message != null) {
       result.message = cd.message;
     }
-    if (cd.notes != null && !cd.notes.isEmpty()){
+    if (cd.notes != null && !cd.notes.isEmpty()) {
       result.notes = cd.notes;
     }
     if (cd.diffEntries != null) {
diff --git a/java/com/google/gitiles/CommitSoyData.java b/java/com/google/gitiles/CommitSoyData.java
index ac81f80..e3e5e2b 100644
--- a/java/com/google/gitiles/CommitSoyData.java
+++ b/java/com/google/gitiles/CommitSoyData.java
@@ -185,7 +185,7 @@
       if (parents.size() == 1) {
         parentName = view.getRevision().getName() + "^";
       } else {
-        parentName = view.getRevision().getName() + "^" + (i++);
+        parentName = view.getRevision().getName() + "^" + i++;
       }
       diff.setOldRevision(parentName, parent);
 
diff --git a/java/com/google/gitiles/DescribeServlet.java b/java/com/google/gitiles/DescribeServlet.java
index 545f3aa..c3b178e 100644
--- a/java/com/google/gitiles/DescribeServlet.java
+++ b/java/com/google/gitiles/DescribeServlet.java
@@ -22,6 +22,7 @@
 import java.io.Writer;
 import java.util.List;
 import java.util.Map;
+import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.api.Git;
@@ -91,7 +92,7 @@
     }
   }
 
-  private String describe(Repository repo, GitilesView view, HttpServletRequest req)
+  private @Nullable String describe(Repository repo, GitilesView view, HttpServletRequest req)
       throws IOException {
     if (!getBooleanParam(view, CONTAINS_PARAM)) {
       throw new GitilesRequestFailureException(FailureReason.INCORECT_PARAMETER);
diff --git a/java/com/google/gitiles/DiffServlet.java b/java/com/google/gitiles/DiffServlet.java
index 03353ac..53552e9 100644
--- a/java/com/google/gitiles/DiffServlet.java
+++ b/java/com/google/gitiles/DiffServlet.java
@@ -26,6 +26,7 @@
 import java.util.Arrays;
 import java.util.Map;
 import java.util.Set;
+import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.diff.DiffFormatter;
@@ -140,7 +141,7 @@
     }
   }
 
-  private static TreeWalk newTreeWalk(RevWalk walk, GitilesView view) throws IOException {
+  private static @Nullable TreeWalk newTreeWalk(RevWalk walk, GitilesView view) throws IOException {
     if (view.getPathPart().isEmpty()) {
       return null;
     }
diff --git a/java/com/google/gitiles/FormatType.java b/java/com/google/gitiles/FormatType.java
index 3a2579a..8751937 100644
--- a/java/com/google/gitiles/FormatType.java
+++ b/java/com/google/gitiles/FormatType.java
@@ -15,6 +15,7 @@
 package com.google.gitiles;
 
 import com.google.common.base.Enums;
+import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.net.HttpHeaders;
 import java.util.Optional;
@@ -29,6 +30,8 @@
 
   private static final String FORMAT_TYPE_ATTRIBUTE = FormatType.class.getName();
 
+  private static final Splitter SPLITTER = Splitter.onPattern("[ ,;][ ,;]*");
+
   public static Optional<FormatType> getFormatType(HttpServletRequest req) {
     @SuppressWarnings("unchecked")
     Optional<FormatType> result = (Optional<FormatType>) req.getAttribute(FORMAT_TYPE_ATTRIBUTE);
@@ -47,7 +50,7 @@
       return set(req, Optional.of(DEFAULT));
     }
 
-    for (String p : accept.split("[ ,;][ ,;]*")) {
+    for (String p : SPLITTER.split(accept)) {
       for (FormatType type : FormatType.values()) {
         if (p.equals(type.mimeType)) {
           return set(req, Optional.of(type != HTML ? type : DEFAULT));
diff --git a/java/com/google/gitiles/GitilesAccess.java b/java/com/google/gitiles/GitilesAccess.java
index 505098a..55d6922 100644
--- a/java/com/google/gitiles/GitilesAccess.java
+++ b/java/com/google/gitiles/GitilesAccess.java
@@ -68,21 +68,31 @@
       throws ServiceNotEnabledException, ServiceNotAuthorizedException, IOException;
 
   /**
+   * Get user key.
+   *
    * @return an opaque object that uniquely identifies the end-user making the request, and supports
    *     {@link Object#equals(Object)} and {@link Object#hashCode()}. Never null.
    */
   Object getUserKey();
 
-  /** @return the repository name associated with the request. */
+  /**
+   * Get repository name.
+   *
+   * @return the repository name associated with the request.
+   */
   String getRepositoryName();
 
   /**
+   * Get repository description.
+   *
    * @return the description attached to the repository of this request.
    * @throws IOException an error occurred reading the description string from the repository.
    */
   RepositoryDescription getRepositoryDescription() throws IOException;
 
   /**
+   * Get configuration.
+   *
    * @return configuration to apply to the host/repository for this request.
    * @throws IOException an error occurred reading the configuration.
    */
diff --git a/java/com/google/gitiles/GitilesFilter.java b/java/com/google/gitiles/GitilesFilter.java
index da6044b..41c6ea4 100644
--- a/java/com/google/gitiles/GitilesFilter.java
+++ b/java/com/google/gitiles/GitilesFilter.java
@@ -229,10 +229,7 @@
     }
     root.through(dispatchFilter);
 
-    serveRegex(REPO_REGEX)
-        .through(repositoryFilter)
-        .through(viewFilter)
-        .through(dispatchFilter);
+    serveRegex(REPO_REGEX).through(repositoryFilter).through(viewFilter).through(dispatchFilter);
 
     serveRegex(REPO_PATH_REGEX)
         .through(repositoryFilter)
diff --git a/java/com/google/gitiles/GitilesRequestFailureException.java b/java/com/google/gitiles/GitilesRequestFailureException.java
index dd990a8..c4fd48a 100644
--- a/java/com/google/gitiles/GitilesRequestFailureException.java
+++ b/java/com/google/gitiles/GitilesRequestFailureException.java
@@ -20,6 +20,8 @@
 import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
 import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED;
 
+import com.google.errorprone.annotations.FormatMethod;
+import com.google.errorprone.annotations.FormatString;
 import java.util.Optional;
 import javax.annotation.Nullable;
 
@@ -102,7 +104,9 @@
     this.reason = reason;
   }
 
-  public GitilesRequestFailureException withPublicErrorMessage(String format, Object... params) {
+  @FormatMethod
+  public GitilesRequestFailureException withPublicErrorMessage(
+      @FormatString String format, Object... params) {
     this.publicErrorMessage = String.format(format, params);
     return this;
   }
diff --git a/java/com/google/gitiles/GitilesView.java b/java/com/google/gitiles/GitilesView.java
index e721c26..9bb43a9 100644
--- a/java/com/google/gitiles/GitilesView.java
+++ b/java/com/google/gitiles/GitilesView.java
@@ -39,6 +39,7 @@
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Map;
+import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.revwalk.RevObject;
@@ -374,6 +375,7 @@
       return build().toUrl();
     }
 
+    @SuppressWarnings("AnnotateFormatMethod")
     private void checkView(boolean expr, String msg, Object... args) {
       if (!expr) {
         throw new InvalidViewException(String.format(msg, args));
@@ -560,7 +562,7 @@
     return oldRevision;
   }
 
-  public String getRevisionRange() {
+  public @Nullable String getRevisionRange() {
     if (Revision.isNull(oldRevision)) {
       if (type == Type.LOG || type == Type.DIFF) {
         // For types that require two revisions, NULL indicates the empty
@@ -617,7 +619,11 @@
     return b.toString();
   }
 
-  /** @return an escaped, relative URL representing this view. */
+  /**
+   * Create relative URL representing this view.
+   *
+   * @return an escaped, relative URL representing this view.
+   */
   public String toUrl() {
     StringBuilder url = new StringBuilder(servletPath).append('/');
     ListMultimap<String, String> params = this.params;
@@ -726,6 +732,8 @@
   }
 
   /**
+   * Get breadcrumbs.
+   *
    * @return a list of maps with "text" and "url" keys for all file paths leading up to the path
    *     represented by this view. All URLs allow auto-diving into one-entry subtrees; see also
    *     {@link #getBreadcrumbs(List)}.
@@ -737,6 +745,8 @@
   private static final EnumSet<Type> NON_HTML_TYPES = EnumSet.of(Type.DESCRIBE, Type.ARCHIVE);
 
   /**
+   * Get breadcrumbs.
+   *
    * @param hasSingleTree list of booleans, one per path entry in this view's path excluding the
    *     leaf. True entries indicate the tree at that path only has a single entry that is another
    *     tree.
diff --git a/java/com/google/gitiles/GitwebRedirectFilter.java b/java/com/google/gitiles/GitwebRedirectFilter.java
index cc8bca0..52a6965 100644
--- a/java/com/google/gitiles/GitwebRedirectFilter.java
+++ b/java/com/google/gitiles/GitwebRedirectFilter.java
@@ -32,6 +32,7 @@
 import java.net.URLDecoder;
 import java.util.List;
 import java.util.regex.Pattern;
+import javax.annotation.Nullable;
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -146,7 +147,7 @@
     return Iterables.getFirst(params.get(checkNotNull(name)), null);
   }
 
-  private static Revision toRevision(String rev) {
+  private static @Nullable Revision toRevision(String rev) {
     if (Strings.isNullOrEmpty(rev)) {
       return null;
     } else if ("HEAD".equals(rev) || rev.startsWith("refs/")) {
diff --git a/java/com/google/gitiles/IdentRevFilter.java b/java/com/google/gitiles/IdentRevFilter.java
index ef3ddf8..bc29373 100644
--- a/java/com/google/gitiles/IdentRevFilter.java
+++ b/java/com/google/gitiles/IdentRevFilter.java
@@ -51,7 +51,11 @@
     return this;
   }
 
-  /** @return whether the given person matches the author filter. */
+  /**
+   * Whether the given person matches the author filter.
+   *
+   * @return whether the given person matches the author filter.
+   */
   @VisibleForTesting
   boolean matchesPerson(PersonIdent person) {
     // Equivalent to --fixed-strings, to avoid pathological performance of Java
diff --git a/java/com/google/gitiles/LogServlet.java b/java/com/google/gitiles/LogServlet.java
index 51ab68d..9a66ef8 100644
--- a/java/com/google/gitiles/LogServlet.java
+++ b/java/com/google/gitiles/LogServlet.java
@@ -36,6 +36,7 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.diff.DiffConfig;
@@ -178,7 +179,8 @@
     }
   }
 
-  private static GitilesView getView(HttpServletRequest req, Repository repo) throws IOException {
+  private static @Nullable GitilesView getView(HttpServletRequest req, Repository repo)
+      throws IOException {
     GitilesView view = ViewFilter.getView(req);
     if (!Revision.isNull(view.getRevision())) {
       return view;
@@ -225,7 +227,7 @@
     }
   }
 
-  private static RevWalk newWalk(Repository repo, GitilesView view, GitilesAccess access)
+  private static @Nullable RevWalk newWalk(Repository repo, GitilesView view, GitilesAccess access)
       throws MissingObjectException, IOException {
     RevWalk walk = new RevWalk(repo);
     if (isTrue(view, FIRST_PARENT_PARAM)) {
@@ -307,8 +309,8 @@
     return Boolean.TRUE.equals(StringUtils.toBooleanOrNull(v));
   }
 
-  private static Paginator newPaginator(Repository repo, GitilesView view, GitilesAccess access)
-      throws IOException {
+  private static @Nullable Paginator newPaginator(
+      Repository repo, GitilesView view, GitilesAccess access) throws IOException {
     if (view == null) {
       return null;
     }
diff --git a/java/com/google/gitiles/LogSoyData.java b/java/com/google/gitiles/LogSoyData.java
index 34b290f..061ce23 100644
--- a/java/com/google/gitiles/LogSoyData.java
+++ b/java/com/google/gitiles/LogSoyData.java
@@ -144,7 +144,7 @@
         "entry", entry);
   }
 
-  private Map<String, Object> toRenameSoyData(DiffEntry entry) {
+  private @Nullable Map<String, Object> toRenameSoyData(DiffEntry entry) {
     if (entry == null) {
       return null;
     }
diff --git a/java/com/google/gitiles/Paginator.java b/java/com/google/gitiles/Paginator.java
index 3060e45..eed7b75 100644
--- a/java/com/google/gitiles/Paginator.java
+++ b/java/com/google/gitiles/Paginator.java
@@ -121,7 +121,8 @@
    * @throws IncorrectObjectTypeException See {@link RevWalk#next()}.
    * @throws IOException See {@link RevWalk#next()}.
    */
-  public RevCommit next() throws MissingObjectException, IncorrectObjectTypeException, IOException {
+  public @Nullable RevCommit next()
+      throws MissingObjectException, IncorrectObjectTypeException, IOException {
     if (done) {
       return null;
     }
@@ -160,6 +161,8 @@
   }
 
   /**
+   * Get previous start.
+   *
    * @return the ID at the start of the page of results preceding this one, or null if this is the
    *     first page.
    */
@@ -168,6 +171,8 @@
   }
 
   /**
+   * Get next start.
+   *
    * @return the ID at the start of the page of results after this one, or null if this is the last
    *     page.
    */
@@ -176,12 +181,18 @@
     return nextStart;
   }
 
-  /** @return entry corresponding to a rename or copy at the given commit. */
-  public DiffEntry getRename(ObjectId commitId) {
+  /**
+   * Get rename.
+   *
+   * @return entry corresponding to a rename or copy at the given commit.
+   */
+  public @Nullable DiffEntry getRename(ObjectId commitId) {
     return renamed != null ? renamed.get(commitId) : null;
   }
 
   /**
+   * Get iterator over the commits in this walk.
+   *
    * @return an iterator over the commits in this walk.
    * @throws RevWalkException if an error occurred, wrapping the checked exception from {@link
    *     #next()}.
diff --git a/java/com/google/gitiles/PathServlet.java b/java/com/google/gitiles/PathServlet.java
index 9475ae7..87d2680 100644
--- a/java/com/google/gitiles/PathServlet.java
+++ b/java/com/google/gitiles/PathServlet.java
@@ -34,6 +34,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Pattern;
+import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -103,7 +104,7 @@
       this.mode = mode;
     }
 
-    static FileType forEntry(TreeWalk tw) {
+    static @Nullable FileType forEntry(TreeWalk tw) {
       int mode = tw.getRawMode(0);
       for (FileType type : values()) {
         if (type.mode.equals(mode)) {
@@ -296,7 +297,7 @@
     }
   }
 
-  private static RevTree getRoot(GitilesView view, RevWalk rw) throws IOException {
+  private static @Nullable RevTree getRoot(GitilesView view, RevWalk rw) throws IOException {
     RevObject obj = rw.peel(rw.parseAny(view.getRevision().getId()));
     switch (obj.getType()) {
       case OBJ_COMMIT:
@@ -380,7 +381,8 @@
    * to help the auto-dive routine as well.
    */
   private static class WalkResult implements AutoCloseable {
-    private static WalkResult recursivePath(RevWalk rw, GitilesView view) throws IOException {
+    private static @Nullable WalkResult recursivePath(RevWalk rw, GitilesView view)
+        throws IOException {
       RevTree root = getRoot(view, rw);
       String path = view.getPathPart();
 
@@ -410,7 +412,7 @@
       return new WalkResult(tw, path, root, root, FileType.TREE, ImmutableList.<Boolean>of());
     }
 
-    private static WalkResult forPath(RevWalk rw, GitilesView view, boolean recursive)
+    private static @Nullable WalkResult forPath(RevWalk rw, GitilesView view, boolean recursive)
         throws IOException {
       if (recursive) {
         return recursivePath(rw, view);
@@ -520,8 +522,8 @@
                     .toSoyData(wr.id, wr.tw)));
   }
 
-  private CanonicalTreeParser getOnlyChildSubtree(ObjectReader reader, ObjectId id, byte[] prefix)
-      throws IOException {
+  private @Nullable CanonicalTreeParser getOnlyChildSubtree(
+      ObjectReader reader, ObjectId id, byte[] prefix) throws IOException {
     CanonicalTreeParser p = new CanonicalTreeParser(prefix, reader, id);
     if (p.eof() || p.getEntryFileMode() != FileMode.TREE) {
       return null;
@@ -655,7 +657,7 @@
     return remoteUrl != null ? remoteUrl : modulesUrl;
   }
 
-  private static String resolveHttpUrl(String remoteUrl) {
+  private static @Nullable String resolveHttpUrl(String remoteUrl) {
     if (remoteUrl == null) {
       return null;
     }
diff --git a/java/com/google/gitiles/PathUtil.java b/java/com/google/gitiles/PathUtil.java
index 2df8cdc..7d230f2 100644
--- a/java/com/google/gitiles/PathUtil.java
+++ b/java/com/google/gitiles/PathUtil.java
@@ -19,13 +19,14 @@
 import com.google.common.base.Strings;
 import com.google.common.io.Files;
 import java.util.StringTokenizer;
+import javax.annotation.Nullable;
 
 /** Static utilities for dealing with pathnames. */
 class PathUtil {
   private static final CharMatcher MATCHER = CharMatcher.is('/');
   static final Splitter SPLITTER = Splitter.on(MATCHER);
 
-  static String simplifyPathUpToRoot(String path, String root) {
+  static @Nullable String simplifyPathUpToRoot(String path, String root) {
     if (path.startsWith("/")) {
       return null;
     }
diff --git a/java/com/google/gitiles/ReadmeHelper.java b/java/com/google/gitiles/ReadmeHelper.java
index a01c7f0..389c73c 100644
--- a/java/com/google/gitiles/ReadmeHelper.java
+++ b/java/com/google/gitiles/ReadmeHelper.java
@@ -19,6 +19,7 @@
 import com.google.gitiles.doc.MarkdownConfig;
 import com.google.gitiles.doc.MarkdownToHtml;
 import java.io.IOException;
+import javax.annotation.Nullable;
 import org.eclipse.jgit.errors.CorruptObjectException;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
@@ -87,6 +88,7 @@
     return readmePath;
   }
 
+  @Nullable
   SafeHtml render() {
     try {
       byte[] raw = reader.open(readmeId, Constants.OBJ_BLOB).getCachedBytes(config.inputLimit);
diff --git a/java/com/google/gitiles/Renderer.java b/java/com/google/gitiles/Renderer.java
index 3bf9754..dd08353 100644
--- a/java/com/google/gitiles/Renderer.java
+++ b/java/com/google/gitiles/Renderer.java
@@ -237,7 +237,7 @@
             .put("staticUrls", staticUrls.build())
             .put("SITE_TITLE", siteTitle);
     Optional<String> nonce = req.map((r) -> (String) r.getAttribute("nonce"));
-    if (nonce.isPresent() && nonce.get() != null) {
+    if (nonce.isPresent()) {
       ij.put("csp_nonce", nonce.get());
     }
     return getSauce().renderTemplate(templateName).setIj(ij.build());
diff --git a/java/com/google/gitiles/RepositoryIndexServlet.java b/java/com/google/gitiles/RepositoryIndexServlet.java
index 0360588..a491976 100644
--- a/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -31,6 +31,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
@@ -154,7 +155,7 @@
     return list.size() > REF_LIMIT ? list.subList(0, REF_LIMIT) : list;
   }
 
-  private static Map<String, Object> renderReadme(
+  private static @Nullable Map<String, Object> renderReadme(
       HttpServletRequest req, RevWalk walk, GitilesView view, Config cfg, RevObject head)
       throws IOException {
     RevTree rootTree;
diff --git a/java/com/google/gitiles/RevisionParser.java b/java/com/google/gitiles/RevisionParser.java
index 8196267..7fbf86c 100644
--- a/java/com/google/gitiles/RevisionParser.java
+++ b/java/com/google/gitiles/RevisionParser.java
@@ -27,6 +27,7 @@
 import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import javax.annotation.Nullable;
 import org.eclipse.jgit.errors.AmbiguousObjectException;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.errors.RevisionSyntaxException;
@@ -114,6 +115,7 @@
     this.branchRedirect = checkNotNull(branchRedirect, "branchRedirect");
   }
 
+  @Nullable
   Result parse(String path) throws IOException {
     if (path.startsWith("/")) {
       path = path.substring(1);
@@ -231,7 +233,7 @@
     }
   }
 
-  private RevObject resolve(String name, RevWalk walk) throws IOException {
+  private @Nullable RevObject resolve(String name, RevWalk walk) throws IOException {
     try {
       ObjectId id = repo.resolve(name);
       return id != null ? walk.parseAny(id) : null;
diff --git a/java/com/google/gitiles/TimeCache.java b/java/com/google/gitiles/TimeCache.java
index e1e55ce..4350d5c 100644
--- a/java/com/google/gitiles/TimeCache.java
+++ b/java/com/google/gitiles/TimeCache.java
@@ -65,7 +65,7 @@
               RevTag tag = (RevTag) o;
               PersonIdent ident = tag.getTaggerIdent();
               if (ident != null) {
-                return ident.getWhen().getTime() / 1000;
+                return ident.getWhenAsInstant().toEpochMilli() / 1000;
               }
               o = tag.getObject();
               walk.parseHeaders(o);
diff --git a/java/com/google/gitiles/TreeSoyData.java b/java/com/google/gitiles/TreeSoyData.java
index 985edfa..4e2a579 100644
--- a/java/com/google/gitiles/TreeSoyData.java
+++ b/java/com/google/gitiles/TreeSoyData.java
@@ -26,6 +26,7 @@
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import javax.annotation.Nullable;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.ObjectId;
@@ -55,7 +56,7 @@
    */
   static final int MAX_SYMLINK_SIZE = 16 << 10;
 
-  static String resolveTargetUrl(GitilesView view, String target) {
+  static @Nullable String resolveTargetUrl(GitilesView view, String target) {
     String resolved = PathUtil.simplifyPathUpToRoot(target, view.getPathPart());
     if (resolved == null) {
       return null;
diff --git a/java/com/google/gitiles/ViewFilter.java b/java/com/google/gitiles/ViewFilter.java
index dd3d54a..6f124e5 100644
--- a/java/com/google/gitiles/ViewFilter.java
+++ b/java/com/google/gitiles/ViewFilter.java
@@ -22,6 +22,7 @@
 import com.google.gitiles.GitilesRequestFailureException.FailureReason;
 import java.io.IOException;
 import java.util.Map;
+import javax.annotation.Nullable;
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -135,7 +136,7 @@
     return false;
   }
 
-  private GitilesView.Builder parse(HttpServletRequest req) throws IOException {
+  private @Nullable GitilesView.Builder parse(HttpServletRequest req) throws IOException {
     String repoName = trimLeadingSlash(getRegexGroup(req, 1));
     if (repoName.isEmpty()) {
       return GitilesView.hostIndex();
@@ -179,7 +180,7 @@
     return GitilesView.repositoryIndex().setRepositoryName(repoName);
   }
 
-  private GitilesView.Builder parseArchiveCommand(
+  private @Nullable GitilesView.Builder parseArchiveCommand(
       HttpServletRequest req, String repoName, String path) throws IOException {
     String ext = null;
     for (String e : ArchiveFormat.allExtensions()) {
@@ -203,8 +204,8 @@
         .setExtension(ext);
   }
 
-  private GitilesView.Builder parseAutoCommand(HttpServletRequest req, String repoName, String path)
-      throws IOException {
+  private @Nullable GitilesView.Builder parseAutoCommand(
+      HttpServletRequest req, String repoName, String path) throws IOException {
     // Note: if you change the mapping for +, make sure to change
     // GitilesView.toUrl() correspondingly.
     if (path.isEmpty()) {
@@ -227,7 +228,7 @@
     return b;
   }
 
-  private GitilesView.Builder parseBlameCommand(
+  private @Nullable GitilesView.Builder parseBlameCommand(
       HttpServletRequest req, String repoName, String path) throws IOException {
     if (path.isEmpty()) {
       return null;
@@ -242,7 +243,7 @@
         .setPathPart(result.getPath());
   }
 
-  private GitilesView.Builder parseDescribeCommand(String repoName, String path) {
+  private @Nullable GitilesView.Builder parseDescribeCommand(String repoName, String path) {
     if (isEmptyOrSlash(path)) {
       return null;
     }
@@ -254,7 +255,8 @@
     return parseDiffCommand(repoName, parseRevision(req, path));
   }
 
-  private GitilesView.Builder parseDiffCommand(String repoName, RevisionParser.Result result) {
+  private @Nullable GitilesView.Builder parseDiffCommand(
+      String repoName, RevisionParser.Result result) {
     if (result == null) {
       return null;
     }
@@ -265,8 +267,8 @@
         .setPathPart(result.getPath());
   }
 
-  private GitilesView.Builder parseLogCommand(HttpServletRequest req, String repoName, String path)
-      throws IOException {
+  private @Nullable GitilesView.Builder parseLogCommand(
+      HttpServletRequest req, String repoName, String path) throws IOException {
     if (isEmptyOrSlash(path)) {
       return GitilesView.log().setRepositoryName(repoName);
     }
@@ -290,7 +292,8 @@
     return parseShowCommand(repoName, parseRevision(req, path));
   }
 
-  private GitilesView.Builder parseShowCommand(String repoName, RevisionParser.Result result) {
+  private @Nullable GitilesView.Builder parseShowCommand(
+      String repoName, RevisionParser.Result result) {
     if (result == null || result.getOldRevision() != null) {
       return null;
     }
@@ -308,7 +311,8 @@
     return parseDocCommand(repoName, parseRevision(req, path));
   }
 
-  private GitilesView.Builder parseDocCommand(String repoName, RevisionParser.Result result) {
+  private @Nullable GitilesView.Builder parseDocCommand(
+      String repoName, RevisionParser.Result result) {
     if (result == null || result.getOldRevision() != null) {
       return null;
     }
diff --git a/java/com/google/gitiles/blame/BlameServlet.java b/java/com/google/gitiles/blame/BlameServlet.java
index 9dd5e91..179b5d6 100644
--- a/java/com/google/gitiles/blame/BlameServlet.java
+++ b/java/com/google/gitiles/blame/BlameServlet.java
@@ -39,6 +39,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
@@ -183,7 +184,7 @@
     return new RegionResult(regions, lastCommitBlobId);
   }
 
-  private static ObjectId resolveBlob(GitilesView view, RevWalk rw, ObjectId commitId)
+  private static @Nullable ObjectId resolveBlob(GitilesView view, RevWalk rw, ObjectId commitId)
       throws IOException {
     try {
       if (commitId == null || Strings.isNullOrEmpty(view.getPathPart())) {
diff --git a/java/com/google/gitiles/blame/cache/BlameCache.java b/java/com/google/gitiles/blame/cache/BlameCache.java
index e7f9fca..57a9166 100644
--- a/java/com/google/gitiles/blame/cache/BlameCache.java
+++ b/java/com/google/gitiles/blame/cache/BlameCache.java
@@ -20,9 +20,17 @@
 import org.eclipse.jgit.lib.Repository;
 
 public interface BlameCache {
-  /** @return the blame of a path at a given commit. */
+  /**
+   * Gets the blame of a path at a given commit.
+   *
+   * @return the blame of a path at a given commit.
+   */
   List<Region> get(Repository repo, ObjectId commitId, String path) throws IOException;
 
-  /** @return the last commit that modified a path, starting at the given commit. */
+  /**
+   * Gets the last commit that modified a path.
+   *
+   * @return the last commit that modified a path, starting at the given commit.
+   */
   ObjectId findLastCommit(Repository repo, ObjectId commitId, String path) throws IOException;
 }
diff --git a/java/com/google/gitiles/doc/DocServlet.java b/java/com/google/gitiles/doc/DocServlet.java
index 4def176..d2ae028 100644
--- a/java/com/google/gitiles/doc/DocServlet.java
+++ b/java/com/google/gitiles/doc/DocServlet.java
@@ -158,7 +158,8 @@
     return h.hash().toString();
   }
 
-  private MarkdownFile findNavbar(RevWalk rw, RevTree root, String path) throws IOException {
+  private @Nullable MarkdownFile findNavbar(RevWalk rw, RevTree root, String path)
+      throws IOException {
     if (!Strings.isNullOrEmpty(path)) {
       // Traverse up the path until we find a NAVBAR_MD.
       StringBuilder pathRemaining = new StringBuilder(path);
@@ -229,8 +230,8 @@
     return MoreObjects.firstNonNull(title, srcFile.path);
   }
 
-  @Nullable
-  private static MarkdownFile findFile(RevWalk rw, RevTree root, String path) throws IOException {
+  private static @Nullable MarkdownFile findFile(RevWalk rw, RevTree root, String path)
+      throws IOException {
     if (Strings.isNullOrEmpty(path)) {
       path = INDEX_MD;
     }
diff --git a/java/com/google/gitiles/doc/GitilesHtmlExtension.java b/java/com/google/gitiles/doc/GitilesHtmlExtension.java
index 2a325b1..a8fc04f 100644
--- a/java/com/google/gitiles/doc/GitilesHtmlExtension.java
+++ b/java/com/google/gitiles/doc/GitilesHtmlExtension.java
@@ -17,6 +17,7 @@
 import com.google.gitiles.doc.html.HtmlBuilder;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import javax.annotation.Nullable;
 import org.commonmark.Extension;
 import org.commonmark.node.AbstractVisitor;
 import org.commonmark.node.HardLineBreak;
@@ -145,7 +146,7 @@
     }
   }
 
-  private static IframeBlock iframe(String html) {
+  private static @Nullable IframeBlock iframe(String html) {
     IframeBlock iframe = new IframeBlock();
     Matcher m = ATTR.matcher(html);
     while (m.find()) {
diff --git a/java/com/google/gitiles/doc/ImageLoader.java b/java/com/google/gitiles/doc/ImageLoader.java
index 81724b6..0a1cc3d 100644
--- a/java/com/google/gitiles/doc/ImageLoader.java
+++ b/java/com/google/gitiles/doc/ImageLoader.java
@@ -57,7 +57,7 @@
     return SoyConstants.IMAGE_URI_INNOCUOUS_OUTPUT;
   }
 
-  private String inlineMaybe(@Nullable String markdownPath, String imagePath) {
+  private @Nullable String inlineMaybe(@Nullable String markdownPath, String imagePath) {
     if (config.imageLimit <= 0) {
       return null;
     }
diff --git a/java/com/google/gitiles/doc/MarkdownToHtml.java b/java/com/google/gitiles/doc/MarkdownToHtml.java
index a2d5752..cb8afae 100644
--- a/java/com/google/gitiles/doc/MarkdownToHtml.java
+++ b/java/com/google/gitiles/doc/MarkdownToHtml.java
@@ -149,7 +149,7 @@
     return html;
   }
 
-  private static ImageLoader newImageLoader(Builder b) {
+  private static @Nullable ImageLoader newImageLoader(Builder b) {
     if (b.reader != null && b.view != null && b.config != null && b.root != null) {
       return new ImageLoader(b.reader, b.view, b.config, b.root);
     }
@@ -170,7 +170,7 @@
   }
 
   /** Render the document AST to sanitized HTML. */
-  public SafeHtml toSoyHtml(Node node) {
+  public @Nullable SafeHtml toSoyHtml(Node node) {
     if (node != null) {
       SoyHtmlBuilder out = new SoyHtmlBuilder();
       renderToHtml(out, node);
diff --git a/java/com/google/gitiles/doc/MarkdownUtil.java b/java/com/google/gitiles/doc/MarkdownUtil.java
index 9a6bb82..b3ce433 100644
--- a/java/com/google/gitiles/doc/MarkdownUtil.java
+++ b/java/com/google/gitiles/doc/MarkdownUtil.java
@@ -16,13 +16,14 @@
 
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Strings;
+import javax.annotation.Nullable;
 import org.commonmark.node.Heading;
 import org.commonmark.node.Node;
 import org.commonmark.node.Text;
 
 class MarkdownUtil {
   /** Combine child nodes as string; this must be escaped for HTML. */
-  static String getInnerText(Node node) {
+  static @Nullable String getInnerText(Node node) {
     if (node == null || node.getFirstChild() == null) {
       return null;
     }
@@ -42,7 +43,7 @@
     }
   }
 
-  static String getTitle(Node node) {
+  static @Nullable String getTitle(Node node) {
     if (node instanceof Heading) {
       if (((Heading) node).getLevel() == 1) {
         return getInnerText(node);
diff --git a/java/com/google/gitiles/doc/Navbar.java b/java/com/google/gitiles/doc/Navbar.java
index 0fc2758..60d1059 100644
--- a/java/com/google/gitiles/doc/Navbar.java
+++ b/java/com/google/gitiles/doc/Navbar.java
@@ -25,6 +25,7 @@
 import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import javax.annotation.Nullable;
 import org.commonmark.node.Heading;
 import org.commonmark.node.Node;
 import org.eclipse.jgit.util.RawParseUtils;
@@ -75,7 +76,7 @@
     return data;
   }
 
-  private Object logo() {
+  private @Nullable Object logo() {
     if (logoUrl == null) {
       return null;
     }
diff --git a/java/com/google/gitiles/doc/SmartQuotedExtension.java b/java/com/google/gitiles/doc/SmartQuotedExtension.java
index f1b8c02..a8e7f13 100644
--- a/java/com/google/gitiles/doc/SmartQuotedExtension.java
+++ b/java/com/google/gitiles/doc/SmartQuotedExtension.java
@@ -17,7 +17,6 @@
 import static com.google.gitiles.doc.SmartQuoted.Type.DOUBLE;
 import static com.google.gitiles.doc.SmartQuoted.Type.SINGLE;
 
-import com.google.gitiles.doc.SmartQuoted.Type;
 import org.commonmark.Extension;
 import org.commonmark.node.Node;
 import org.commonmark.node.Text;
@@ -40,7 +39,7 @@
     builder.customDelimiterProcessor(new QuotedProcessor(DOUBLE, '"'));
   }
 
-  private static void quote(Type type, Text opener, Text closer) {
+  private static void quote(SmartQuoted.Type type, Text opener, Text closer) {
     SmartQuoted quote = new SmartQuoted();
     quote.setType(type);
     for (Node t = opener.getNext(); t != null && t != closer; ) {
diff --git a/java/com/google/gitiles/doc/TocFormatter.java b/java/com/google/gitiles/doc/TocFormatter.java
index 6f25f58..e45f37f 100644
--- a/java/com/google/gitiles/doc/TocFormatter.java
+++ b/java/com/google/gitiles/doc/TocFormatter.java
@@ -25,6 +25,7 @@
 import java.util.Deque;
 import java.util.List;
 import java.util.Map;
+import javax.annotation.Nullable;
 import org.apache.commons.lang3.StringUtils;
 import org.commonmark.node.Heading;
 import org.commonmark.node.Node;
@@ -149,7 +150,7 @@
     }
   }
 
-  private static NamedAnchor findAnchor(Node node) {
+  private static @Nullable NamedAnchor findAnchor(Node node) {
     for (Node c = node.getFirstChild(); c != null; c = c.getNext()) {
       if (c instanceof NamedAnchor) {
         return (NamedAnchor) c;
@@ -202,7 +203,7 @@
       } else {
         int i = 1;
         for (TocEntry entry : headers) {
-          ids.put(entry.header, entry.id + "-" + (i++));
+          ids.put(entry.header, entry.id + "-" + i++);
         }
       }
     }
diff --git a/java/com/google/gitiles/doc/html/HtmlBuilder.java b/java/com/google/gitiles/doc/html/HtmlBuilder.java
index 59604c2..4caf519 100644
--- a/java/com/google/gitiles/doc/html/HtmlBuilder.java
+++ b/java/com/google/gitiles/doc/html/HtmlBuilder.java
@@ -251,7 +251,7 @@
 
   private static final Pattern HTML_ENTITY = Pattern.compile("&[a-z]+;");
 
-  /** Append constant entity reference like {@code &nbsp;}. */
+  /** Append constant entity reference like <code>&amp;nbsp&#59;</code>. */
   public void entity(String entity) {
     checkArgument(HTML_ENTITY.matcher(entity).matches(), "invalid entity %s", entity);
     finishActiveTag();
diff --git a/javatests/com/google/gitiles/BUILD b/javatests/com/google/gitiles/BUILD
index 8e90e16..cf5572f 100644
--- a/javatests/com/google/gitiles/BUILD
+++ b/javatests/com/google/gitiles/BUILD
@@ -7,7 +7,8 @@
     "//lib:guava-failureaccess",
     "//lib:jgit",
     "//lib:jgit-servlet",
-    "//lib/soy:soy",
+    "//lib/flogger",
+    "//lib/soy",
 ]
 
 java_library(
diff --git a/javatests/com/google/gitiles/DiffServletTest.java b/javatests/com/google/gitiles/DiffServletTest.java
index 7a2d201..529c349 100644
--- a/javatests/com/google/gitiles/DiffServletTest.java
+++ b/javatests/com/google/gitiles/DiffServletTest.java
@@ -24,7 +24,6 @@
 import org.eclipse.jgit.diff.DiffEntry.ChangeType;
 import org.eclipse.jgit.diff.DiffEntry.Side;
 import org.eclipse.jgit.diff.Edit;
-import org.eclipse.jgit.diff.Edit.Type;
 import org.eclipse.jgit.diff.RawText;
 import org.eclipse.jgit.patch.FileHeader;
 import org.eclipse.jgit.patch.Patch;
@@ -66,7 +65,7 @@
 
     RawText rt = new RawText(contents.getBytes(UTF_8));
     Edit e = getOnlyElement(getOnlyElement(f.getHunks()).toEditList());
-    assertThat(e.getType()).isEqualTo(Type.INSERT);
+    assertThat(e.getType()).isEqualTo(Edit.Type.INSERT);
     assertThat(rt.getString(e.getBeginB(), e.getEndB(), false)).isEqualTo(contents);
   }
 
@@ -87,7 +86,7 @@
 
     RawText rt2 = new RawText(contents2.getBytes(UTF_8));
     Edit e = getOnlyElement(getOnlyElement(f.getHunks()).toEditList());
-    assertThat(e.getType()).isEqualTo(Type.INSERT);
+    assertThat(e.getType()).isEqualTo(Edit.Type.INSERT);
     assertThat(rt2.getString(e.getBeginB(), e.getEndB(), false)).isEqualTo("contents\n");
   }
 
diff --git a/javatests/com/google/gitiles/GitilesViewTest.java b/javatests/com/google/gitiles/GitilesViewTest.java
index 7cce3ef..275e982 100644
--- a/javatests/com/google/gitiles/GitilesViewTest.java
+++ b/javatests/com/google/gitiles/GitilesViewTest.java
@@ -19,7 +19,6 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableListMultimap;
 import com.google.common.collect.ImmutableMap;
-import com.google.gitiles.GitilesView.Type;
 import org.eclipse.jgit.lib.ObjectId;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -35,7 +34,7 @@
   public void emptyServletPath() throws Exception {
     GitilesView view = GitilesView.hostIndex().setServletPath("").setHostName("host").build();
     assertThat(view.getServletPath()).isEqualTo("");
-    assertThat(view.getType()).isEqualTo(Type.HOST_INDEX);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.HOST_INDEX);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isNull();
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
@@ -49,7 +48,7 @@
   @Test
   public void hostIndex() throws Exception {
     assertThat(HOST.getServletPath()).isEqualTo("/b");
-    assertThat(HOST.getType()).isEqualTo(Type.HOST_INDEX);
+    assertThat(HOST.getType()).isEqualTo(GitilesView.Type.HOST_INDEX);
     assertThat(HOST.getHostName()).isEqualTo("host");
     assertThat(HOST.getRepositoryName()).isNull();
     assertThat(HOST.getRevision()).isEqualTo(Revision.NULL);
@@ -96,7 +95,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision()).isEqualTo(Revision.named("master"));
@@ -137,7 +136,7 @@
         GitilesView.repositoryIndex().copyFrom(HOST).setRepositoryName("foo/bar").build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.REPOSITORY_INDEX);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REPOSITORY_INDEX);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
@@ -158,7 +157,7 @@
     GitilesView view = GitilesView.refs().copyFrom(HOST).setRepositoryName("foo/bar").build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.REFS);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REFS);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
@@ -185,7 +184,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -213,7 +212,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.DESCRIBE);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DESCRIBE);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
@@ -233,7 +232,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -264,7 +263,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -296,7 +295,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.DOC);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -318,7 +317,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.DOC);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -340,7 +339,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.SHOW);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.SHOW);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -361,7 +360,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.ROOTED_DOC);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.ROOTED_DOC);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRevision().getId()).isEqualTo(id);
     assertThat(view.getRevision().getName()).isEqualTo("master");
@@ -382,7 +381,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -419,7 +418,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -455,7 +454,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -493,7 +492,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -528,7 +527,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -558,7 +557,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -589,7 +588,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -626,7 +625,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -654,7 +653,7 @@
     GitilesView view = GitilesView.log().copyFrom(HOST).setRepositoryName("foo/bar").build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
@@ -683,7 +682,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.ARCHIVE);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.ARCHIVE);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -707,7 +706,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.ARCHIVE);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.ARCHIVE);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -730,7 +729,7 @@
             .build();
 
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.BLAME);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.BLAME);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo/bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
@@ -769,7 +768,7 @@
 
     // Fields returned by getters are not escaped.
     assertThat(view.getServletPath()).isEqualTo("/b");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getHostName()).isEqualTo("host");
     assertThat(view.getRepositoryName()).isEqualTo("foo?bar");
     assertThat(view.getRevision().getId()).isEqualTo(id);
diff --git a/javatests/com/google/gitiles/LinkifierTest.java b/javatests/com/google/gitiles/LinkifierTest.java
index baa9727..bcd82a4 100644
--- a/javatests/com/google/gitiles/LinkifierTest.java
+++ b/javatests/com/google/gitiles/LinkifierTest.java
@@ -17,6 +17,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.common.collect.ImmutableMap;
+import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.lib.Config;
 import org.junit.Test;
@@ -68,6 +69,7 @@
     Linkifier l =
         new Linkifier(
             new GitilesUrls() {
+              @Nullable
               @Override
               public String getBaseGerritUrl(HttpServletRequest req) {
                 return null;
diff --git a/javatests/com/google/gitiles/PathServletTest.java b/javatests/com/google/gitiles/PathServletTest.java
index ad9d43e..5002948 100644
--- a/javatests/com/google/gitiles/PathServletTest.java
+++ b/javatests/com/google/gitiles/PathServletTest.java
@@ -38,7 +38,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-/** Tests for {@PathServlet}. */
+/** Tests for {@link PathServlet}. */
 @SuppressWarnings("unchecked")
 @RunWith(JUnit4.class)
 public class PathServletTest extends ServletTest {
diff --git a/javatests/com/google/gitiles/TestGitilesServlet.java b/javatests/com/google/gitiles/TestGitilesServlet.java
index 036707c..b68ea87 100644
--- a/javatests/com/google/gitiles/TestGitilesServlet.java
+++ b/javatests/com/google/gitiles/TestGitilesServlet.java
@@ -18,6 +18,7 @@
 import java.net.URL;
 import java.util.Collections;
 import java.util.Enumeration;
+import javax.annotation.Nullable;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -31,13 +32,13 @@
 
 /** Static utility methods for creating {@link GitilesServlet}s for testing. */
 public class TestGitilesServlet {
-  /** @see #create(TestRepository,GitwebRedirectFilter, BranchRedirect) */
+  /** Create GitilesServlet, @see #create(TestRepository,GitwebRedirectFilter, BranchRedirect) */
   public static GitilesServlet create(final TestRepository<DfsRepository> repo)
       throws ServletException {
     return create(repo, new GitwebRedirectFilter(), new BranchRedirect());
   }
 
-  /** @see #create(TestRepository,GitwebRedirectFilter, BranchRedirect) */
+  /** Create GitilesServlet, @see #create(TestRepository,GitwebRedirectFilter, BranchRedirect) */
   public static GitilesServlet create(
       final TestRepository<DfsRepository> repo, GitwebRedirectFilter gitwebRedirect)
       throws ServletException {
@@ -90,7 +91,7 @@
     servlet.init(
         new ServletConfig() {
           @Override
-          public String getInitParameter(String name) {
+          public @Nullable String getInitParameter(String name) {
             return null;
           }
 
@@ -100,7 +101,7 @@
           }
 
           @Override
-          public ServletContext getServletContext() {
+          public @Nullable ServletContext getServletContext() {
             return null;
           }
 
diff --git a/javatests/com/google/gitiles/TimeCacheTest.java b/javatests/com/google/gitiles/TimeCacheTest.java
index 8fe900a..2540c56 100644
--- a/javatests/com/google/gitiles/TimeCacheTest.java
+++ b/javatests/com/google/gitiles/TimeCacheTest.java
@@ -53,7 +53,7 @@
     repo = new TestRepository<>(new InMemoryRepository(new DfsRepositoryDescription("test")));
     walk = new RevWalk(repo.getRepository());
     cache = new TimeCache();
-    start = repo.getDate().getTime() / 1000;
+    start = repo.getInstant().toEpochMilli() / 1000;
   }
 
   private long getTime(ObjectId id) throws IOException {
diff --git a/javatests/com/google/gitiles/ViewFilterTest.java b/javatests/com/google/gitiles/ViewFilterTest.java
index fb001cd..79b0b09 100644
--- a/javatests/com/google/gitiles/ViewFilterTest.java
+++ b/javatests/com/google/gitiles/ViewFilterTest.java
@@ -19,7 +19,6 @@
 import static com.google.gitiles.MoreAssert.assertThrows;
 
 import com.google.common.net.HttpHeaders;
-import com.google.gitiles.GitilesView.Type;
 import java.io.IOException;
 import java.util.Optional;
 import javax.servlet.ServletException;
@@ -47,8 +46,8 @@
 
   @Test
   public void noCommand() throws Exception {
-    assertThat(getView("/").getType()).isEqualTo(Type.HOST_INDEX);
-    assertThat(getView("/repo").getType()).isEqualTo(Type.REPOSITORY_INDEX);
+    assertThat(getView("/").getType()).isEqualTo(GitilesView.Type.HOST_INDEX);
+    assertThat(getView("/repo").getType()).isEqualTo(GitilesView.Type.REPOSITORY_INDEX);
     assertThrows(GitilesRequestFailureException.class, () -> getView("/repo/+"));
     assertThrows(GitilesRequestFailureException.class, () -> getView("/repo/+/"));
   }
@@ -61,24 +60,25 @@
     String hexBranch = hex.substring(0, 10);
     repo.branch(hexBranch).commit().create();
 
-    assertThat(getView("/repo/+/master").getType()).isEqualTo(Type.REVISION);
-    assertThat(getView("/repo/+/" + hexBranch).getType()).isEqualTo(Type.REVISION);
-    assertThat(getView("/repo/+/" + hex).getType()).isEqualTo(Type.REVISION);
-    assertThat(getView("/repo/+/" + hex.substring(0, 7)).getType()).isEqualTo(Type.REVISION);
-    assertThat(getView("/repo/+/master/").getType()).isEqualTo(Type.PATH);
-    assertThat(getView("/repo/+/" + hex + "/").getType()).isEqualTo(Type.PATH);
-    assertThat(getView("/repo/+/" + hex + "/index.c").getType()).isEqualTo(Type.PATH);
-    assertThat(getView("/repo/+/" + hex + "/index.md").getType()).isEqualTo(Type.DOC);
-    assertThat(getView("/repo/+/master^..master").getType()).isEqualTo(Type.DIFF);
-    assertThat(getView("/repo/+/master^..master/").getType()).isEqualTo(Type.DIFF);
+    assertThat(getView("/repo/+/master").getType()).isEqualTo(GitilesView.Type.REVISION);
+    assertThat(getView("/repo/+/" + hexBranch).getType()).isEqualTo(GitilesView.Type.REVISION);
+    assertThat(getView("/repo/+/" + hex).getType()).isEqualTo(GitilesView.Type.REVISION);
+    assertThat(getView("/repo/+/" + hex.substring(0, 7)).getType())
+        .isEqualTo(GitilesView.Type.REVISION);
+    assertThat(getView("/repo/+/master/").getType()).isEqualTo(GitilesView.Type.PATH);
+    assertThat(getView("/repo/+/" + hex + "/").getType()).isEqualTo(GitilesView.Type.PATH);
+    assertThat(getView("/repo/+/" + hex + "/index.c").getType()).isEqualTo(GitilesView.Type.PATH);
+    assertThat(getView("/repo/+/" + hex + "/index.md").getType()).isEqualTo(GitilesView.Type.DOC);
+    assertThat(getView("/repo/+/master^..master").getType()).isEqualTo(GitilesView.Type.DIFF);
+    assertThat(getView("/repo/+/master^..master/").getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(getView("/repo/+/" + parent.name() + ".." + hex + "/").getType())
-        .isEqualTo(Type.DIFF);
+        .isEqualTo(GitilesView.Type.DIFF);
   }
 
   @Test
   public void hostIndex() throws Exception {
     GitilesView view = getView("/");
-    assertThat(view.getType()).isEqualTo(Type.HOST_INDEX);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.HOST_INDEX);
     assertThat(view.getHostName()).isEqualTo("test-host");
     assertThat(view.getRepositoryName()).isNull();
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
@@ -89,7 +89,7 @@
   @Test
   public void repositoryIndex() throws Exception {
     GitilesView view = getView("/repo");
-    assertThat(view.getType()).isEqualTo(Type.REPOSITORY_INDEX);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REPOSITORY_INDEX);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
@@ -101,35 +101,35 @@
     GitilesView view;
 
     view = getView("/repo/+refs");
-    assertThat(view.getType()).isEqualTo(Type.REFS);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REFS);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+refs/");
-    assertThat(view.getType()).isEqualTo(Type.REFS);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REFS);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+refs/heads");
-    assertThat(view.getType()).isEqualTo(Type.REFS);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REFS);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isEqualTo("heads");
 
     view = getView("/repo/+refs/heads/");
-    assertThat(view.getType()).isEqualTo(Type.REFS);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REFS);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isEqualTo("heads");
 
     view = getView("/repo/+refs/heads/master");
-    assertThat(view.getType()).isEqualTo(Type.REFS);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REFS);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
@@ -144,14 +144,14 @@
     assertThrows(GitilesRequestFailureException.class, () -> getView("/repo/+describe/"));
 
     view = getView("/repo/+describe/deadbeef");
-    assertThat(view.getType()).isEqualTo(Type.DESCRIBE);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DESCRIBE);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isEqualTo("deadbeef");
 
     view = getView("/repo/+describe/refs/heads/master~3^~2");
-    assertThat(view.getType()).isEqualTo(Type.DESCRIBE);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DESCRIBE);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
@@ -165,25 +165,25 @@
     GitilesView view;
 
     view = getView("/repo/+show/master");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+show/heads/master");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo("heads/master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+show/refs/heads/master");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo(MASTER);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+show/stable");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo("stable");
     assertThat(view.getRevision().getId()).isEqualTo(stable);
     assertThat(view.getPathPart()).isNull();
@@ -198,31 +198,31 @@
     GitilesView view;
 
     view = getView("/repo/+show/name");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo("name");
     assertThat(view.getRevision().getId()).isEqualTo(tag);
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+show/heads/name");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo("heads/name");
     assertThat(view.getRevision().getId()).isEqualTo(branch);
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+show/refs/heads/name");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo("refs/heads/name");
     assertThat(view.getRevision().getId()).isEqualTo(branch);
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+show/tags/name");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo("tags/name");
     assertThat(view.getRevision().getId()).isEqualTo(tag);
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+show/refs/tags/name");
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo("refs/tags/name");
     assertThat(view.getRevision().getId()).isEqualTo(tag);
     assertThat(view.getPathPart()).isNull();
@@ -235,22 +235,22 @@
     GitilesView view;
 
     view = getView("/repo/+show/master/");
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+show/master/foo");
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isEqualTo("foo");
 
     view = getView("/repo/+show/master/foo/");
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isEqualTo("foo");
 
     view = getView("/repo/+show/master/foo/bar");
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isEqualTo("foo/bar");
 
@@ -265,22 +265,22 @@
     GitilesView view;
 
     view = getView("/repo/+doc/master/");
-    assertThat(view.getType()).isEqualTo(Type.DOC);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+doc/master/index.md");
-    assertThat(view.getType()).isEqualTo(Type.DOC);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isEqualTo("index.md");
 
     view = getView("/repo/+doc/master/foo/");
-    assertThat(view.getType()).isEqualTo(Type.DOC);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isEqualTo("foo");
 
     view = getView("/repo/+doc/master/foo/bar.md");
-    assertThat(view.getType()).isEqualTo(Type.DOC);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DOC);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getPathPart()).isEqualTo("foo/bar.md");
 
@@ -291,9 +291,9 @@
   @Test
   public void multipleSlashes() throws Exception {
     repo.branch(MASTER).commit().create();
-    assertThat(getView("//").getType()).isEqualTo(Type.HOST_INDEX);
-    assertThat(getView("//repo").getType()).isEqualTo(Type.REPOSITORY_INDEX);
-    assertThat(getView("//repo//").getType()).isEqualTo(Type.REPOSITORY_INDEX);
+    assertThat(getView("//").getType()).isEqualTo(GitilesView.Type.HOST_INDEX);
+    assertThat(getView("//repo").getType()).isEqualTo(GitilesView.Type.REPOSITORY_INDEX);
+    assertThat(getView("//repo//").getType()).isEqualTo(GitilesView.Type.REPOSITORY_INDEX);
     assertThrows(GitilesRequestFailureException.class, () -> getView("/repo/+//master"));
     assertThrows(
         GitilesRequestFailureException.class, () -> getView("/repo/+/refs//heads//master"));
@@ -308,7 +308,7 @@
     GitilesView view;
 
     view = getView("/repo/+diff/master^..master");
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision().getName()).isEqualTo("master^");
@@ -316,7 +316,7 @@
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+diff/master^..master/");
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision().getName()).isEqualTo("master^");
@@ -324,7 +324,7 @@
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+diff/master^..master/foo");
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision().getName()).isEqualTo("master^");
@@ -332,7 +332,7 @@
     assertThat(view.getPathPart()).isEqualTo("foo");
 
     view = getView("/repo/+diff/refs/heads/master^..refs/heads/master");
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo(MASTER);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision().getName()).isEqualTo("refs/heads/master^");
@@ -344,7 +344,7 @@
   public void diffAgainstEmptyCommit() throws Exception {
     RevCommit master = repo.branch(MASTER).commit().create();
     GitilesView view = getView("/repo/+diff/master^!");
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
@@ -358,38 +358,38 @@
     GitilesView view;
 
     view = getView("/repo/+log");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+log/");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+log/master");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+log/master/");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+log/master/foo");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision()).isEqualTo(Revision.NULL);
     assertThat(view.getPathPart()).isEqualTo("foo");
 
     view = getView("/repo/+log/master^..master");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision().getName()).isEqualTo("master^");
@@ -397,7 +397,7 @@
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+log/master^..master/");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision().getName()).isEqualTo("master^");
@@ -405,7 +405,7 @@
     assertThat(view.getPathPart()).isEqualTo("");
 
     view = getView("/repo/+log/master^..master/foo");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision().getName()).isEqualTo("master^");
@@ -413,7 +413,7 @@
     assertThat(view.getPathPart()).isEqualTo("foo");
 
     view = getView("/repo/+log/refs/heads/master^..refs/heads/master");
-    assertThat(view.getType()).isEqualTo(Type.LOG);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.LOG);
     assertThat(view.getRevision().getName()).isEqualTo(MASTER);
     assertThat(view.getRevision().getId()).isEqualTo(master);
     assertThat(view.getOldRevision().getName()).isEqualTo("refs/heads/master^");
@@ -439,7 +439,7 @@
         GitilesRequestFailureException.class, () -> getView("/repo/+archive/master/foo/.tar.gz"));
 
     view = getView("/repo/+archive/master.tar.gz");
-    assertThat(view.getType()).isEqualTo(Type.ARCHIVE);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.ARCHIVE);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
@@ -448,7 +448,7 @@
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+archive/master.tar.bz2");
-    assertThat(view.getType()).isEqualTo(Type.ARCHIVE);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.ARCHIVE);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
@@ -457,7 +457,7 @@
     assertThat(view.getPathPart()).isNull();
 
     view = getView("/repo/+archive/master/foo/bar.tar.gz");
-    assertThat(view.getType()).isEqualTo(Type.ARCHIVE);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.ARCHIVE);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
@@ -479,7 +479,7 @@
         GitilesRequestFailureException.class, () -> getView("/repo/+blame/master..branch"));
 
     view = getView("/repo/+blame/master/foo/bar");
-    assertThat(view.getType()).isEqualTo(Type.BLAME);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.BLAME);
     assertThat(view.getRepositoryName()).isEqualTo("repo");
     assertThat(view.getRevision().getName()).isEqualTo("master");
     assertThat(view.getRevision().getId()).isEqualTo(master);
@@ -542,23 +542,23 @@
         };
 
     GitilesView view = getView("/repo/+/master", branchRedirect);
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
     assertThat(view.getRevision().getId()).isEqualTo(main);
 
     view = getView("/repo/+/master/index.c", branchRedirect);
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getPathPart()).isEqualTo("index.c");
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
     assertThat(view.getRevision().getId()).isEqualTo(main);
 
     view = getView("/repo/+/some@branch", branchRedirect);
-    assertThat(view.getType()).isEqualTo(Type.REVISION);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.REVISION);
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
     assertThat(view.getRevision().getId()).isEqualTo(main);
 
     view = getView("/repo/+/master/master", branchRedirect);
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getPathPart()).isEqualTo("master");
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
     assertThat(view.getRevision().getId()).isEqualTo(main);
@@ -602,7 +602,7 @@
     GitilesView view;
 
     view = getView("/repo/+diff/master^..master", branchRedirect);
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
     assertThat(view.getRevision().getId()).isEqualTo(main);
     assertThat(view.getOldRevision().getName()).isEqualTo("refs/heads/main^");
@@ -610,7 +610,7 @@
     assertThat(view.getPathPart()).isEmpty();
 
     view = getView("/repo/+diff/master..master^", branchRedirect);
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo("refs/heads/main^");
     assertThat(view.getRevision().getId()).isEqualTo(parent);
     assertThat(view.getOldRevision().getName()).isEqualTo(MAIN);
@@ -618,7 +618,7 @@
     assertThat(view.getPathPart()).isEmpty();
 
     view = getView("/repo/+diff/master^..master/", branchRedirect);
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
     assertThat(view.getRevision().getId()).isEqualTo(main);
     assertThat(view.getOldRevision().getName()).isEqualTo("refs/heads/main^");
@@ -626,7 +626,7 @@
     assertThat(view.getPathPart()).isEmpty();
 
     view = getView("/repo/+diff/master^..master/foo", branchRedirect);
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
     assertThat(view.getRevision().getId()).isEqualTo(main);
     assertThat(view.getOldRevision().getName()).isEqualTo("refs/heads/main^");
@@ -634,7 +634,7 @@
     assertThat(view.getPathPart()).isEqualTo("foo");
 
     view = getView("/repo/+diff/refs/heads/master^..refs/heads/master", branchRedirect);
-    assertThat(view.getType()).isEqualTo(Type.DIFF);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.DIFF);
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
     assertThat(view.getRevision().getId()).isEqualTo(main);
     assertThat(view.getOldRevision().getName()).isEqualTo("refs/heads/main^");
@@ -663,13 +663,13 @@
 
     view = getView("/repo/+show/master/", branchRedirect);
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getRevision().getId()).isEqualTo(main);
     assertThat(view.getPathPart()).isEmpty();
 
     view = getView("/repo/+show/master/foo", branchRedirect);
     assertThat(view.getRevision().getName()).isEqualTo(MAIN);
-    assertThat(view.getType()).isEqualTo(Type.PATH);
+    assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH);
     assertThat(view.getRevision().getId()).isEqualTo(main);
     assertThat(view.getPathPart()).isEqualTo("foo");
   }
diff --git a/lib/BUILD b/lib/BUILD
index 4fec826..c763f24 100644
--- a/lib/BUILD
+++ b/lib/BUILD
@@ -10,6 +10,7 @@
 ) for n in [
     "autolink",
     "commonmark",
+    "commons-codec",
     "commons-lang3",
     "commons-text",
     "cm-autolink",
@@ -29,9 +30,9 @@
 ]]
 
 java_library(
-  name = "prettify",
-  visibility = ["//visibility:public"],
-  exports = ["@java-prettify"],
+    name = "prettify",
+    visibility = ["//visibility:public"],
+    exports = ["@java-prettify"],
 )
 
 java_library(
@@ -88,3 +89,9 @@
     name = "commons-compress",
     exports = ["@commons-compress//jar"],
 )
+
+java_library(
+    name = "errorprone-annotations",
+    visibility = ["//visibility:public"],
+    exports = ["@error-prone-annotations//jar"],
+)
\ No newline at end of file
diff --git a/lib/flogger/BUILD b/lib/flogger/BUILD
new file mode 100644
index 0000000..06fb211
--- /dev/null
+++ b/lib/flogger/BUILD
@@ -0,0 +1,13 @@
+load("@rules_java//java:defs.bzl", "java_library")
+
+java_library(
+    name = "flogger",
+    visibility = ["//visibility:public"],
+    exports = [
+        "@flogger-google-extensions//jar",
+        "@flogger-log4j-backend//jar",
+        "@flogger-system-backend//jar",
+        "@flogger//jar",
+        "@log4j//jar",
+    ],
+)
diff --git a/lib/guice/BUILD b/lib/guice/BUILD
deleted file mode 100644
index 188f2cc..0000000
--- a/lib/guice/BUILD
+++ /dev/null
@@ -1,25 +0,0 @@
-load("@rules_java//java:defs.bzl", "java_library")
-
-package(
-    default_visibility = ["//visibility:public"],
-)
-
-java_library(
-    name = "guice",
-    exports = [
-        ":aopalliance",
-        ":guice-assistedinject",
-        ":guice-library",
-        ":javax-inject",
-    ],
-)
-
-[java_library(
-    name = n,
-    runtime_deps = ["@%s//jar" % n],
-) for n in [
-    "guice-library",
-    "guice-assistedinject",
-    "javax-inject",
-    "aopalliance",
-]]
diff --git a/modules/java-prettify b/modules/java-prettify
index 8af621b..32fa081 160000
--- a/modules/java-prettify
+++ b/modules/java-prettify
@@ -1 +1 @@
-Subproject commit 8af621b7b99641eb803caa460009290a47fa3111
+Subproject commit 32fa081a797a97beaf77a4f2efca26c39168e72f
diff --git a/modules/jgit b/modules/jgit
index ca166a0..dc27dbd 160000
--- a/modules/jgit
+++ b/modules/jgit
@@ -1 +1 @@
-Subproject commit ca166a0c62af2ea87fdedf2728ac19cb59a12601
+Subproject commit dc27dbd2fef79a43f2e44ee1264777da9fbeaabb
diff --git a/tools/BUILD b/tools/BUILD
index 500e197..50c0463 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -34,68 +34,387 @@
     name = "error_prone",
     javacopts = [
         "-XepDisableWarningsInGeneratedCode",
+        "-Xep:AlmostJavadoc:ERROR",
+        "-Xep:AlreadyChecked:ERROR",
+        "-Xep:AlwaysThrows:ERROR",
         "-Xep:AmbiguousMethodReference:ERROR",
+        "-Xep:AnnotateFormatMethod:ERROR",
+        "-Xep:ArgumentSelectionDefectChecker:ERROR",
+        "-Xep:ArrayAsKeyOfSetOrMap:ERROR",
+        "-Xep:ArrayEquals:ERROR",
+        "-Xep:ArrayFillIncompatibleType:ERROR",
+        "-Xep:ArrayHashCode:ERROR",
+        "-Xep:ArraysAsListPrimitiveArray:ERROR",
+        "-Xep:ArrayToString:ERROR",
+        "-Xep:AssertEqualsArgumentOrderChecker:ERROR",
+        "-Xep:AssertionFailureIgnored:ERROR",
+        "-Xep:AsyncCallableReturnsNull:ERROR",
+        "-Xep:AsyncFunctionReturnsNull:ERROR",
+        "-Xep:AutoValueConstructorOrderChecker:ERROR",
+        "-Xep:AutoValueFinalMethods:ERROR",
+        "-Xep:AutoValueImmutableFields:ERROR",
+        "-Xep:AutoValueSubclassLeaked:ERROR",
         "-Xep:BadAnnotationImplementation:ERROR",
         "-Xep:BadComparable:ERROR",
+        "-Xep:BadImport:ERROR",
+        "-Xep:BadInstanceof:ERROR",
+        "-Xep:BadShiftAmount:ERROR",
+        "-Xep:BanJNDI:WARN",
+        "-Xep:BanSerializableRead:ERROR",
+        "-Xep:BigDecimalEquals:ERROR",
+        "-Xep:BigDecimalLiteralDouble:ERROR",
         "-Xep:BoxedPrimitiveConstructor:ERROR",
+        "-Xep:BoxedPrimitiveEquality:ERROR",
+        "-Xep:BundleDeserializationCast:ERROR",
+        "-Xep:ByteBufferBackingArray:ERROR",
+        "-Xep:CacheLoaderNull:ERROR",
         "-Xep:CannotMockFinalClass:ERROR",
+        "-Xep:CanonicalDuration:ERROR",
+        "-Xep:CatchAndPrintStackTrace:ERROR",
+        "-Xep:CatchFail:ERROR",
+        "-Xep:ChainedAssertionLosesContext:ERROR",
+        "-Xep:ChainingConstructorIgnoresParameter:ERROR",
+        "-Xep:CharacterGetNumericValue:ERROR",
+        "-Xep:CheckNotNullMultipleTimes:ERROR",
+        "-Xep:CheckReturnValue:ERROR",
         "-Xep:ClassCanBeStatic:ERROR",
+        "-Xep:ClassName:ERROR",
         "-Xep:ClassNewInstance:ERROR",
+        "-Xep:CollectionIncompatibleType:ERROR",
+        "-Xep:CollectionToArraySafeParameter:ERROR",
+        "-Xep:CollectionUndefinedEquality:ERROR",
+        "-Xep:CollectorShouldNotUseState:ERROR",
+        "-Xep:ComparableAndComparator:ERROR",
+        "-Xep:ComparableType:ERROR",
+        "-Xep:CompareToZero:ERROR",
+        "-Xep:ComparingThisWithNull:ERROR",
+        "-Xep:ComparisonOutOfRange:ERROR",
+        "-Xep:CompatibleWithAnnotationMisuse:ERROR",
+        "-Xep:CompileTimeConstant:ERROR",
+        "-Xep:ComplexBooleanConstant:ERROR",
+        "-Xep:ComputeIfAbsentAmbiguousReference:ERROR",
+        "-Xep:ConditionalExpressionNumericPromotion:ERROR",
+        "-Xep:ConstantOverflow:ERROR",
+        "-Xep:DaggerProvidesNull:ERROR",
+        "-Xep:DangerousLiteralNull:ERROR",
+        "-Xep:DateChecker:ERROR",
         "-Xep:DateFormatConstant:ERROR",
+        "-Xep:DeadException:ERROR",
+        "-Xep:DeadThread:ERROR",
         "-Xep:DefaultCharset:ERROR",
+        "-Xep:DefaultPackage:WARN",
+        "-Xep:DepAnn:ERROR",
+        "-Xep:DeprecatedVariable:ERROR",
+        "-Xep:DiscardedPostfixExpression:ERROR",
+        "-Xep:DoNotCall:ERROR",
+        "-Xep:DoNotCallSuggester:ERROR",
+        "-Xep:DoNotClaimAnnotations:ERROR",
+        "-Xep:DoNotMock:ERROR",
+        "-Xep:DoNotMockAutoValue:ERROR",
+        "-Xep:DoubleBraceInitialization:ERROR",
         "-Xep:DoubleCheckedLocking:ERROR",
-        "-Xep:DoubleCheckedLocking:ERROR",
-        "-Xep:ElementsCountedInLoop:ERROR",
-        "-Xep:ElementsCountedInLoop:ERROR",
+        "-Xep:DuplicateMapKeys:ERROR",
+        "-Xep:DurationFrom:ERROR",
+        "-Xep:DurationGetTemporalUnit:ERROR",
+        "-Xep:DurationTemporalUnit:ERROR",
+        "-Xep:DurationToLongTimeUnit:ERROR",
+        "-Xep:EmptyBlockTag:ERROR",
+        "-Xep:EmptyCatch:ERROR",
+        "-Xep:EmptySetMultibindingContributions:ERROR",
+        "-Xep:EqualsGetClass:ERROR",
         "-Xep:EqualsHashCode:ERROR",
         "-Xep:EqualsIncompatibleType:ERROR",
+        "-Xep:EqualsNaN:ERROR",
+        "-Xep:EqualsNull:ERROR",
+        "-Xep:EqualsReference:ERROR",
+        "-Xep:EqualsUnsafeCast:ERROR",
+        "-Xep:EqualsUsingHashCode:ERROR",
+        "-Xep:EqualsWrongThing:ERROR",
+        "-Xep:ErroneousThreadPoolConstructorChecker:ERROR",
+        "-Xep:EscapedEntity:ERROR",
         "-Xep:ExpectedExceptionChecker:ERROR",
+        "-Xep:ExtendingJUnitAssert:ERROR",
+        "-Xep:ExtendsAutoValue:ERROR",
+        "-Xep:FallThrough:ERROR",
         "-Xep:Finally:ERROR",
+        "-Xep:FloatCast:ERROR",
+        "-Xep:FloatingPointAssertionWithinEpsilon:ERROR",
         "-Xep:FloatingPointLiteralPrecision:ERROR",
+        "-Xep:FloggerArgumentToString:ERROR",
+        "-Xep:FloggerFormatString:ERROR",
+        "-Xep:FloggerLogString:WARN",
+        "-Xep:FloggerLogVarargs:ERROR",
+        "-Xep:FloggerSplitLogStatement:ERROR",
+        "-Xep:FloggerStringConcatenation:ERROR",
+        "-Xep:FormatString:ERROR",
+        "-Xep:FormatStringAnnotation:ERROR",
+        "-Xep:ForOverride:ERROR",
         "-Xep:FragmentInjection:ERROR",
         "-Xep:FragmentNotInstantiable:ERROR",
+        "-Xep:FromTemporalAccessor:ERROR",
         "-Xep:FunctionalInterfaceClash:ERROR",
+        "-Xep:FunctionalInterfaceMethodChanged:ERROR",
         "-Xep:FutureReturnValueIgnored:ERROR",
+        "-Xep:FuturesGetCheckedIllegalExceptionType:ERROR",
+        "-Xep:GetClassOnAnnotation:ERROR",
+        "-Xep:GetClassOnClass:ERROR",
         "-Xep:GetClassOnEnum:ERROR",
+        "-Xep:GuardedBy:ERROR",
+        "-Xep:GuiceAssistedInjectScoping:ERROR",
+        "-Xep:GuiceAssistedParameters:ERROR",
+        "-Xep:HashtableContains:ERROR",
+        "-Xep:HidingField:ERROR",
+        "-Xep:IdentityBinaryExpression:ERROR",
+        "-Xep:IdentityHashMapBoxing:ERROR",
+        "-Xep:IdentityHashMapUsage:ERROR",
+        "-Xep:IgnoredPureGetter:ERROR",
+        "-Xep:Immutable:ERROR",
         "-Xep:ImmutableAnnotationChecker:ERROR",
         "-Xep:ImmutableEnumChecker:WARN",
+        "-Xep:ImmutableModification:ERROR",
+        "-Xep:ImpossibleNullComparison:ERROR",
+        "-Xep:Incomparable:ERROR",
+        "-Xep:IncompatibleArgumentType:ERROR",
         "-Xep:IncompatibleModifiers:ERROR",
+        "-Xep:InconsistentCapitalization:ERROR",
+        "-Xep:InconsistentHashCode:ERROR",
+        "-Xep:IncrementInForLoopAndHeader:ERROR",
+        "-Xep:IndexOfChar:ERROR",
+        "-Xep:InexactVarargsConditional:ERROR",
+        "-Xep:InfiniteRecursion:ERROR",
+        "-Xep:InheritDoc:ERROR",
         "-Xep:InjectOnConstructorOfAbstractClass:ERROR",
+        "-Xep:InlineFormatString:ERROR",
+        "-Xep:InlineMeInliner:WARN",
+        "-Xep:InlineMeSuggester:ERROR",
+        "-Xep:InlineMeValidator:ERROR",
         "-Xep:InputStreamSlowMultibyteRead:ERROR",
+        "-Xep:InsecureCryptoUsage:ERROR",
+        "-Xep:InstanceOfAndCastMatchWrongType:ERROR",
+        "-Xep:InstantTemporalUnit:ERROR",
+        "-Xep:IntLongMath:ERROR",
+        "-Xep:InvalidBlockTag:ERROR",
+        "-Xep:InvalidInlineTag:ERROR",
+        "-Xep:InvalidJavaTimeConstant:ERROR",
+        "-Xep:InvalidLink:ERROR",
+        "-Xep:InvalidParam:ERROR",
+        "-Xep:InvalidPatternSyntax:ERROR",
+        "-Xep:InvalidThrows:ERROR",
+        "-Xep:InvalidThrowsLink:ERROR",
+        "-Xep:InvalidTimeZoneID:ERROR",
+        "-Xep:InvalidZoneId:ERROR",
+        "-Xep:IsInstanceIncompatibleType:ERROR",
+        "-Xep:IsInstanceOfClass:ERROR",
+        "-Xep:IsLoggableTagLength:ERROR",
         "-Xep:IterableAndIterator:ERROR",
+        "-Xep:IterablePathParameter:ERROR",
+        "-Xep:JavaDurationGetSecondsGetNano:ERROR",
+        "-Xep:JavaDurationWithNanos:ERROR",
+        "-Xep:JavaDurationWithSeconds:ERROR",
+        "-Xep:JavaInstantGetSecondsGetNano:ERROR",
+        "-Xep:JavaLangClash:ERROR",
+        "-Xep:JavaLocalDateTimeGetNano:ERROR",
+        "-Xep:JavaLocalTimeGetNano:ERROR",
+        "-Xep:JavaPeriodGetDays:ERROR",
+        "-Xep:JavaTimeDefaultTimeZone:ERROR",
+        "-Xep:JavaUtilDate:ERROR",
+        "-Xep:JdkObsolete:ERROR",
+        "-Xep:JodaConstructors:ERROR",
+        "-Xep:JodaDateTimeConstants:ERROR",
+        "-Xep:JodaDurationWithMillis:ERROR",
+        "-Xep:JodaInstantWithMillis:ERROR",
+        "-Xep:JodaNewPeriod:ERROR",
+        "-Xep:JodaPlusMinusLong:ERROR",
+        "-Xep:JodaTimeConverterManager:ERROR",
+        "-Xep:JodaToSelf:ERROR",
+        "-Xep:JodaWithDurationAddedLong:ERROR",
         "-Xep:JUnit3FloatingPointComparisonWithoutDelta:ERROR",
+        "-Xep:JUnit3TestNotRun:ERROR",
+        "-Xep:JUnit4ClassAnnotationNonStatic:ERROR",
+        "-Xep:JUnit4ClassUsedInJUnit3:ERROR",
+        "-Xep:JUnit4SetUpNotRun:ERROR",
+        "-Xep:JUnit4TearDownNotRun:ERROR",
+        "-Xep:JUnit4TestNotRun:ERROR",
+        "-Xep:JUnit4TestsNotRunWithinEnclosed:ERROR",
         "-Xep:JUnitAmbiguousTestClass:ERROR",
-        "-Xep:LiteralClassName:ERROR",
+        "-Xep:JUnitAssertSameCheck:ERROR",
+        "-Xep:JUnitParameterMethodNotFound:ERROR",
+        "-Xep:LiteByteStringUtf8:ERROR",
+        "-Xep:LiteEnumValueOf:ERROR",
+        "-Xep:LiteProtoToString:ERROR",
+        "-Xep:LocalDateTemporalAmount:ERROR",
+        "-Xep:LockNotBeforeTry:ERROR",
+        "-Xep:LockOnBoxedPrimitive:ERROR",
+        "-Xep:LogicalAssignment:ERROR",
+        "-Xep:LongFloatConversion:ERROR",
+        "-Xep:LongLiteralLowerCaseSuffix:ERROR",
+        "-Xep:LoopConditionChecker:ERROR",
+        "-Xep:LoopOverCharArray:ERROR",
+        "-Xep:LossyPrimitiveCompare:ERROR",
+        "-Xep:MathAbsoluteRandom:ERROR",
+        "-Xep:MathRoundIntLong:ERROR",
+        "-Xep:MemoizeConstantVisitorStateLookups:ERROR",
+        "-Xep:MislabeledAndroidString:ERROR",
         "-Xep:MissingCasesInEnumSwitch:ERROR",
         "-Xep:MissingFail:ERROR",
         "-Xep:MissingOverride:ERROR",
-        "-Xep:MutableConstantField:ERROR",
+        "-Xep:MissingSummary:ERROR",
+        "-Xep:MissingSuperCall:ERROR",
+        "-Xep:MissingTestCall:ERROR",
+        "-Xep:MisusedDayOfYear:ERROR",
+        "-Xep:MisusedWeekYear:ERROR",
+        "-Xep:MixedDescriptors:ERROR",
+        "-Xep:MixedMutabilityReturnType:WARN",
+        "-Xep:MockitoUsage:ERROR",
+        "-Xep:ModifiedButNotUsed:ERROR",
+        "-Xep:ModifyCollectionInEnhancedForLoop:ERROR",
+        "-Xep:ModifyingCollectionWithItself:ERROR",
+        "-Xep:ModifySourceCollectionInStream:ERROR",
+        "-Xep:MultipleParallelOrSequentialCalls:ERROR",
+        "-Xep:MultipleUnaryOperatorsInMethodCall:ERROR",
+        "-Xep:MustBeClosedChecker:ERROR",
+        "-Xep:MutableConstantField:WARN",
+        "-Xep:MutableMethodReturnType:WARN",
+        "-Xep:MutablePublicArray:ERROR",
         "-Xep:NarrowingCompoundAssignment:ERROR",
+        "-Xep:NCopiesOfChar:ERROR",
+        "-Xep:NestedInstanceOfConditions:ERROR",
         "-Xep:NonAtomicVolatileUpdate:ERROR",
+        "-Xep:NonCanonicalStaticImport:ERROR",
+        "-Xep:NonCanonicalType:ERROR",
+        "-Xep:NonFinalCompileTimeConstant:ERROR",
         "-Xep:NonOverridingEquals:ERROR",
+        "-Xep:NonRuntimeAnnotation:ERROR",
         "-Xep:NullableConstructor:ERROR",
         "-Xep:NullablePrimitive:ERROR",
+        "-Xep:NullablePrimitiveArray:ERROR",
         "-Xep:NullableVoid:ERROR",
+        "-Xep:NullOptional:ERROR",
+        "-Xep:NullTernary:ERROR",
+        "-Xep:ObjectEqualsForPrimitives:ERROR",
+        "-Xep:ObjectsHashCodePrimitive:ERROR",
+        "-Xep:ObjectToString:ERROR",
         "-Xep:OperatorPrecedence:ERROR",
+        "-Xep:OptionalEquality:ERROR",
+        "-Xep:OptionalMapToOptional:ERROR",
+        "-Xep:OptionalMapUnusedValue:ERROR",
+        "-Xep:OptionalNotPresent:ERROR",
+        "-Xep:OptionalOfRedundantMethod:ERROR",
+        "-Xep:OrphanedFormatString:ERROR",
+        "-Xep:OutlineNone:ERROR",
+        "-Xep:OverlappingQualifierAndScopeAnnotation:ERROR",
+        "-Xep:Overrides:ERROR",
         "-Xep:OverridesGuiceInjectableMethod:ERROR",
+        "-Xep:OverridesJavaxInjectableMethod:ERROR",
+        "-Xep:OverrideThrowableToString:ERROR",
+        "-Xep:PackageInfo:ERROR",
+        "-Xep:ParameterName:ERROR",
+        "-Xep:ParametersButNotParameterized:ERROR",
+        "-Xep:ParcelableCreator:ERROR",
+        "-Xep:PeriodFrom:ERROR",
+        "-Xep:PeriodGetTemporalUnit:ERROR",
+        "-Xep:PeriodTimeMath:ERROR",
+        "-Xep:PreconditionsCheckNotNullRepeated:ERROR",
         "-Xep:PreconditionsInvalidPlaceholder:ERROR",
-        "-Xep:ProtoFieldPreconditionsCheckNotNull:ERROR",
+        "-Xep:PrimitiveAtomicReference:ERROR",
+        "-Xep:PrivateSecurityContractProtoAccess:ERROR",
+        "-Xep:ProtectedMembersInFinalClass:ERROR",
+        "-Xep:ProtoBuilderReturnValueIgnored:ERROR",
         "-Xep:ProtocolBufferOrdinal:ERROR",
+        "-Xep:ProtoDurationGetSecondsGetNano:ERROR",
+        "-Xep:ProtoFieldNullComparison:ERROR",
+        "-Xep:ProtoRedundantSet:ERROR",
+        "-Xep:ProtoStringFieldReferenceEquality:ERROR",
+        "-Xep:ProtoTimestampGetSecondsGetNano:ERROR",
+        "-Xep:ProtoTruthMixedDescriptors:ERROR",
+        "-Xep:ProvidesMethodOutsideOfModule:WARN",
+        "-Xep:RandomCast:ERROR",
+        "-Xep:RandomModInteger:ERROR",
+        "-Xep:ReachabilityFenceUsage:ERROR",
+        "-Xep:RectIntersectReturnValueIgnored:ERROR",
         "-Xep:ReferenceEquality:ERROR",
+        "-Xep:RefersToDaggerCodegen:ERROR",
+        "-Xep:RemovedInJDK11:ERROR",
         "-Xep:RequiredModifiers:ERROR",
+        "-Xep:RestrictedApiChecker:ERROR",
+        "-Xep:RethrowReflectiveOperationExceptionAsLinkageError:ERROR",
+        "-Xep:ReturnFromVoid:ERROR",
+        "-Xep:ReturnMissingNullable:ERROR",
+        "-Xep:ReturnValueIgnored:ERROR",
+        "-Xep:RxReturnValueIgnored:ERROR",
+        "-Xep:SameNameButDifferent:ERROR",
+        "-Xep:SelfAssignment:ERROR",
+        "-Xep:SelfComparison:ERROR",
+        "-Xep:SelfEquals:ERROR",
         "-Xep:ShortCircuitBoolean:ERROR",
-        "-Xep:SimpleDateFormatConstant:ERROR",
+        "-Xep:ShouldHaveEvenArgs:ERROR",
+        "-Xep:SizeGreaterThanOrEqualsZero:ERROR",
+        "-Xep:StaticAssignmentInConstructor:ERROR",
         "-Xep:StaticGuardedByInstance:ERROR",
+        "-Xep:StaticMockMember:ERROR",
+        "-Xep:StaticQualifiedUsingExpression:ERROR",
+        "-Xep:StreamToString:ERROR",
+        "-Xep:StringBuilderInitWithChar:ERROR",
         "-Xep:StringEquality:ERROR",
+        "-Xep:StringSplitter:ERROR",
+        "-Xep:SubstringOfZero:ERROR",
+        "-Xep:SuppressWarningsDeprecated:ERROR",
+        "-Xep:SwigMemoryLeak:ERROR",
         "-Xep:SynchronizeOnNonFinalField:ERROR",
+        "-Xep:TemporalAccessorGetChronoField:ERROR",
+        "-Xep:TestParametersNotInitialized:ERROR",
+        "-Xep:TheoryButNoTheories:ERROR",
+        "-Xep:ThreadJoinLoop:ERROR",
+        "-Xep:ThreadLocalUsage:ERROR",
+        "-Xep:ThreadPriorityCheck:ERROR",
+        "-Xep:ThreeLetterTimeZoneID:ERROR",
+        "-Xep:ThrowIfUncheckedKnownChecked:ERROR",
+        "-Xep:ThrowNull:ERROR",
+        "-Xep:TimeUnitConversionChecker:ERROR",
+        "-Xep:ToStringReturnsNull:ERROR",
+        "-Xep:TreeToString:ERROR",
+        "-Xep:TruthAssertExpected:ERROR",
         "-Xep:TruthConstantAsserts:ERROR",
+        "-Xep:TruthGetOrDefault:ERROR",
+        "-Xep:TruthIncompatibleType:ERROR",
+        "-Xep:TruthSelfEquals:ERROR",
+        "-Xep:TryFailThrowable:ERROR",
+        "-Xep:TypeEquals:ERROR",
+        "-Xep:TypeNameShadowing:ERROR",
+        "-Xep:TypeParameterQualifier:ERROR",
         "-Xep:TypeParameterShadowing:ERROR",
         "-Xep:TypeParameterUnusedInFormals:ERROR",
-        "-Xep:URLEqualsHashCode:ERROR",
+        "-Xep:UndefinedEquals:ERROR",
+        "-Xep:UnescapedEntity:ERROR",
+        "-Xep:UnnecessaryAssignment:ERROR",
+        "-Xep:UnnecessaryCheckNotNull:ERROR",
+        "-Xep:UnnecessaryLambda:ERROR",
+        "-Xep:UnnecessaryMethodInvocationMatcher:ERROR",
+        "-Xep:UnnecessaryMethodReference:ERROR",
+        "-Xep:UnnecessaryParentheses:ERROR",
+        "-Xep:UnnecessaryTypeArgument:ERROR",
+        "-Xep:UnrecognisedJavadocTag:ERROR",
+        "-Xep:UnsafeFinalization:ERROR",
+        "-Xep:UnsafeReflectiveConstructionCast:ERROR",
         "-Xep:UnsynchronizedOverridesSynchronized:ERROR",
+        "-Xep:UnusedAnonymousClass:ERROR",
+        "-Xep:UnusedCollectionModifiedInPlace:ERROR",
         "-Xep:UnusedException:ERROR",
+        "-Xep:UnusedMethod:ERROR",
+        "-Xep:UnusedNestedClass:ERROR",
+        "-Xep:UnusedVariable:ERROR",
+        "-Xep:URLEqualsHashCode:ERROR",
+        "-Xep:UseBinds:ERROR",
+        "-Xep:UseCorrectAssertInTests:ERROR",
+        "-Xep:VariableNameSameAsType:ERROR",
+        "-Xep:VarTypeName:ERROR",
         "-Xep:WaitNotInLoop:ERROR",
+        "-Xep:WakelockReleasedDangerously:ERROR",
         "-Xep:WildcardImport:ERROR",
+        "-Xep:WithSignatureDiscouraged:ERROR",
+        "-Xep:WrongOneof:ERROR",
+        "-Xep:XorPower:ERROR",
+        "-Xep:ZoneIdOfZ:ERROR",
     ],
     packages = ["error_prone_packages"],
 )
diff --git a/version.bzl b/version.bzl
index e4bdfca..fef692b 100644
--- a/version.bzl
+++ b/version.bzl
@@ -3,4 +3,4 @@
 # Used by :install and :deploy when talking to the destination repository.
 # Project uses semantic versioning described at:
 # https://semver.org
-GITILES_VERSION = "1.2.0"
+GITILES_VERSION = "1.3.0"
