diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java
index 4bc26a2..9edfc26 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java
@@ -38,6 +38,8 @@
 @RunWith(JUnit4.class)
 public class HostIndexServletTest extends ServletTest {
   private static final String NAME = "foo/bar/repo";
+  private static final TypeToken<Map<String, RepositoryDescription>> REPOS =
+      new TypeToken<Map<String, RepositoryDescription>>() {};
 
   @Override
   @Before
@@ -118,9 +120,7 @@
   @Test
   public void rootJson() throws Exception {
     String name = repo.getRepository().getDescription().getRepositoryName();
-    Map<String, RepositoryDescription> res = buildJson(
-        "/",
-        new TypeToken<Map<String, RepositoryDescription>>() {}.getType());
+    Map<String, RepositoryDescription> res = buildJson("/", REPOS);
 
     assertThat(res).hasSize(1);
     assertThat(res).containsKey(name);
@@ -130,9 +130,7 @@
 
   @Test
   public void fooSubdirJson() throws Exception {
-    Map<String, RepositoryDescription> res = buildJson(
-        "/foo/",
-        new TypeToken<Map<String, RepositoryDescription>>() {}.getType());
+    Map<String, RepositoryDescription> res = buildJson("/foo/", REPOS);
 
     assertThat(res).hasSize(1);
     assertThat(res).containsKey("bar/repo");
@@ -142,9 +140,7 @@
 
   @Test
   public void fooBarSubdirJson() throws Exception {
-    Map<String, RepositoryDescription> res = buildJson(
-        "/foo/bar/",
-        new TypeToken<Map<String, RepositoryDescription>>() {}.getType());
+    Map<String, RepositoryDescription> res = buildJson("/foo/bar/", REPOS);
 
     assertThat(res).hasSize(1);
     assertThat(res).containsKey("repo");
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
index 261afec..a7c9d70 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
@@ -37,7 +37,7 @@
   public void basicLog() throws Exception {
     RevCommit commit = repo.branch("HEAD").commit().create();
 
-    Log response = buildJson("/repo/+log", LOG.getType(), "");
+    Log response = buildJson("/repo/+log", LOG, "");
     assertThat(response.log).hasSize(1);
     verifyJsonCommit(response.log.get(0), commit);
     assertThat(response.log.get(0).treeDiff).isNull();
@@ -50,7 +50,7 @@
     RevCommit c1 = repo.update("master", repo.commit().add("foo", contents1));
     RevCommit c2 = repo.update("master", repo.commit().parent(c1).add("foo", contents2));
 
-    Log response = buildJson("/repo/+log/master", LOG.getType(), "&name-status=1");
+    Log response = buildJson("/repo/+log/master", LOG, "&name-status=1");
     assertThat(response.log).hasSize(2);
 
     Commit jc2 = response.log.get(0);
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
index 7d7816c..1cc33e5 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
@@ -200,9 +200,7 @@
   }
 
   private Map<String, RefJsonData> buildRefJson(String path) throws Exception {
-    return buildJson(
-        path,
-        new TypeToken<Map<String, RefJsonData>>() {}.getType());
+    return buildJson(path, new TypeToken<Map<String, RefJsonData>>() {});
   }
 
   @Test
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
index 83469a2..b0a1dd1 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
@@ -23,6 +23,7 @@
 import com.google.gson.FieldNamingPolicy;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
 
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
@@ -30,7 +31,6 @@
 import org.eclipse.jgit.junit.TestRepository;
 import org.junit.Before;
 
-import java.lang.reflect.Type;
 import java.util.Map;
 
 /** Base class for servlet tests. */
@@ -110,12 +110,12 @@
     return buildJson(path, classOfT, "");
   }
 
-  protected <T> T buildJson(String path, Type typeOfT, String additionalQueryString)
+  protected <T> T buildJson(String path, TypeToken<T> typeOfT, String additionalQueryString)
       throws Exception {
-    return newGson().fromJson(buildJsonRaw(path, additionalQueryString), typeOfT);
+    return newGson().fromJson(buildJsonRaw(path, additionalQueryString), typeOfT.getType());
   }
 
-  protected <T> T buildJson(String path, Type typeOfT) throws Exception {
+  protected <T> T buildJson(String path, TypeToken<T> typeOfT) throws Exception {
     return buildJson(path, typeOfT, "");
   }
 
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
index a86ae83..dedbfde 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
@@ -71,6 +71,6 @@
   }
 
   private Map<String, List<RegionJsonData>> getBlameJson(String path) throws Exception {
-    return buildJson(path, new TypeToken<Map<String, List<RegionJsonData>>>() {}.getType());
+    return buildJson(path, new TypeToken<Map<String, List<RegionJsonData>>>() {});
   }
 }
