diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
index 1e7c1da..e839a9f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -118,6 +118,7 @@
       case JSON:
         doGetJson(req, res);
         break;
+      case DEFAULT:
       default:
         res.sendError(SC_BAD_REQUEST);
         break;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
index 1db047b..4b75ffd 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
@@ -144,6 +144,9 @@
         case RENAME:
           d.score = de.getScore();
           break;
+        case ADD:
+        case DELETE:
+        case MODIFY:
         default:
           break;
       }
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 2d674f8..057ebf4 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -169,26 +169,23 @@
     }
 
     public Builder setRepositoryPrefix(String prefix) {
-      switch (type) {
-        case HOST_INDEX:
-          this.repositoryPrefix =
-              prefix != null ? Strings.emptyToNull(maybeTrimLeadingAndTrailingSlash(prefix)) : null;
-          return this;
-        default:
-          throw new IllegalStateException(
-              String.format("cannot set repository prefix on %s view", type));
+      if (type == Type.HOST_INDEX) {
+        this.repositoryPrefix = prefix != null
+            ? Strings.emptyToNull(maybeTrimLeadingAndTrailingSlash(prefix))
+            : null;
+        return this;
       }
+      throw new IllegalStateException(
+          String.format("cannot set repository prefix on %s view", type));
     }
 
     public Builder setRepositoryName(String repositoryName) {
-      switch (type) {
-        case HOST_INDEX:
-          throw new IllegalStateException(
-              String.format("cannot set repository name on %s view", type));
-        default:
-          this.repositoryName = checkNotNull(repositoryName);
-          return this;
+      if (type == Type.HOST_INDEX) {
+        throw new IllegalStateException(
+            String.format("cannot set repository name on %s view", type));
       }
+      this.repositoryName = checkNotNull(repositoryName);
+      return this;
     }
 
     public String getRepositoryName() {
@@ -202,6 +199,15 @@
         case REFS:
         case DESCRIBE:
           throw new IllegalStateException(String.format("cannot set revision on %s view", type));
+        case ARCHIVE:
+        case BLAME:
+        case DIFF:
+        case DOC:
+        case LOG:
+        case PATH:
+        case REVISION:
+        case ROOTED_DOC:
+        case SHOW:
         default:
           this.revision = checkNotNull(revision);
           return this;
@@ -225,14 +231,9 @@
     }
 
     public Builder setOldRevision(Revision revision) {
-      switch (type) {
-        case DIFF:
-        case LOG:
-          break;
-        default:
-          revision = firstNonNull(revision, Revision.NULL);
-          checkState(revision == Revision.NULL, "cannot set old revision on %s view", type);
-          break;
+      if (type != Type.DIFF && type != Type.LOG) {
+        revision = firstNonNull(revision, Revision.NULL);
+        checkState(revision == Revision.NULL, "cannot set old revision on %s view", type);
       }
       this.oldRevision = revision;
       return this;
@@ -265,6 +266,9 @@
         case DOC:
         case ROOTED_DOC:
           break;
+        case HOST_INDEX:
+        case REPOSITORY_INDEX:
+        case REVISION:
         default:
           checkState(path == null, "cannot set path on %s view", type);
           break;
@@ -278,14 +282,10 @@
     }
 
     public Builder setExtension(String extension) {
-      switch (type) {
-        default:
-          checkState(extension == null, "cannot set extension on %s view", type);
-          //$FALL-THROUGH$
-        case ARCHIVE:
-          this.extension = extension;
-          break;
+      if (type != Type.ARCHIVE) {
+        checkState(extension == null, "cannot set extension on %s view", type);
       }
+      this.extension = extension;
       return this;
     }
 
@@ -567,17 +567,14 @@
 
   public String getRevisionRange() {
     if (oldRevision == Revision.NULL) {
-      switch (type) {
-        case LOG:
-        case DIFF:
-          // For types that require two revisions, NULL indicates the empty
-          // tree/commit.
-          return revision.getName() + "^!";
-        default:
-          // For everything else NULL indicates it is not a range, just a single
-          // revision.
-          return null;
+      if (type == Type.LOG || type == Type.DIFF) {
+        // For types that require two revisions, NULL indicates the empty
+        // tree/commit.
+        return revision.getName() + "^!";
       }
+      // For everything else NULL indicates it is not a range, just a single
+      // revision.
+      return null;
     } else if (type == Type.DIFF && isFirstParent(revision, oldRevision)) {
       return revision.getName() + "^!";
     } else {
@@ -842,6 +839,16 @@
       case BLAME:
         copy = isLeaf ? blame() : path();
         break;
+      case ARCHIVE:
+      case DESCRIBE:
+      case DOC:
+      case HOST_INDEX:
+      case PATH:
+      case REFS:
+      case REPOSITORY_INDEX:
+      case REVISION:
+      case ROOTED_DOC:
+      case SHOW:
       default:
         copy = path();
         break;
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 c1f10e6..f0df112 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
@@ -126,6 +126,7 @@
         res.setStatus(HttpServletResponse.SC_OK);
         res.setContentType(format.get().getMimeType());
         break;
+      case DEFAULT:
       default:
         res.sendError(SC_BAD_REQUEST);
         break;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
index 1cba00c..bd6219b 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -186,6 +186,7 @@
         case TREE:
           writeTreeText(req, res, wr);
           break;
+        case GITLINK:
         default:
           renderTextError(req, res, SC_NOT_FOUND, "Not a file");
           break;
@@ -253,21 +254,14 @@
 
     try (RevWalk rw = new RevWalk(repo);
         WalkResult wr = WalkResult.forPath(rw, view, recursive)) {
-      if (wr == null) {
+      if (wr == null || wr.type != FileType.TREE) {
         res.setStatus(SC_NOT_FOUND);
-        return;
-      }
-      switch (wr.type) {
-        case TREE:
-          renderJson(
-              req,
-              res,
-              TreeJsonData.toJsonData(wr.id, wr.tw, includeSizes, recursive),
-              TreeJsonData.Tree.class);
-          break;
-        default:
-          res.setStatus(SC_NOT_FOUND);
-          break;
+      } else {
+        renderJson(
+            req,
+            res,
+            TreeJsonData.toJsonData(wr.id, wr.tw, includeSizes, recursive),
+            TreeJsonData.Tree.class);
       }
     } catch (LargeObjectException e) {
       res.setStatus(SC_INTERNAL_SERVER_ERROR);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
index fee1507..3b754df 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -78,6 +78,7 @@
         res.setContentType(format.get().getMimeType());
         break;
       case TEXT:
+      case DEFAULT:
       default:
         res.sendError(SC_BAD_REQUEST);
         break;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
index ef3289a..f32e2cf 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
@@ -99,17 +99,15 @@
       FileType type = FileType.forEntry(tw);
       String name = tw.getNameString();
 
-      switch (view.getType()) {
-        case PATH:
-          urlBuilder.setPathPart(view.getPathPart() + "/" + name);
-          break;
-        case REVISION:
-          // Got here from a tag pointing at a tree.
-          urlBuilder.setPathPart(name);
-          break;
-        default:
-          throw new IllegalStateException(
-              String.format("Cannot render TreeSoyData from %s view", view.getType()));
+      GitilesView.Type viewType = view.getType();
+      if (viewType == GitilesView.Type.PATH) {
+        urlBuilder.setPathPart(view.getPathPart() + "/" + name);
+      } else if (viewType == GitilesView.Type.REVISION) {
+        // Got here from a tag pointing at a tree.
+        urlBuilder.setPathPart(name);
+      } else {
+        throw new IllegalStateException(
+            String.format("Cannot render TreeSoyData from %s view", viewType));
       }
 
       String url = urlBuilder.toUrl();
