diff --git a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
index 41091af..b655284 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
@@ -37,22 +37,25 @@
  */
 public class RuleDocumentationAttribute implements Comparable<RuleDocumentationAttribute> {
 
-  private static final Map<Type<?>, String> TYPE_DESC = ImmutableMap.<Type<?>, String>builder()
-      .put(Type.BOOLEAN, "Boolean")
-      .put(Type.INTEGER, "Integer")
-      .put(Type.INTEGER_LIST, "List of integers")
-      .put(Type.STRING, "String")
-      .put(Type.STRING_LIST, "List of strings")
-      .put(BuildType.TRISTATE, "Integer")
-      .put(BuildType.LABEL, "<a href=\"../build-ref.html#labels\">Label</a>")
-      .put(BuildType.LABEL_LIST, "List of <a href=\"../build-ref.html#labels\">labels</a>")
-      .put(BuildType.LABEL_DICT_UNARY,
-          "Dictionary mapping strings to <a href=\"../build-ref.html#labels\">labels</a>")
-      .put(BuildType.NODEP_LABEL, "<a href=\"../build-ref.html#name\">Name</a>")
-      .put(BuildType.NODEP_LABEL_LIST, "List of <a href=\"../build-ref.html#name\">names</a>")
-      .put(BuildType.OUTPUT, "<a href=\"../build-ref.html#filename\">Filename</a>")
-      .put(BuildType.OUTPUT_LIST, "List of <a href=\"../build-ref.html#filename\">filenames</a>")
-      .build();
+  private static final ImmutableMap<Type<?>, String> TYPE_DESC =
+      ImmutableMap.<Type<?>, String>builder()
+          .put(Type.BOOLEAN, "Boolean")
+          .put(Type.INTEGER, "Integer")
+          .put(Type.INTEGER_LIST, "List of integers")
+          .put(Type.STRING, "String")
+          .put(Type.STRING_LIST, "List of strings")
+          .put(BuildType.TRISTATE, "Integer")
+          .put(BuildType.LABEL, "<a href=\"../build-ref.html#labels\">Label</a>")
+          .put(BuildType.LABEL_LIST, "List of <a href=\"../build-ref.html#labels\">labels</a>")
+          .put(
+              BuildType.LABEL_DICT_UNARY,
+              "Dictionary mapping strings to <a href=\"../build-ref.html#labels\">labels</a>")
+          .put(BuildType.NODEP_LABEL, "<a href=\"../build-ref.html#name\">Name</a>")
+          .put(BuildType.NODEP_LABEL_LIST, "List of <a href=\"../build-ref.html#name\">names</a>")
+          .put(BuildType.OUTPUT, "<a href=\"../build-ref.html#filename\">Filename</a>")
+          .put(
+              BuildType.OUTPUT_LIST, "List of <a href=\"../build-ref.html#filename\">filenames</a>")
+          .build();
 
   private final Class<? extends RuleDefinition> definitionClass;
   private final String attributeName;
diff --git a/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java b/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java
index e521c50..6bbd94c 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java
@@ -18,7 +18,6 @@
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Set;
 import java.util.regex.Matcher;
 
 /**
@@ -33,24 +32,24 @@
   private static final String IMPLICIT_OUTPUTS_SUFFIX = "_implicit_outputs";
   private static final String FUNCTIONS_PAGE = "functions";
 
-  private static final Set<String> STATIC_PAGES = ImmutableSet.<String>of(
-      "common-definitions",
-      "make-variables",
-      "predefined-python-variables");
-  private static final Map<String, String> FUNCTIONS = ImmutableMap.<String, String>builder()
-      .put("load", FUNCTIONS_PAGE)
-      .put("subinclude", FUNCTIONS_PAGE)
-      .put("PYTHON-PREPROCESSING-REQUIRED", FUNCTIONS_PAGE)
-      .put("package", FUNCTIONS_PAGE)
-      .put("package_group", FUNCTIONS_PAGE)
-      .put("description", FUNCTIONS_PAGE)
-      .put("distribs", FUNCTIONS_PAGE)
-      .put("licenses", FUNCTIONS_PAGE)
-      .put("exports_files", FUNCTIONS_PAGE)
-      .put("glob", FUNCTIONS_PAGE)
-      .put("select", FUNCTIONS_PAGE)
-      .put("workspace", FUNCTIONS_PAGE)
-      .build();
+  private static final ImmutableSet<String> STATIC_PAGES =
+      ImmutableSet.<String>of(
+          "common-definitions", "make-variables", "predefined-python-variables");
+  private static final ImmutableMap<String, String> FUNCTIONS =
+      ImmutableMap.<String, String>builder()
+          .put("load", FUNCTIONS_PAGE)
+          .put("subinclude", FUNCTIONS_PAGE)
+          .put("PYTHON-PREPROCESSING-REQUIRED", FUNCTIONS_PAGE)
+          .put("package", FUNCTIONS_PAGE)
+          .put("package_group", FUNCTIONS_PAGE)
+          .put("description", FUNCTIONS_PAGE)
+          .put("distribs", FUNCTIONS_PAGE)
+          .put("licenses", FUNCTIONS_PAGE)
+          .put("exports_files", FUNCTIONS_PAGE)
+          .put("glob", FUNCTIONS_PAGE)
+          .put("select", FUNCTIONS_PAGE)
+          .put("workspace", FUNCTIONS_PAGE)
+          .build();
 
   private final String productName;
   private final Map<String, String> ruleIndex = new HashMap<>();
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java
index e2929f3..377db90 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java
@@ -28,14 +28,13 @@
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
 import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
 
-import java.util.Set;
 
 /**
  * Rule definition for the java_import rule.
  */
 public final class BazelJavaImportRule implements RuleDefinition {
 
-  private static final Set<String> ALLOWED_DEPS =
+  private static final ImmutableSet<String> ALLOWED_DEPS =
       ImmutableSet.of("java_library", "java_import", "cc_library", "cc_binary");
 
   @Override
