diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
index 0373375..d435289 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
@@ -35,7 +35,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.text.Collator;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -228,7 +227,7 @@
     if (baseFiles == null) {
       throw new IOException("base path is not a directory: " + basePath.getPath());
     }
-    todo.addAll(Arrays.asList(baseFiles));
+    Collections.addAll(todo, baseFiles);
     while (!todo.isEmpty()) {
       File file = todo.remove();
       try {
@@ -236,7 +235,7 @@
       } catch (RepositoryNotFoundException e) {
         File[] children = file.listFiles();
         if (children != null) {
-          todo.addAll(Arrays.asList(children));
+          Collections.addAll(todo, children);
         }
       } catch (ServiceNotEnabledException e) {
         throw new IOException(e);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
index 20b0367..9182a88 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
@@ -50,7 +50,7 @@
   private static boolean getBooleanParam(GitilesView view, String name) {
     List<String> values = view.getParameters().get(name);
     return !values.isEmpty()
-        && (values.get(0).equals("") || values.get(0).equals("1"));
+        && (values.get(0).isEmpty() || values.get(0).equals("1"));
   }
 
   protected DescribeServlet(GitilesAccess.Factory accessFactory) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
index cff6eba..3e81703 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -174,7 +174,7 @@
   private static void formatDiff(Repository repo, AbstractTreeIterator oldTree,
       AbstractTreeIterator newTree, String path, DiffFormatter diff) throws IOException {
     try {
-      if (!path.equals("")) {
+      if (!path.isEmpty()) {
         diff.setPathFilter(PathFilter.create(path));
       }
       diff.setRepository(repo);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
index b38c9c6..2a8bf86 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
@@ -316,9 +316,7 @@
     if (config == null) {
       try {
         config = GitilesConfig.loadDefault(filterConfig);
-      } catch (IOException e) {
-        throw new ServletException(e);
-      } catch (ConfigInvalidException e) {
+      } catch (IOException | ConfigInvalidException e) {
         throw new ServletException(e);
       }
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
index eb0e4dc..1a0e1af 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -36,6 +36,7 @@
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.util.Arrays;
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Map;
@@ -272,9 +273,7 @@
 
     public Builder putAllParams(Map<String, String[]> params) {
       for (Map.Entry<String, String[]> e : params.entrySet()) {
-        for (String v : e.getValue()) {
-          this.params.put(e.getKey(), v);
-        }
+        this.params.putAll(e.getKey(), Arrays.asList(e.getValue()));
       }
       return this;
     }
@@ -622,7 +621,7 @@
     if (!Strings.isNullOrEmpty(anchor)) {
       url.append('#').append(NAME_ESCAPER.apply(anchor));
     }
-    return baseUrl + url.toString();
+    return baseUrl + url;
   }
 
   /**
@@ -685,7 +684,7 @@
         breadcrumbs.add(breadcrumb(".", copyWithPath(false).setPathPart("")));
       }
       StringBuilder cur = new StringBuilder();
-      List<String> parts = ImmutableList.copyOf(Paths.SPLITTER.omitEmptyStrings().split(path));
+      List<String> parts = Paths.SPLITTER.omitEmptyStrings().splitToList(path);
       checkArgument(hasSingleTree == null
           || (parts.isEmpty() && hasSingleTree.isEmpty())
           || hasSingleTree.size() == parts.size() - 1,
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
index 99f4c5d..ddf65b4 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
@@ -23,7 +23,6 @@
 
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
@@ -195,7 +194,7 @@
         throw new TooManyUriParametersException();
       }
 
-      List<String> pair = ImmutableList.copyOf(VAR_SPLIT.split(piece));
+      List<String> pair = VAR_SPLIT.splitToList(piece);
       if (pair.size() == 2) {
         map.put(decode(pair.get(0)), decode(pair.get(1)));
       } else { // no equals sign
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
index 72b3d0f..2d52359 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
@@ -36,7 +36,7 @@
 
 import java.io.IOException;
 import java.io.Writer;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 
@@ -156,11 +156,11 @@
     Set<String> branches = Sets.newLinkedHashSet();
     String[] values = req.getParameterValues("show-branch");
     if (values != null) {
-      branches.addAll(Arrays.asList(values));
+      Collections.addAll(branches, values);
     }
     values = req.getParameterValues("b");
     if (values != null) {
-      branches.addAll(Arrays.asList(values));
+      Collections.addAll(branches, values);
     }
     return branches;
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java b/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java
index b56ad36..b94d959 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java
@@ -175,10 +175,6 @@
   private RevCommit nextUnchecked() {
     try {
       return next();
-    } catch (MissingObjectException e) {
-      throw new RevWalkException(e);
-    } catch (IncorrectObjectTypeException e) {
-      throw new RevWalkException(e);
     } catch (IOException e) {
       throw new RevWalkException(e);
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java b/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
index b388e36..00d5763 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
@@ -47,7 +47,7 @@
 
   public static Revision normalizeParentExpressions(Revision rev) {
     if (rev == null
-        || (rev.name.indexOf("~") < 0 && rev.name.indexOf("^") < 0)) {
+        || (rev.name.indexOf('~') < 0 && rev.name.indexOf('^') < 0)) {
       return rev;
     }
     return new Revision(rev.id.name(), rev.id, rev.type, rev.peeledId, rev.peeledType);
@@ -125,9 +125,9 @@
       Revision r = (Revision) o;
       return Objects.equals(name, r.name)
           && Objects.equals(id, r.id)
-          && Objects.equals(type, r.type)
+          && type == r.type
           && Objects.equals(peeledId, r.peeledId)
-          && Objects.equals(peeledType, r.peeledType);
+          && peeledType == r.peeledType;
     }
     return false;
   }
@@ -151,7 +151,6 @@
 
   private boolean nameEqualsAbbreviated(ObjectId other) {
     return AbbreviatedObjectId.isId(name)
-        ? AbbreviatedObjectId.fromString(name).prefixCompare(other) == 0
-        : false;
+        && AbbreviatedObjectId.fromString(name).prefixCompare(other) == 0;
   }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
index fb876b0..5010dd5 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
@@ -129,7 +129,7 @@
           if (dots == 0 || firstParent == 0) {
             return null;
           } else if (dots > 0) {
-            b.append(part.substring(0, dots));
+            b.append(part, 0, dots);
             String oldName = b.toString();
             if (!isValidRevision(oldName)) {
               return null;
@@ -146,7 +146,7 @@
             if (firstParent != part.length() - 2) {
               return null;
             }
-            b.append(part.substring(0, part.length() - 2));
+            b.append(part, 0, part.length() - 2);
             String name = b.toString();
             if (!isValidRevision(name)) {
               return null;
@@ -206,9 +206,7 @@
     } catch (AmbiguousObjectException e) {
       // TODO(dborowitz): Render a helpful disambiguation page.
       return null;
-    } catch (RevisionSyntaxException e) {
-      return null;
-    } catch (MissingObjectException e) {
+    } catch (RevisionSyntaxException | MissingObjectException e) {
       return null;
     }
   }
@@ -216,9 +214,9 @@
   private static boolean isValidRevision(String revision) {
     // Disallow some uncommon but valid revision expressions that either we
     // don't support or we represent differently in our URLs.
-    return revision.indexOf(':') < 0
-        && revision.indexOf("^{") < 0
-        && revision.indexOf('@') < 0;
+    return !revision.contains(":")
+        && !revision.contains("^{")
+        && !revision.contains("@");
   }
 
   private boolean isVisible(RevWalk walk, Result result) throws IOException {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
index a11d7b2..cc36da8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
@@ -218,9 +218,7 @@
     }
     try {
       walk.markUninteresting(walk.parseCommit(id));
-    } catch (IncorrectObjectTypeException e) {
-      // Do nothing, doesn't affect reachability.
-    } catch (MissingObjectException e) {
+    } catch (IncorrectObjectTypeException | MissingObjectException e) {
       // Do nothing, doesn't affect reachability.
     }
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/blame/Region.java b/gitiles-servlet/src/main/java/com/google/gitiles/blame/Region.java
index 09a39d6..d6f928d 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/blame/Region.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/blame/Region.java
@@ -79,7 +79,7 @@
   public String toString() {
     StringBuilder sb = new StringBuilder();
     if (sourceCommit != null) {
-      sb.append(sourceCommit.name().substring(0, 7))
+      sb.append(sourceCommit.name(), 0, 7)
           .append(' ')
           .append(sourceAuthor.toExternalString())
           .append(" (").append(sourcePath).append(')');
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java
index c02da47..e9da3a7 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java
@@ -69,7 +69,7 @@
         c1.name(), c2.name());
     String actual = res.getActualBodyString();
     assertTrue(String.format("Expected diff body to contain [%s]:\n%s", diffHeader, actual),
-        actual.indexOf(diffHeader) >= 0);
+        actual.contains(diffHeader));
   }
 
   @Test
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
index ee886a1..5890e78 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
@@ -21,7 +21,6 @@
 
 import com.google.common.base.Function;
 import com.google.common.base.Splitter;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
@@ -174,7 +173,7 @@
   public void setQueryString(String qs) {
     ListMultimap<String, String> params = LinkedListMultimap.create();
     for (String entry : Splitter.on('&').split(qs)) {
-      List<String> kv = ImmutableList.copyOf(Splitter.on('=').limit(2).split(entry));
+      List<String> kv = Splitter.on('=').limit(2).splitToList(entry);
       try {
         params.put(URLDecoder.decode(kv.get(0), UTF_8.name()),
             kv.size() == 2 ? URLDecoder.decode(kv.get(1), UTF_8.name()) : "");
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java
index 941f332..8c596d8 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java
@@ -169,7 +169,7 @@
 
   @Override
   public boolean containsHeader(String name) {
-    return !headers.get(name).isEmpty();
+    return headers.containsKey(name);
   }
 
   @Override
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
index 8474ae2..9271133 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
@@ -123,14 +123,14 @@
     // Matches exactly.
     assertEquals(new Result(Revision.peeled(commit.name(), commit)), parser.parse(commit.name()));
     // refs/changes/* is excluded from ancestry search.
-    assertEquals(null, parser.parse(parent.name()));
+    assertNull(parser.parse(parent.name()));
   }
 
   @Test
   public void parseNonVisibleCommitSha() throws Exception {
     RevCommit other = repo.commit().create();
     repo.branch("master").commit().create();
-    assertEquals(null, parser.parse(other.name()));
+    assertNull(parser.parse(other.name()));
 
     repo.branch("other").update(other);
     assertEquals(new Result(Revision.peeled(other.name(), other)), parser.parse(other.name()));
@@ -232,8 +232,8 @@
   public void nonVisibleDiffShas() throws Exception {
     RevCommit other = repo.commit().create();
     RevCommit master = repo.branch("master").commit().create();
-    assertEquals(null, parser.parse("other..master"));
-    assertEquals(null, parser.parse("master..other"));
+    assertNull(parser.parse("other..master"));
+    assertNull(parser.parse("master..other"));
 
     repo.branch("other").update(other);
     assertEquals(
@@ -277,17 +277,17 @@
     RevCommit master = repo.branch("master").commit().add("blob", blob).create();
 
     assertEquals(master, repo.getRepository().resolve("master^{}"));
-    assertEquals(null, parser.parse("master^{}"));
+    assertNull(parser.parse("master^{}"));
 
     assertEquals(master, repo.getRepository().resolve("master^{commit}"));
-    assertEquals(null, parser.parse("master^{commit}"));
+    assertNull(parser.parse("master^{commit}"));
 
     assertEquals(blob, repo.getRepository().resolve("master:blob"));
-    assertEquals(null, parser.parse("master:blob"));
+    assertNull(parser.parse("master:blob"));
 
     // TestRepository has no simple way of setting the reflog.
     //assertEquals(null, repo.getRepository().resolve("master@{0}"));
-    assertEquals(null, parser.parse("master@{0}"));
+    assertNull(parser.parse("master@{0}"));
   }
 
   @Test
