Fix the documentation of set/depset

--
PiperOrigin-RevId: 147456653
MOS_MIGRATED_REVID=147456653
diff --git a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
index a6f9bb6..2eccf19 100644
--- a/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/SkylarkDocumentationCollector.java
@@ -86,7 +86,10 @@
     for (SkylarkModuleDoc builtinObject : builtinModules.values()) {
       // Check the return type for built-in functions, it can be a module previously not added.
       for (SkylarkBuiltinMethodDoc builtinMethod : builtinObject.getBuiltinMethods().values()) {
-        Class<?> type = builtinMethod.getAnnotation().returnType();
+        Class<?> type = builtinMethod.getAnnotation().documentationReturnType();
+        if (type == Object.class) {
+          type = builtinMethod.getAnnotation().returnType();
+        }
         if (type.isAnnotationPresent(SkylarkModule.class)) {
           collectJavaObjects(type.getAnnotation(SkylarkModule.class), type, modules);
         }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
index ed5f9d6..58eee47 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
@@ -48,7 +48,7 @@
     + "<li><h3 id=\"modules.Target.label\">label</h3><code><a class=\"anchor\" "
     + "href=\"Label.html\">Label</a> Target.label</code><br>The identifier of the target.</li>"
     + "<li><h3 id=\"modules.Target.files\">files</h3><code><a class=\"anchor\" "
-    + "href=\"set.html\">set</a> Target.files </code><br>The set of <a class=\"anchor\" "
+    + "href=\"depset.html\">depset</a> Target.files </code><br>The set of <a class=\"anchor\" "
     + "href=\"File.html\">File</a>s produced directly by this target.</li>"
     + "<li><h3 id=\"modules.Target.aspect_ids\">aspect_ids</h3><code><a class=\"anchor\""
     + "href=\"list.html\">list</a> Target.aspect_ids </code><br>The list of <a class=\"anchor\" "
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkFileType.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkFileType.java
index b077b01..287308c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkFileType.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkFileType.java
@@ -53,7 +53,7 @@
   @SkylarkCallable(doc =
       "Returns a list created from the elements of the parameter containing all the "
     + "<a href=\"File.html\"><code>File</code></a>s that match the FileType. The parameter "
-    + "must be a <a href=\"set.html\"><code>set</code></a> or a "
+    + "must be a <a href=\"depset.html\"><code>depset</code></a> or a "
     + "<a href=\"list.html\"><code>list</code></a>.")
   // toIterablesStrict() will ensure the parameter is a SkylarkNestedSet or a java Iterable
   // (including SkylarkList). If it fails, the error location information will be inserted by the
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkSignature.java b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkSignature.java
index a767010..d69aebc 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkSignature.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkinterface/SkylarkSignature.java
@@ -97,6 +97,13 @@
    */
   Class<?> returnType() default Object.class;
 
+  /**
+   * Fake return type of the function. Used by the documentation generator for documenting
+   * deprecated functions (documentation for this type is generated, even if it's not the real
+   * return type).
+   */
+  Class<?> documentationReturnType() default Object.class;
+
   // TODO(bazel-team): determine this way whether to accept mutable Lists
   // boolean mutableLists() default false;
 
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BazelLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/BazelLibrary.java
index b943e4a..30b4161 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BazelLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BazelLibrary.java
@@ -100,6 +100,7 @@
   @SkylarkSignature(
     name = "set",
     returnType = SkylarkNestedSet.class,
+    documentationReturnType = SkylarkNestedSet.LegacySet.class,
     doc =
         "A temporary alias for <a href=\"#depset\">depset</a>. "
             + "Deprecated in favor of <code>depset</code>.",
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
index 5b42cd7..cff3298 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
@@ -109,6 +109,20 @@
   @Nullable
   private final List<NestedSet> transitiveItems;
 
+  // Dummy class used to create a documentation for the deprecated `set` type
+  // TODO(bazel-team): remove before the end of 2017
+  @SkylarkModule(
+      name = "set",
+      category = SkylarkModuleCategory.BUILTIN,
+      doc = "A deprecated alias for <a href=\"depset.html\">depset</a>. "
+          + "Please use <a href=\"depset.html\">depset</a> instead. "
+          + "If you need a hash set that supports O(1) membership testing "
+          + "consider using a <a href=\"dict.html\">dict</a>."
+  )
+  static final class LegacySet {
+    private LegacySet() {}
+  }
+
   public SkylarkNestedSet(Order order, Object item, Location loc) throws EvalException {
     this(order, SkylarkType.TOP, item, loc, null);
   }