diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
index ceaf43a..9595c43 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
@@ -34,10 +34,10 @@
 import com.google.devtools.build.lib.skylarkbuildapi.ActionApi;
 import com.google.devtools.build.lib.skylarkbuildapi.CommandLineArgsApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.Root;
 import com.google.devtools.build.lib.vfs.Symlinks;
@@ -520,15 +520,13 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkInputs() {
-    return SkylarkNestedSet.of(Artifact.class, NestedSetBuilder.wrap(
-        Order.STABLE_ORDER, getInputs()));
+  public Depset getSkylarkInputs() {
+    return Depset.of(Artifact.class, NestedSetBuilder.wrap(Order.STABLE_ORDER, getInputs()));
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkOutputs() {
-    return SkylarkNestedSet.of(Artifact.class, NestedSetBuilder.wrap(
-        Order.STABLE_ORDER, getOutputs()));
+  public Depset getSkylarkOutputs() {
+    return Depset.of(Artifact.class, NestedSetBuilder.wrap(Order.STABLE_ORDER, getOutputs()));
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
index 79e0749..9ed513c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java
@@ -19,8 +19,8 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skylarkbuildapi.DefaultInfoApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import javax.annotation.Nullable;
 
@@ -28,7 +28,7 @@
 @Immutable
 public final class DefaultInfo extends NativeInfo implements DefaultInfoApi {
 
-  private final SkylarkNestedSet files;
+  private final Depset files;
   private final Runfiles runfiles;
   private final Runfiles dataRunfiles;
   private final Runfiles defaultRunfiles;
@@ -46,19 +46,21 @@
       FilesToRunProvider filesToRunProvider) {
     this(
         Location.BUILTIN,
-        SkylarkNestedSet.of(Artifact.class, fileProvider.getFilesToBuild()),
+        Depset.of(Artifact.class, fileProvider.getFilesToBuild()),
         Runfiles.EMPTY,
         (runfilesProvider == null) ? Runfiles.EMPTY : runfilesProvider.getDataRunfiles(),
         (runfilesProvider == null) ? Runfiles.EMPTY : runfilesProvider.getDefaultRunfiles(),
         filesToRunProvider.getExecutable(),
-        filesToRunProvider
-    );
+        filesToRunProvider);
   }
 
   private DefaultInfo(
       Location loc,
-      SkylarkNestedSet files, Runfiles runfiles,
-      Runfiles dataRunfiles, Runfiles defaultRunfiles, Artifact executable,
+      Depset files,
+      Runfiles runfiles,
+      Runfiles dataRunfiles,
+      Runfiles defaultRunfiles,
+      Artifact executable,
       @Nullable FilesToRunProvider filesToRunProvider) {
     super(PROVIDER, loc);
     this.files = files;
@@ -77,7 +79,7 @@
   }
 
   @Override
-  public SkylarkNestedSet getFiles() {
+  public Depset getFiles() {
     return files;
   }
 
@@ -144,11 +146,12 @@
 
       return new DefaultInfo(
           loc,
-          castNoneToNull(SkylarkNestedSet.class, files),
+          castNoneToNull(Depset.class, files),
           statelessRunfiles,
           dataRunfiles,
           defaultRunfiles,
-          castNoneToNull(Artifact.class, executable), null);
+          castNoneToNull(Artifact.class, executable),
+          null);
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/FileProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/FileProvider.java
index d71cf86..fa3bda6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/FileProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/FileProvider.java
@@ -21,7 +21,7 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skylarkbuildapi.FileProviderApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /**
  * A representation of the concept "this transitive info provider builds these files".
@@ -56,8 +56,8 @@
    * implicit targets, for example, deploy jars.
    */
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getFilesToBuildForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, filesToBuild);
+  public Depset /*<Artifact>*/ getFilesToBuildForStarlark() {
+    return Depset.of(Artifact.TYPE, filesToBuild);
   }
 
   public NestedSet<Artifact> getFilesToBuild() {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
index 9285092..aa90fac 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
@@ -32,11 +32,11 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skylarkbuildapi.OutputGroupInfoApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.SkylarkIndexable;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -248,7 +248,7 @@
 
     NestedSet<Artifact> result = outputGroups.get(key);
     if (result != null) {
-      return SkylarkNestedSet.of(Artifact.class, result);
+      return Depset.of(Artifact.class, result);
     } else {
       throw new EvalException(loc, String.format(
           "Output group %s not present", key
@@ -272,7 +272,7 @@
     if (result == null) {
       return null;
     }
-    return SkylarkNestedSet.of(Artifact.class, result);
+    return Depset.of(Artifact.class, result);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
index 0efe6b5..e9dc72a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Runfiles.java
@@ -39,7 +39,7 @@
 import com.google.devtools.build.lib.skylarkbuildapi.RunfilesApi;
 import com.google.devtools.build.lib.skylarkbuildapi.SymlinkEntryApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -338,8 +338,8 @@
    * pruning manifest candidates.
    */
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getArtifactsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, getArtifacts());
+  public Depset /*<Artifact>*/ getArtifactsForStarlark() {
+    return Depset.of(Artifact.TYPE, getArtifacts());
   }
 
   public NestedSet<Artifact> getArtifacts() {
@@ -353,8 +353,8 @@
 
   /** Returns the symlinks. */
   @Override
-  public SkylarkNestedSet /*<SymlinkEntry>*/ getSymlinksForStarlark() {
-    return SkylarkNestedSet.of(SymlinkEntry.class, symlinks);
+  public Depset /*<SymlinkEntry>*/ getSymlinksForStarlark() {
+    return Depset.of(SymlinkEntry.class, symlinks);
   }
 
   public NestedSet<SymlinkEntry> getSymlinks() {
@@ -362,8 +362,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ getEmptyFilenamesForStarlark() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, getEmptyFilenames());
+  public Depset /*<String>*/ getEmptyFilenamesForStarlark() {
+    return Depset.of(SkylarkType.STRING, getEmptyFilenames());
   }
 
   public NestedSet<String> getEmptyFilenames() {
@@ -588,8 +588,8 @@
 
   /** Returns the root symlinks. */
   @Override
-  public SkylarkNestedSet /*<SymlinkEntry>*/ getRootSymlinksForStarlark() {
-    return SkylarkNestedSet.of(SymlinkEntry.class, rootSymlinks);
+  public Depset /*<SymlinkEntry>*/ getRootSymlinksForStarlark() {
+    return Depset.of(SymlinkEntry.class, rootSymlinks);
   }
 
   public NestedSet<SymlinkEntry> getRootSymlinks() {
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 75f253c..4d3aaaa1 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
@@ -25,8 +25,8 @@
 import com.google.devtools.build.lib.packages.RequiredProviders;
 import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
 import com.google.devtools.build.lib.skylarkbuildapi.TransitiveInfoCollectionApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.SkylarkIndexable;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import javax.annotation.Nullable;
 
 /**
@@ -48,12 +48,12 @@
     extends SkylarkIndexable, ProviderCollection, TransitiveInfoCollectionApi {
 
   @Override
-  default SkylarkNestedSet outputGroup(String group) {
+  default Depset outputGroup(String group) {
     OutputGroupInfo provider = OutputGroupInfo.get(this);
     NestedSet<Artifact> result = provider != null
         ? provider.getOutputGroup(group)
         : NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER);
-    return SkylarkNestedSet.of(Artifact.class, result);
+    return Depset.of(Artifact.class, result);
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/Args.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/Args.java
index b6cdb61..e659a59 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/Args.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/Args.java
@@ -30,11 +30,11 @@
 import com.google.devtools.build.lib.skylarkbuildapi.CommandLineArgsApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
 import com.google.devtools.build.lib.syntax.BaseFunction;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.FunctionSignature;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkMutable;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
@@ -279,7 +279,7 @@
       if (argName != null) {
         commandLine.add(argName);
       }
-      if (value instanceof SkylarkNestedSet || value instanceof Sequence) {
+      if (value instanceof Depset || value instanceof Sequence) {
         throw new EvalException(
             loc,
             "Args#add doesn't accept vectorized arguments. "
@@ -399,8 +399,8 @@
         Location loc)
         throws EvalException {
       SkylarkCustomCommandLine.VectorArg.Builder vectorArg;
-      if (value instanceof SkylarkNestedSet) {
-        SkylarkNestedSet skylarkNestedSet = ((SkylarkNestedSet) value);
+      if (value instanceof Depset) {
+        Depset skylarkNestedSet = ((Depset) value);
         NestedSet<?> nestedSet = skylarkNestedSet.getSet();
         if (expandDirectories) {
           potentialDirectoryArtifacts.add(nestedSet);
@@ -444,7 +444,7 @@
     }
 
     private void validateValues(Object values, Location loc) throws EvalException {
-      if (!(values instanceof Sequence || values instanceof SkylarkNestedSet)) {
+      if (!(values instanceof Sequence || values instanceof Depset)) {
         throw new EvalException(
             loc,
             String.format(
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
index 9c83a4f..d4c3220 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
@@ -51,11 +51,11 @@
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.SkylarkActionFactoryApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
@@ -203,8 +203,8 @@
   public void doNothing(String mnemonic, Object inputs, Location location) throws EvalException {
     context.checkMutable("actions.do_nothing");
     NestedSet<Artifact> inputSet =
-        inputs instanceof SkylarkNestedSet
-            ? ((SkylarkNestedSet) inputs).getSetFromParam(Artifact.class, "inputs")
+        inputs instanceof Depset
+            ? ((Depset) inputs).getSetFromParam(Artifact.class, "inputs")
             : NestedSetBuilder.<Artifact>compileOrder()
                 .addAll(((Sequence<?>) inputs).getContents(Artifact.class, "inputs"))
                 .build();
@@ -499,8 +499,7 @@
       inputArtifacts = ((Sequence<?>) inputs).getContents(Artifact.class, "inputs");
       builder.addInputs(inputArtifacts);
     } else {
-      NestedSet<Artifact> inputSet =
-          ((SkylarkNestedSet) inputs).getSetFromParam(Artifact.class, "inputs");
+      NestedSet<Artifact> inputSet = ((Depset) inputs).getSetFromParam(Artifact.class, "inputs");
       builder.addTransitiveInputs(inputSet);
       inputArtifacts = inputSet;
     }
@@ -536,7 +535,7 @@
       if (toolsUnchecked instanceof Sequence) {
         toolsIterable = ((Sequence<?>) toolsUnchecked).getContents(Object.class, "tools");
       } else {
-        toolsIterable = ((SkylarkNestedSet) toolsUnchecked).getSet();
+        toolsIterable = ((Depset) toolsUnchecked).getSet();
       }
       for (Object toolUnchecked : toolsIterable) {
         if (toolUnchecked instanceof Artifact) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCommandLine.java
index 30a5267..9872741 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkCommandLine.java
@@ -17,14 +17,14 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.skylarkbuildapi.SkylarkCommandLineApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** A Skylark module class to create memory efficient command lines. */
 public class SkylarkCommandLine implements SkylarkCommandLineApi {
 
   @Override
-  public String joinPaths(String separator, SkylarkNestedSet files) throws EvalException {
+  public String joinPaths(String separator, Depset files) throws EvalException {
     NestedSet<Artifact> artifacts = files.getSetFromParam(Artifact.class, "files");
     // TODO(bazel-team): This method should be deprecated and strongly discouraged, as it
     // flattens a depset during analysis.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
index c94ae01..1065f81 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleConfiguredTargetUtil.java
@@ -52,12 +52,12 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.syntax.BaseFunction;
 import com.google.devtools.build.lib.syntax.ClassObject;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalExceptionWithStackTrace;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
@@ -297,10 +297,10 @@
       }
       return nestedSetBuilder.build();
     } else {
-      SkylarkNestedSet artifactsSet =
+      Depset artifactsSet =
           SkylarkType.cast(
               objects,
-              SkylarkNestedSet.class,
+              Depset.class,
               Artifact.class,
               loc,
               typeErrorMessage,
@@ -308,7 +308,7 @@
               EvalUtils.getDataTypeName(objects, true));
       try {
         return artifactsSet.getSet(Artifact.class);
-      } catch (SkylarkNestedSet.TypeException exception) {
+      } catch (Depset.TypeException exception) {
         throw new EvalException(
             loc,
             String.format(
@@ -515,7 +515,7 @@
   private static void parseDefaultProviderFields(
       StructImpl provider, SkylarkRuleContext context, RuleConfiguredTargetBuilder builder)
       throws EvalException {
-    SkylarkNestedSet files = null;
+    Depset files = null;
     Runfiles statelessRunfiles = null;
     Runfiles dataRunfiles = null;
     Runfiles defaultRunfiles = null;
@@ -539,7 +539,7 @@
       // TODO(cparsons): Look into deprecating this option.
       for (String field : provider.getFieldNames()) {
         if (field.equals("files")) {
-          files = cast("files", provider, SkylarkNestedSet.class, Artifact.class, loc);
+          files = cast("files", provider, Depset.class, Artifact.class, loc);
         } else if (field.equals("runfiles")) {
           statelessRunfiles = cast("runfiles", provider, Runfiles.class, loc);
         } else if (field.equals("data_runfiles")) {
@@ -620,7 +620,7 @@
       RuleContext ruleContext,
       Location loc,
       Artifact executable,
-      @Nullable SkylarkNestedSet files,
+      @Nullable Depset files,
       Runfiles statelessRunfiles,
       Runfiles dataRunfiles,
       Runfiles defaultRunfiles)
@@ -638,7 +638,7 @@
       try {
         // If we specify files_to_build we don't have the executable in it by default.
         builder.setFilesToBuild(files.getSet(Artifact.class));
-      } catch (SkylarkNestedSet.TypeException exception) {
+      } catch (Depset.TypeException exception) {
         throw new EvalException(loc, "'files' field must be a depset of 'file'", exception);
       }
     }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java
index 9015544..f3b64a5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java
@@ -77,6 +77,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.syntax.ClassObject;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
@@ -84,7 +85,6 @@
 import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.syntax.Sequence;
 import com.google.devtools.build.lib.syntax.SkylarkIndexable;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
@@ -1009,7 +1009,7 @@
     }
     if (transitiveFiles != Starlark.NONE) {
       builder.addTransitiveArtifacts(
-          ((SkylarkNestedSet) transitiveFiles).getSetFromParam(Artifact.class, "transitive_files"));
+          ((Depset) transitiveFiles).getSetFromParam(Artifact.class, "transitive_files"));
     }
     if (!symlinks.isEmpty()) {
       // If Skylark code directly manipulates symlinks, activate more stringent validity checking.
@@ -1066,7 +1066,7 @@
     }
     List<Artifact> inputs = new ArrayList<>();
     // TODO(lberki): This flattens a NestedSet.
-    // However, we can't turn this into a SkylarkNestedSet because it's an incompatible change to
+    // However, we can't turn this into a Depset because it's an incompatible change to
     // Skylark.
     Iterables.addAll(inputs, helper.getResolvedTools());
 
@@ -1101,8 +1101,7 @@
             .addToolDependencies(tools.getContents(TransitiveInfoCollection.class, "tools"))
             .build();
     return Tuple.<Object>of(
-        SkylarkNestedSet.of(Artifact.class, helper.getResolvedTools()),
-        helper.getToolsRunfilesSuppliers());
+        Depset.of(Artifact.class, helper.getResolvedTools()), helper.getToolsRunfilesSuppliers());
   }
 
   public StarlarkSemantics getSkylarkSemantics() {
@@ -1111,8 +1110,8 @@
 
   /**
    * Ensures the given {@link Map} has keys that have {@link Label} type and values that have either
-   * {@link Iterable} or {@link SkylarkNestedSet} type, and raises {@link EvalException} otherwise.
-   * Returns a corresponding map where any sets are replaced by iterables.
+   * {@link Iterable} or {@link Depset} type, and raises {@link EvalException} otherwise. Returns a
+   * corresponding map where any sets are replaced by iterables.
    */
   // TODO(bazel-team): find a better way to typecheck this argument.
   private static Map<Label, Iterable<Artifact>> checkLabelDict(Map<?, ?> labelDict, Location loc)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailureInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailureInfo.java
index 7fd895f..db35cc8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailureInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/AnalysisFailureInfo.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.skylarkbuildapi.test.AnalysisFailureInfoApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 
 /**
@@ -67,8 +67,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<AnalysisFailure>*/ getCauses() {
-    return SkylarkNestedSet.of(SkylarkType.of(AnalysisFailure.class), causes);
+  public Depset /*<AnalysisFailure>*/ getCauses() {
+    return Depset.of(SkylarkType.of(AnalysisFailure.class), causes);
   }
 
   public NestedSet<AnalysisFailure> getCausesNestedSet() {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Type.java b/src/main/java/com/google/devtools/build/lib/packages/Type.java
index 92fd12f..7295fcf 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Type.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Type.java
@@ -23,11 +23,11 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet.NestedSetDepthException;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.util.LoggingUtil;
 import com.google.devtools.build.lib.util.StringCanonicalizer;
 import java.util.ArrayList;
@@ -585,9 +585,9 @@
 
       if (x instanceof Iterable) {
         iterable = (Iterable<?>) x;
-      } else if (x instanceof SkylarkNestedSet) {
+      } else if (x instanceof Depset) {
         try {
-          iterable = ((SkylarkNestedSet) x).toCollection();
+          iterable = ((Depset) x).toCollection();
         } catch (NestedSetDepthException exception) {
           throw new ConversionException(
               "depset exceeded maximum depth "
diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
index a8a0e10..660b225 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
@@ -32,8 +32,8 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
 import com.google.devtools.build.lib.syntax.ClassObject;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import javax.annotation.Nullable;
 
 /**
@@ -136,7 +136,7 @@
       // A shortcut for files to build in Skylark. FileConfiguredTarget and RuleConfiguredTarget
       // always has FileProvider and Error- and PackageGroupConfiguredTarget-s shouldn't be
       // accessible in Skylark.
-      return SkylarkNestedSet.of(Artifact.class, getProvider(FileProvider.class).getFilesToBuild());
+      return Depset.of(Artifact.class, getProvider(FileProvider.class).getFilesToBuild());
     }
     return actual.getValue(name);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
index 051cc78..7da4089 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidAssetsInfo.java
@@ -25,8 +25,8 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidAssetsInfoApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import java.util.Optional;
 import javax.annotation.Nullable;
 
@@ -110,8 +110,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<ParsedAndroidAssets>*/ getDirectParsedAssetsForStarlark() {
-    return SkylarkNestedSet.of(ParsedAndroidAssets.class, directParsedAssets);
+  public Depset /*<ParsedAndroidAssets>*/ getDirectParsedAssetsForStarlark() {
+    return Depset.of(ParsedAndroidAssets.class, directParsedAssets);
   }
 
   public NestedSet<ParsedAndroidAssets> getDirectParsedAssets() {
@@ -129,8 +129,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<ParsedAndroidAssets>*/ getTransitiveParsedAssetsForStarlark() {
-    return SkylarkNestedSet.of(ParsedAndroidAssets.class, transitiveParsedAssets);
+  public Depset /*<ParsedAndroidAssets>*/ getTransitiveParsedAssetsForStarlark() {
+    return Depset.of(ParsedAndroidAssets.class, transitiveParsedAssets);
   }
 
   public NestedSet<ParsedAndroidAssets> getTransitiveParsedAssets() {
@@ -138,8 +138,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getAssetsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveAssets);
+  public Depset /*<Artifact>*/ getAssetsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveAssets);
   }
 
   public NestedSet<Artifact> getAssets() {
@@ -147,8 +147,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getSymbolsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveSymbols);
+  public Depset /*<Artifact>*/ getSymbolsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveSymbols);
   }
 
   public NestedSet<Artifact> getSymbols() {
@@ -162,8 +162,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getCompiledSymbolsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveCompiledSymbols);
+  public Depset /*<Artifact>*/ getCompiledSymbolsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveCompiledSymbols);
   }
 
   NestedSet<Artifact> getCompiledSymbols() {
@@ -182,11 +182,11 @@
     public AndroidAssetsInfo createInfo(
         Label label,
         Object validationResult,
-        SkylarkNestedSet directParsedAssets,
-        SkylarkNestedSet transitiveParsedAssets,
-        SkylarkNestedSet transitiveAssets,
-        SkylarkNestedSet transitiveSymbols,
-        SkylarkNestedSet transitiveCompiledSymbols)
+        Depset directParsedAssets,
+        Depset transitiveParsedAssets,
+        Depset transitiveAssets,
+        Depset transitiveSymbols,
+        Depset transitiveCompiledSymbols)
         throws EvalException {
       return new AndroidAssetsInfo(
           label,
@@ -198,8 +198,8 @@
           nestedSet(transitiveCompiledSymbols, Artifact.class, "transitive_compiled_symbols"));
     }
 
-    private static <T> NestedSet<T> nestedSet(
-        SkylarkNestedSet from, Class<T> with, String fieldName) throws EvalException {
+    private static <T> NestedSet<T> nestedSet(Depset from, Class<T> with, String fieldName)
+        throws EvalException {
       return NestedSetBuilder.<T>naiveLinkOrder()
           .addTransitive(from.getSetFromParam(with, fieldName))
           .build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
index f766b0e..d27d910 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
@@ -27,10 +27,10 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidIdeInfoProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.Map;
@@ -301,10 +301,10 @@
   }
 
   @Override
-  public ImmutableMap<String, SkylarkNestedSet> getNativeLibsSkylark() {
-    ImmutableMap.Builder<String, SkylarkNestedSet> builder = ImmutableMap.builder();
+  public ImmutableMap<String, Depset> getNativeLibsSkylark() {
+    ImmutableMap.Builder<String, Depset> builder = ImmutableMap.builder();
     for (Map.Entry<String, NestedSet<Artifact>> entry : getNativeLibs().entrySet()) {
-      builder.put(entry.getKey(), SkylarkNestedSet.of(Artifact.class, entry.getValue()));
+      builder.put(entry.getKey(), Depset.of(Artifact.class, entry.getValue()));
     }
     return builder.build();
   }
@@ -332,13 +332,13 @@
         Object signedApk,
         Object aar,
         Sequence<?> apksUnderTest, // <Artifact>
-        Dict<?, ?> nativeLibs) // <String, SkylarkNestedSet>
+        Dict<?, ?> nativeLibs) // <String, Depset>
         throws EvalException {
-      Map<String, SkylarkNestedSet> nativeLibsMap =
-          nativeLibs.getContents(String.class, SkylarkNestedSet.class, "native_libs");
+      Map<String, Depset> nativeLibsMap =
+          nativeLibs.getContents(String.class, Depset.class, "native_libs");
 
       ImmutableMap.Builder<String, NestedSet<Artifact>> builder = ImmutableMap.builder();
-      for (Map.Entry<String, SkylarkNestedSet> entry : nativeLibsMap.entrySet()) {
+      for (Map.Entry<String, Depset> entry : nativeLibsMap.entrySet()) {
         builder.put(
             entry.getKey(), entry.getValue().getSetFromParam(Artifact.class, "native_libs"));
       }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java
index a40b6ea..2643143 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdlProvider.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidIdlProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 
 /**
@@ -52,8 +52,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ getTransitiveIdlImportRootsForStarlark() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, transitiveIdlImportRoots);
+  public Depset /*<String>*/ getTransitiveIdlImportRootsForStarlark() {
+    return Depset.of(SkylarkType.STRING, transitiveIdlImportRoots);
   }
 
   NestedSet<String> getTransitiveIdlImportRoots() {
@@ -61,8 +61,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveIdlImportsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveIdlImports);
+  public Depset /*<Artifact>*/ getTransitiveIdlImportsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveIdlImports);
   }
 
   NestedSet<Artifact> getTransitiveIdlImports() {
@@ -70,8 +70,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveIdlJarsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveIdlJars);
+  public Depset /*<Artifact>*/ getTransitiveIdlJarsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveIdlJars);
   }
 
   NestedSet<Artifact> getTransitiveIdlJars() {
@@ -79,8 +79,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveIdlPreprocessedForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveIdlPreprocessed);
+  public Depset /*<Artifact>*/ getTransitiveIdlPreprocessedForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveIdlPreprocessed);
   }
 
   NestedSet<Artifact> getTransitiveIdlPreprocessed() {
@@ -97,10 +97,10 @@
 
     @Override
     public AndroidIdlProvider createInfo(
-        SkylarkNestedSet transitiveIdlImportRoots,
-        SkylarkNestedSet transitiveIdlImports,
-        SkylarkNestedSet transitiveIdlJars,
-        SkylarkNestedSet transitiveIdlPreprocessed)
+        Depset transitiveIdlImportRoots,
+        Depset transitiveIdlImports,
+        Depset transitiveIdlJars,
+        Depset transitiveIdlPreprocessed)
         throws EvalException {
       return new AndroidIdlProvider(
           NestedSetBuilder.<String>stableOrder()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
index 2617fc5..7c09c51 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
@@ -25,7 +25,7 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.packages.NativeProvider;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidLibraryAarInfoApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import java.util.Objects;
 import javax.annotation.Nullable;
 
@@ -80,8 +80,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveAarArtifactsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveAarArtifacts);
+  public Depset /*<Artifact>*/ getTransitiveAarArtifactsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveAarArtifacts);
   }
 
   public NestedSet<Artifact> getTransitiveAarArtifacts() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java
index 38074bc..d796834 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryResourceClassJarProvider.java
@@ -21,8 +21,8 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidLibraryResourceClassJarProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * A provider which contains the resource class jars from android_library rules. See {@link
@@ -52,8 +52,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getResourceClassJarsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, resourceClassJars);
+  public Depset /*<Artifact>*/ getResourceClassJarsForStarlark() {
+    return Depset.of(Artifact.TYPE, resourceClassJars);
   }
 
   public NestedSet<Artifact> getResourceClassJars() {
@@ -73,8 +73,7 @@
     }
 
     @Override
-    public AndroidLibraryResourceClassJarProvider create(SkylarkNestedSet jars)
-        throws EvalException {
+    public AndroidLibraryResourceClassJarProvider create(Depset jars) throws EvalException {
       return new AndroidLibraryResourceClassJarProvider(
           NestedSetBuilder.<Artifact>stableOrder()
               .addTransitive(jars.getSetFromParam(Artifact.class, "jars"))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java
index eb9247c..091f39c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java
@@ -19,8 +19,8 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidNativeLibsInfoApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * Provider of transitively available ZIPs of native libs that should be directly copied into the
@@ -43,8 +43,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getNativeLibsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, nativeLibs);
+  public Depset /*<Artifact>*/ getNativeLibsForStarlark() {
+    return Depset.of(Artifact.TYPE, nativeLibs);
   }
 
   NestedSet<Artifact> getNativeLibs() {
@@ -60,8 +60,7 @@
     }
 
     @Override
-    public AndroidNativeLibsInfo createInfo(SkylarkNestedSet nativeLibs)
-        throws EvalException {
+    public AndroidNativeLibsInfo createInfo(Depset nativeLibs) throws EvalException {
       return new AndroidNativeLibsInfo(nativeLibs.getSetFromParam(Artifact.class, "native_libs"));
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
index d931d07..fb51f1c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
@@ -23,8 +23,8 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidResourcesInfoApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** A provider that supplies ResourceContainers from its transitive closure. */
 @Immutable
@@ -111,9 +111,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<ValidatedAndroidResources>*/
-      getTransitiveAndroidResourcesForStarlark() {
-    return SkylarkNestedSet.of(ValidatedAndroidResources.class, transitiveAndroidResources);
+  public Depset /*<ValidatedAndroidResources>*/ getTransitiveAndroidResourcesForStarlark() {
+    return Depset.of(ValidatedAndroidResources.class, transitiveAndroidResources);
   }
 
   public NestedSet<ValidatedAndroidResources> getTransitiveAndroidResources() {
@@ -121,8 +120,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<ValidatedAndroidResources>*/ getDirectAndroidResourcesForStarlark() {
-    return SkylarkNestedSet.of(ValidatedAndroidResources.class, directAndroidResources);
+  public Depset /*<ValidatedAndroidResources>*/ getDirectAndroidResourcesForStarlark() {
+    return Depset.of(ValidatedAndroidResources.class, directAndroidResources);
   }
 
   public NestedSet<ValidatedAndroidResources> getDirectAndroidResources() {
@@ -130,8 +129,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveResourcesForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveResources);
+  public Depset /*<Artifact>*/ getTransitiveResourcesForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveResources);
   }
 
   public NestedSet<Artifact> getTransitiveResources() {
@@ -139,8 +138,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveManifestsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveManifests);
+  public Depset /*<Artifact>*/ getTransitiveManifestsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveManifests);
   }
 
   public NestedSet<Artifact> getTransitiveManifests() {
@@ -148,8 +147,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveAapt2RTxtForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveAapt2RTxt);
+  public Depset /*<Artifact>*/ getTransitiveAapt2RTxtForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveAapt2RTxt);
   }
 
   public NestedSet<Artifact> getTransitiveAapt2RTxt() {
@@ -157,8 +156,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveAapt2ValidationArtifactsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveAapt2ValidationArtifacts);
+  public Depset /*<Artifact>*/ getTransitiveAapt2ValidationArtifactsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveAapt2ValidationArtifacts);
   }
 
   NestedSet<Artifact> getTransitiveAapt2ValidationArtifacts() {
@@ -166,8 +165,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveSymbolsBinForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveSymbolsBin);
+  public Depset /*<Artifact>*/ getTransitiveSymbolsBinForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveSymbolsBin);
   }
 
   public NestedSet<Artifact> getTransitiveSymbolsBin() {
@@ -175,8 +174,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveCompiledSymbolsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveCompiledSymbols);
+  public Depset /*<Artifact>*/ getTransitiveCompiledSymbolsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveCompiledSymbols);
   }
 
   NestedSet<Artifact> getTransitiveCompiledSymbols() {
@@ -184,8 +183,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveStaticLibForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveStaticLib);
+  public Depset /*<Artifact>*/ getTransitiveStaticLibForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveStaticLib);
   }
 
   NestedSet<Artifact> getTransitiveStaticLib() {
@@ -193,8 +192,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveRTxtForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveRTxt);
+  public Depset /*<Artifact>*/ getTransitiveRTxtForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveRTxt);
   }
 
   NestedSet<Artifact> getTransitiveRTxt() {
@@ -215,15 +214,15 @@
         Label label,
         AndroidManifestInfo manifest,
         Artifact rTxt,
-        SkylarkNestedSet transitiveAndroidResources,
-        SkylarkNestedSet directAndroidResources,
-        SkylarkNestedSet transitiveResources,
-        SkylarkNestedSet transitiveManifests,
-        SkylarkNestedSet transitiveAapt2RTxt,
-        SkylarkNestedSet transitiveSymbolsBin,
-        SkylarkNestedSet transitiveCompiledSymbols,
-        SkylarkNestedSet transitiveStaticLib,
-        SkylarkNestedSet transitiveRTxt,
+        Depset transitiveAndroidResources,
+        Depset directAndroidResources,
+        Depset transitiveResources,
+        Depset transitiveManifests,
+        Depset transitiveAapt2RTxt,
+        Depset transitiveSymbolsBin,
+        Depset transitiveCompiledSymbols,
+        Depset transitiveStaticLib,
+        Depset transitiveRTxt,
         Object transitiveAapt2ValidationArtifacts)
         throws EvalException {
       return new AndroidResourcesInfo(
@@ -246,8 +245,8 @@
           nestedSet(transitiveRTxt, Artifact.class, "transitive_r_txt"));
     }
 
-    private static <T> NestedSet<T> nestedSet(
-        SkylarkNestedSet from, Class<T> with, String fieldName) throws EvalException {
+    private static <T> NestedSet<T> nestedSet(Depset from, Class<T> with, String fieldName)
+        throws EvalException {
       return NestedSetBuilder.<T>stableOrder()
           .addTransitive(from.getSetFromParam(with, fieldName))
           .build();
@@ -256,11 +255,10 @@
     private static <T> NestedSet<T> nestedSet(Object from, Class<T> with, String fieldName)
         throws EvalException {
       Preconditions.checkArgument(
-          from instanceof SkylarkNestedSet
-              || from == com.google.devtools.build.lib.syntax.Starlark.UNBOUND);
+          from instanceof Depset || from == com.google.devtools.build.lib.syntax.Starlark.UNBOUND);
 
-      if (from instanceof SkylarkNestedSet) {
-        return nestedSet((SkylarkNestedSet) from, with, fieldName);
+      if (from instanceof Depset) {
+        return nestedSet((Depset) from, with, fieldName);
       }
       return NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
index bc2ae90..bfe2e78 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
@@ -26,7 +26,7 @@
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidSkylarkApiProviderApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import java.util.function.Function;
 import javax.annotation.Nullable;
 
@@ -72,7 +72,7 @@
   }
 
   @Override
-  public ImmutableMap<String, SkylarkNestedSet> getNativeLibs() {
+  public ImmutableMap<String, Depset> getNativeLibs() {
     return getIdeInfoProvider().getNativeLibsSkylark();
   }
 
@@ -97,8 +97,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getResources() {
-    return SkylarkNestedSet.of(
+  public Depset /*<Artifact>*/ getResources() {
+    return Depset.of(
         Artifact.TYPE, collectDirectArtifacts(ValidatedAndroidResources::getResources));
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
index 6e0bcbe..8b782e5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/databinding/DataBindingV2Provider.java
@@ -22,9 +22,9 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skylarkbuildapi.android.DataBindingV2ProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import javax.annotation.Nullable;
 
 /**
@@ -76,8 +76,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveBRFilesForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveBRFiles);
+  public Depset /*<Artifact>*/ getTransitiveBRFilesForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveBRFiles);
   }
 
   public NestedSet<Artifact> getTransitiveBRFiles() {
@@ -91,9 +91,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<LabelJavaPackagePair>*/
-      getTransitiveLabelAndJavaPackagesForStarlark() {
-    return SkylarkNestedSet.of(LabelJavaPackagePair.class, transitiveLabelAndJavaPackages);
+  public Depset /*<LabelJavaPackagePair>*/ getTransitiveLabelAndJavaPackagesForStarlark() {
+    return Depset.of(LabelJavaPackagePair.class, transitiveLabelAndJavaPackages);
   }
 
   public NestedSet<LabelJavaPackagePair> getTransitiveLabelAndJavaPackages() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
index a2adc7b..44f8995 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
@@ -38,7 +38,7 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcCompilationContextApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
@@ -138,25 +138,24 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkDefines() {
-    return SkylarkNestedSet.of(
-        String.class, NestedSetBuilder.wrap(Order.STABLE_ORDER, getDefines()));
+  public Depset getSkylarkDefines() {
+    return Depset.of(String.class, NestedSetBuilder.wrap(Order.STABLE_ORDER, getDefines()));
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkNonTransitiveDefines() {
-    return SkylarkNestedSet.of(
+  public Depset getSkylarkNonTransitiveDefines() {
+    return Depset.of(
         String.class, NestedSetBuilder.wrap(Order.STABLE_ORDER, getNonTransitiveDefines()));
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkHeaders() {
-    return SkylarkNestedSet.of(Artifact.class, getDeclaredIncludeSrcs());
+  public Depset getSkylarkHeaders() {
+    return Depset.of(Artifact.class, getDeclaredIncludeSrcs());
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkSystemIncludeDirs() {
-    return SkylarkNestedSet.of(
+  public Depset getSkylarkSystemIncludeDirs() {
+    return Depset.of(
         String.class,
         NestedSetBuilder.wrap(
             Order.STABLE_ORDER,
@@ -166,8 +165,8 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkFrameworkIncludeDirs() {
-    return SkylarkNestedSet.of(
+  public Depset getSkylarkFrameworkIncludeDirs() {
+    return Depset.of(
         String.class,
         NestedSetBuilder.wrap(
             Order.STABLE_ORDER,
@@ -177,8 +176,8 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkIncludeDirs() {
-    return SkylarkNestedSet.of(
+  public Depset getSkylarkIncludeDirs() {
+    return Depset.of(
         String.class,
         NestedSetBuilder.wrap(
             Order.STABLE_ORDER,
@@ -188,8 +187,8 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkQuoteIncludeDirs() {
-    return SkylarkNestedSet.of(
+  public Depset getSkylarkQuoteIncludeDirs() {
+    return Depset.of(
         String.class,
         NestedSetBuilder.wrap(
             Order.STABLE_ORDER,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
index e2686ea..7bfb643 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
@@ -30,9 +30,9 @@
 import com.google.devtools.build.lib.packages.SymbolGenerator;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkingContextApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.LinkerInputApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.util.Fingerprint;
@@ -388,8 +388,8 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkLinkerInputs() {
-    return SkylarkNestedSet.of(LinkerInput.class, linkerInputs);
+  public Depset getSkylarkLinkerInputs() {
+    return Depset.of(LinkerInput.class, linkerInputs);
   }
 
   @Override
@@ -401,15 +401,15 @@
   public Object getSkylarkLibrariesToLink(StarlarkThread thread) {
     // TODO(plf): Flag can be removed already.
     if (thread.getSemantics().incompatibleDepsetForLibrariesToLinkGetter()) {
-      return SkylarkNestedSet.of(LibraryToLink.class, getLibraries());
+      return Depset.of(LibraryToLink.class, getLibraries());
     } else {
       return StarlarkList.immutableCopyOf(getLibraries().toList());
     }
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkNonCodeInputs() {
-    return SkylarkNestedSet.of(Artifact.class, getNonCodeInputs());
+  public Depset getSkylarkNonCodeInputs() {
+    return Depset.of(Artifact.class, getNonCodeInputs());
   }
 
   public NestedSet<LinkOptions> getUserLinkFlags() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 061d387..5beb8fa 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -57,12 +57,12 @@
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcModuleApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.NoneType;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
@@ -246,15 +246,13 @@
         /* variablesExtensions= */ ImmutableList.of(),
         /* additionalBuildVariables= */ ImmutableMap.of(),
         /* directModuleMaps= */ ImmutableList.of(),
-        SkylarkNestedSet.getSetFromNoneableParam(
-            includeDirs, String.class, "framework_include_directories"),
-        SkylarkNestedSet.getSetFromNoneableParam(
-            quoteIncludeDirs, String.class, "quote_include_directories"),
-        SkylarkNestedSet.getSetFromNoneableParam(
+        Depset.getSetFromNoneableParam(includeDirs, String.class, "framework_include_directories"),
+        Depset.getSetFromNoneableParam(quoteIncludeDirs, String.class, "quote_include_directories"),
+        Depset.getSetFromNoneableParam(
             systemIncludeDirs, String.class, "system_include_directories"),
-        SkylarkNestedSet.getSetFromNoneableParam(
+        Depset.getSetFromNoneableParam(
             frameworkIncludeDirs, String.class, "framework_include_directories"),
-        SkylarkNestedSet.getSetFromNoneableParam(defines, String.class, "preprocessor_defines"),
+        Depset.getSetFromNoneableParam(defines, String.class, "preprocessor_defines"),
         NestedSetBuilder.emptySet(Order.STABLE_ORDER));
   }
 
@@ -297,10 +295,10 @@
         /* ltoOutputRootPrefix= */ null,
         convertFromNoneable(defFile, /* defaultValue= */ null),
         /* fdoContext= */ null,
-        SkylarkNestedSet.getSetFromNoneableParam(
+        Depset.getSetFromNoneableParam(
             runtimeLibrarySearchDirectories, String.class, "runtime_library_search_directories"),
         /* librariesToLink= */ null,
-        SkylarkNestedSet.getSetFromNoneableParam(
+        Depset.getSetFromNoneableParam(
             librarySearchDirectories, String.class, "library_search_directories"),
         /* addIfsoRelatedVariables= */ false);
   }
@@ -325,10 +323,9 @@
     return (T) obj; // totally unsafe
   }
 
-  /** Converts an object that can be ether SkylarkNestedSet or None into NestedSet. */
-  protected NestedSet<String> asStringNestedSet(Object o) throws SkylarkNestedSet.TypeException {
-    SkylarkNestedSet skylarkNestedSet =
-        convertFromNoneable(o, /* defaultValue= */ (SkylarkNestedSet) null);
+  /** Converts an object that can be ether Depset or None into NestedSet. */
+  protected NestedSet<String> asStringNestedSet(Object o) throws Depset.TypeException {
+    Depset skylarkNestedSet = convertFromNoneable(o, /* defaultValue= */ (Depset) null);
     if (skylarkNestedSet != null) {
       return skylarkNestedSet.getSet(String.class);
     } else {
@@ -556,7 +553,7 @@
     if (obj == Starlark.UNBOUND) {
       return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
     } else {
-      return SkylarkNestedSet.getSetFromNoneableParam(obj, Artifact.class, fieldName);
+      return Depset.getSetFromNoneableParam(obj, Artifact.class, fieldName);
     }
   }
 
@@ -565,7 +562,7 @@
     if (obj == Starlark.UNBOUND) {
       return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
     } else {
-      return SkylarkNestedSet.getSetFromNoneableParam(obj, String.class, fieldName);
+      return Depset.getSetFromNoneableParam(obj, String.class, fieldName);
     }
   }
 
@@ -581,21 +578,18 @@
 
     LinkOptions options =
         LinkOptions.of(
-            SkylarkNestedSet.getSetFromNoneableParam(
-                    userLinkFlagsObject, String.class, "user_link_flags")
+            Depset.getSetFromNoneableParam(userLinkFlagsObject, String.class, "user_link_flags")
                 .toList(),
             BazelStarlarkContext.from(thread).getSymbolGenerator());
 
     return CcLinkingContext.LinkerInput.builder()
         .setOwner(owner)
         .addLibraries(
-            SkylarkNestedSet.getSetFromNoneableParam(
-                    librariesToLinkObject, LibraryToLink.class, "libraries")
+            Depset.getSetFromNoneableParam(librariesToLinkObject, LibraryToLink.class, "libraries")
                 .toList())
         .addUserLinkFlags(ImmutableList.of(options))
         .addNonCodeInputs(
-            SkylarkNestedSet.getSetFromNoneableParam(
-                    nonCodeInputs, Artifact.class, "additional_inputs")
+            Depset.getSetFromNoneableParam(nonCodeInputs, Artifact.class, "additional_inputs")
                 .toList())
         .build();
   }
@@ -642,7 +636,7 @@
     } else {
       CcLinkingContext.Builder ccLinkingContextBuilder = CcLinkingContext.builder();
       ccLinkingContextBuilder.addTransitiveLinkerInputs(
-          SkylarkNestedSet.getSetFromNoneableParam(
+          Depset.getSetFromNoneableParam(
               linkerInputs, CcLinkingContext.LinkerInput.class, "linker_inputs"));
 
       @SuppressWarnings("unchecked")
@@ -669,13 +663,12 @@
     return ccToolchain.getLegacyCcFlagsMakeVariable();
   }
 
-  /** Converts an object that can be the either SkylarkNestedSet or None into NestedSet. */
+  /** Converts an object that can be the either Depset or None into NestedSet. */
   @SuppressWarnings("unchecked")
-  protected Object skylarkListToSkylarkNestedSet(Object o) throws EvalException {
+  protected Object skylarkListToDepset(Object o) throws EvalException {
     if (o instanceof Sequence) {
       Sequence<String> list = (Sequence<String>) o;
-      SkylarkNestedSet.Builder builder =
-          SkylarkNestedSet.builder(Order.STABLE_ORDER, Location.BUILTIN);
+      Depset.Builder builder = Depset.builder(Order.STABLE_ORDER, Location.BUILTIN);
       for (Object entry : list) {
         builder.addDirect(entry);
       }
@@ -684,15 +677,15 @@
     return o;
   }
 
-  /** Converts None, or a Sequence, or a SkylarkNestedSet to a NestedSet. */
+  /** Converts None, or a Sequence, or a Depset to a NestedSet. */
   @SuppressWarnings("unchecked")
   private static <T> NestedSet<T> convertToNestedSet(Object o, Class<T> type, String fieldName)
       throws EvalException {
     if (o == Starlark.NONE) {
       return NestedSetBuilder.emptySet(Order.COMPILE_ORDER);
     }
-    return o instanceof SkylarkNestedSet
-        ? ((SkylarkNestedSet) o).getSetFromParam(type, fieldName)
+    return o instanceof Depset
+        ? ((Depset) o).getSetFromParam(type, fieldName)
         : NestedSetBuilder.wrap(Order.COMPILE_ORDER, (Sequence<T>) o);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
index 81969e4..133bf9c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java
@@ -23,7 +23,7 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcSkylarkApiProviderApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.vfs.PathFragment;
 
 /**
@@ -43,8 +43,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveHeadersForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, getTransitiveHeaders());
+  public Depset /*<Artifact>*/ getTransitiveHeadersForStarlark() {
+    return Depset.of(Artifact.TYPE, getTransitiveHeaders());
   }
 
   NestedSet<Artifact> getTransitiveHeaders() {
@@ -54,8 +54,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getLibrariesForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, getLibraries());
+  public Depset /*<Artifact>*/ getLibrariesForStarlark() {
+    return Depset.of(Artifact.TYPE, getLibraries());
   }
 
   NestedSet<Artifact> getLibraries() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index c8ec462..78dbfa8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -35,8 +35,8 @@
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import javax.annotation.Nullable;
 
@@ -428,22 +428,22 @@
   }
 
   @Override
-  public SkylarkNestedSet getAllFilesForStarlark() {
-    return SkylarkNestedSet.of(Artifact.class, getAllFiles());
+  public Depset getAllFilesForStarlark() {
+    return Depset.of(Artifact.class, getAllFiles());
   }
 
   @Override
-  public SkylarkNestedSet getStaticRuntimeLibForStarlark(
+  public Depset getStaticRuntimeLibForStarlark(
       FeatureConfigurationForStarlark featureConfigurationForStarlark) throws EvalException {
-    return SkylarkNestedSet.of(
+    return Depset.of(
         (Artifact.class),
         getStaticRuntimeLinkInputs(featureConfigurationForStarlark.getFeatureConfiguration()));
   }
 
   @Override
-  public SkylarkNestedSet getDynamicRuntimeLibForStarlark(
+  public Depset getDynamicRuntimeLibForStarlark(
       FeatureConfigurationForStarlark featureConfigurationForStarlark) throws EvalException {
-    return SkylarkNestedSet.of(
+    return Depset.of(
         (Artifact.class),
         getDynamicRuntimeLinkInputs(featureConfigurationForStarlark.getFeatureConfiguration()));
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
index 358c9e6..9bdb02f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
@@ -36,9 +36,9 @@
 import com.google.devtools.build.lib.skylarkbuildapi.go.GoContextInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.go.GoPackageInfoApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Tuple;
 
 /**
@@ -68,8 +68,7 @@
     }
 
     @Override
-    public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes(
-        SkylarkRuleContextApi skylarkRuleContext) {
+    public Depset skylarkCollectTransitiveSwigIncludes(SkylarkRuleContextApi skylarkRuleContext) {
       return null;
     }
 
@@ -94,7 +93,7 @@
 
     @Override
     public WrapCcIncludeProviderApi getWrapCcIncludeProvider(
-        SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet swigIncludes)
+        SkylarkRuleContextApi skylarkRuleContext, Depset swigIncludes)
         throws EvalException, InterruptedException {
       return null;
     }
@@ -105,7 +104,7 @@
         CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain,
         FeatureConfigurationApi featureConfiguration,
         CcCompilationContextApi wrapperCcCompilationContext,
-        SkylarkNestedSet swigIncludes,
+        Depset swigIncludes,
         FileApi swigSource,
         Sequence<?> subParameters, // <String>
         FileApi ccFile,
@@ -113,7 +112,7 @@
         Sequence<?> outputFiles, // <FileApi>
         Object outDir,
         Object javaDir,
-        SkylarkNestedSet auxiliaryInputs,
+        Depset auxiliaryInputs,
         String swigAttributeName,
         Object zipTool)
         throws EvalException, InterruptedException {}
@@ -140,14 +139,14 @@
     }
 
     @Override
-    public SkylarkNestedSet getTransitivePythonSources(
+    public Depset getTransitivePythonSources(
         SkylarkRuleContextApi skylarkRuleContext, FileApi pyFile) {
       return null;
     }
 
     @Override
     public RunfilesApi getPythonRunfiles(
-        SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet filesToBuild) {
+        SkylarkRuleContextApi skylarkRuleContext, Depset filesToBuild) {
       return null;
     }
 
@@ -238,7 +237,7 @@
     }
 
     @Override
-    public SkylarkNestedSet /*<FileApi>*/ getGopackageFilesForStarlark(
+    public Depset /*<FileApi>*/ getGopackageFilesForStarlark(
         SkylarkRuleContextApi skylarkRuleContext, FileApi skylarkGopkg) {
       return null;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationInfoProvider.java
index ee23f24..4b27c84 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationInfoProvider.java
@@ -21,7 +21,7 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaCompilationInfoProviderApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import javax.annotation.Nullable;
 
 /**
@@ -76,16 +76,14 @@
 
   @Override
   @Nullable
-  public SkylarkNestedSet /*<Artifact>*/ getRuntimeClasspath() {
-    return runtimeClasspath == null ? null : SkylarkNestedSet.of(Artifact.TYPE, runtimeClasspath);
+  public Depset /*<Artifact>*/ getRuntimeClasspath() {
+    return runtimeClasspath == null ? null : Depset.of(Artifact.TYPE, runtimeClasspath);
   }
 
   @Override
   @Nullable
-  public SkylarkNestedSet /*<Artifact>*/ getCompilationClasspath() {
-    return compilationClasspath == null
-        ? null
-        : SkylarkNestedSet.of(Artifact.TYPE, compilationClasspath);
+  public Depset /*<Artifact>*/ getCompilationClasspath() {
+    return compilationClasspath == null ? null : Depset.of(Artifact.TYPE, compilationClasspath);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java
index fc69382..2f91d4b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java
@@ -22,7 +22,7 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaAnnotationProcessingApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import javax.annotation.Nullable;
 
 /** The collection of gen jars from the transitive closure. */
@@ -106,8 +106,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveGenClassJarsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveGenClassJars);
+  public Depset /*<Artifact>*/ getTransitiveGenClassJarsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveGenClassJars);
   }
 
   NestedSet<Artifact> getTransitiveGenClassJars() {
@@ -115,8 +115,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveGenSourceJarsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveGenSourceJars);
+  public Depset /*<Artifact>*/ getTransitiveGenSourceJarsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveGenSourceJars);
   }
 
   NestedSet<Artifact> getTransitiveGenSourceJars() {
@@ -124,8 +124,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getProcessorClasspathForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, processorClasspath);
+  public Depset /*<Artifact>*/ getProcessorClasspathForStarlark() {
+    return Depset.of(Artifact.TYPE, processorClasspath);
   }
 
   NestedSet<Artifact> getProcessorClasspath() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
index 136d27e..3b39a24 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
@@ -38,9 +38,9 @@
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaInfoApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkList;
@@ -261,31 +261,31 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveRuntimeJars() {
+  public Depset /*<Artifact>*/ getTransitiveRuntimeJars() {
     return getTransitiveRuntimeDeps();
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveCompileTimeJars() {
+  public Depset /*<Artifact>*/ getTransitiveCompileTimeJars() {
     return getTransitiveDeps();
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getCompileTimeJars() {
+  public Depset /*<Artifact>*/ getCompileTimeJars() {
     NestedSet<Artifact> compileTimeJars =
         getProviderAsNestedSet(
             JavaCompilationArgsProvider.class,
             JavaCompilationArgsProvider::getDirectCompileTimeJars);
-    return SkylarkNestedSet.of(Artifact.TYPE, compileTimeJars);
+    return Depset.of(Artifact.TYPE, compileTimeJars);
   }
 
   @Override
-  public SkylarkNestedSet getFullCompileTimeJars() {
+  public Depset getFullCompileTimeJars() {
     NestedSet<Artifact> fullCompileTimeJars =
         getProviderAsNestedSet(
             JavaCompilationArgsProvider.class,
             JavaCompilationArgsProvider::getDirectFullCompileTimeJars);
-    return SkylarkNestedSet.of(Artifact.TYPE, fullCompileTimeJars);
+    return Depset.of(Artifact.TYPE, fullCompileTimeJars);
   }
 
   @Override
@@ -322,8 +322,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveDeps() {
-    return SkylarkNestedSet.of(
+  public Depset /*<Artifact>*/ getTransitiveDeps() {
+    return Depset.of(
         Artifact.TYPE,
         getProviderAsNestedSet(
             JavaCompilationArgsProvider.class,
@@ -331,24 +331,24 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveRuntimeDeps() {
-    return SkylarkNestedSet.of(
+  public Depset /*<Artifact>*/ getTransitiveRuntimeDeps() {
+    return Depset.of(
         Artifact.TYPE,
         getProviderAsNestedSet(
             JavaCompilationArgsProvider.class, JavaCompilationArgsProvider::getRuntimeJars));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveSourceJars() {
-    return SkylarkNestedSet.of(
+  public Depset /*<Artifact>*/ getTransitiveSourceJars() {
+    return Depset.of(
         Artifact.TYPE,
         getProviderAsNestedSet(
             JavaSourceJarsProvider.class, JavaSourceJarsProvider::getTransitiveSourceJars));
   }
 
   @Override
-  public SkylarkNestedSet /*<Label>*/ getTransitiveExports() {
-    return SkylarkNestedSet.of(
+  public Depset /*<Label>*/ getTransitiveExports() {
+    return Depset.of(
         SkylarkType.of(Label.class),
         getProviderAsNestedSet(
             JavaExportsProvider.class, JavaExportsProvider::getTransitiveExports));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeClasspathProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeClasspathProvider.java
index a09f0d8..79d6f50 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeClasspathProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeClasspathProvider.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaRuntimeClasspathProviderApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /**
  * Provider for the runtime classpath contributions of a Java binary.
@@ -40,8 +40,8 @@
 
   /** Returns the artifacts included on the runtime classpath of this binary. */
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getRuntimeClasspath() {
-    return SkylarkNestedSet.of(Artifact.TYPE, runtimeClasspath);
+  public Depset /*<Artifact>*/ getRuntimeClasspath() {
+    return Depset.of(Artifact.TYPE, runtimeClasspath);
   }
 
   public NestedSet<Artifact> getRuntimeClasspathNestedSet() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
index da0caba..05e9589 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java
@@ -32,7 +32,7 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaRuntimeInfoApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import javax.annotation.Nullable;
 
@@ -160,8 +160,8 @@
   }
 
   @Override
-  public SkylarkNestedSet skylarkJavaBaseInputs() {
-    return SkylarkNestedSet.of(Artifact.class, javaBaseInputs());
+  public Depset skylarkJavaBaseInputs() {
+    return Depset.of(Artifact.class, javaBaseInputs());
   }
 
   // Not all of JavaRuntimeInfo is exposed to Skylark, which makes implementing deep equality
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
index 821d4bf..6ab82dc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
@@ -25,9 +25,9 @@
 import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaCommonApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaToolchainSkylarkApiProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
@@ -226,7 +226,7 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getCompileTimeJavaDependencyArtifacts(JavaInfo javaInfo) {
+  public Depset /*<Artifact>*/ getCompileTimeJavaDependencyArtifacts(JavaInfo javaInfo) {
     // No implementation in Bazel. This method not callable in Starlark except through
     // (discouraged) use of --experimental_google_legacy_api.
     return null;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
index 9e70876..a8b6a93 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
@@ -35,8 +35,8 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaToolchainSkylarkApiProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import java.util.Iterator;
 import javax.annotation.Nullable;
@@ -410,8 +410,8 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkBootclasspath() {
-    return SkylarkNestedSet.of(Artifact.class, getBootclasspath());
+  public Depset getSkylarkBootclasspath() {
+    return Depset.of(Artifact.class, getBootclasspath());
   }
 
   @Override
@@ -420,7 +420,7 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkTools() {
-    return SkylarkNestedSet.of(Artifact.class, getTools());
+  public Depset getSkylarkTools() {
+    return Depset.of(Artifact.class, getTools());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
index 572fa14..c8cecdd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skylarkbuildapi.java.ProguardSpecProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** A target that can provide proguard specifications to Android binaries. */
 @Immutable
@@ -39,8 +39,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveProguardSpecsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveProguardSpecs);
+  public Depset /*<Artifact>*/ getTransitiveProguardSpecsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveProguardSpecs);
   }
 
   public NestedSet<Artifact> getTransitiveProguardSpecs() {
@@ -67,7 +67,7 @@
     }
 
     @Override
-    public ProguardSpecProvider create(SkylarkNestedSet specs) throws EvalException {
+    public ProguardSpecProvider create(Depset specs) throws EvalException {
       return new ProguardSpecProvider(
           NestedSetBuilder.<Artifact>stableOrder()
               .addTransitive(specs.getSetFromParam(Artifact.class, "specs"))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
index 89c6823..8bf922e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/GeneratedExtensionRegistryProvider.java
@@ -24,8 +24,8 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.skylarkbuildapi.java.GeneratedExtensionRegistryProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * A {@link TransitiveInfoProvider} for {@link Artifact}s created and used to generate the proto
@@ -71,8 +71,8 @@
 
   /** @return the proto jars used to generate the registry. */
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getInputsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, inputs);
+  public Depset /*<Artifact>*/ getInputsForStarlark() {
+    return Depset.of(Artifact.TYPE, inputs);
   }
 
   public NestedSet<Artifact> getInputs() {
@@ -159,7 +159,7 @@
         boolean isLite,
         Artifact classJar,
         Artifact srcJar,
-        SkylarkNestedSet inputs)
+        Depset inputs)
         throws EvalException {
       return new GeneratedExtensionRegistryProvider(
           generatingRuleLabel,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkInfo.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkInfo.java
index 73aae1b..75662cd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkInfo.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.packages.NativeProvider;
 import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleDynamicFrameworkInfoApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 import javax.annotation.Nullable;
 
@@ -77,13 +77,13 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ getDynamicFrameworkDirs() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, dynamicFrameworkDirs);
+  public Depset /*<String>*/ getDynamicFrameworkDirs() {
+    return Depset.of(SkylarkType.STRING, dynamicFrameworkDirs);
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getDynamicFrameworkFiles() {
-    return SkylarkNestedSet.of(SkylarkType.of(Artifact.class), dynamicFrameworkFiles);
+  public Depset /*<Artifact>*/ getDynamicFrameworkFiles() {
+    return Depset.of(SkylarkType.of(Artifact.class), dynamicFrameworkFiles);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
index 11817f5..d0ca811 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
@@ -43,10 +43,10 @@
 import com.google.devtools.build.lib.skylarkbuildapi.SplitTransitionProviderApi;
 import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleCommonApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import java.util.Map;
@@ -204,11 +204,9 @@
       Object dynamicFrameworkFiles)
       throws EvalException {
     NestedSet<String> frameworkDirs =
-        SkylarkNestedSet.getSetFromNoneableParam(
-            dynamicFrameworkDirs, String.class, "framework_dirs");
+        Depset.getSetFromNoneableParam(dynamicFrameworkDirs, String.class, "framework_dirs");
     NestedSet<Artifact> frameworkFiles =
-        SkylarkNestedSet.getSetFromNoneableParam(
-            dynamicFrameworkFiles, Artifact.class, "framework_files");
+        Depset.getSetFromNoneableParam(dynamicFrameworkFiles, Artifact.class, "framework_files");
     Artifact binary = (dylibBinary != Starlark.NONE) ? (Artifact) dylibBinary : null;
 
     return new AppleDynamicFrameworkInfo(
@@ -262,7 +260,7 @@
     // of plain NestedSets because the Skylark caller may want to return this directly from their
     // implementation function.
     Map<String, SkylarkValue> outputGroups =
-        Maps.transformValues(output.getOutputGroups(), v -> SkylarkNestedSet.of(Artifact.class, v));
+        Maps.transformValues(output.getOutputGroups(), v -> Depset.of(Artifact.class, v));
 
     ImmutableMap<String, Object> fields =
         ImmutableMap.of(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index b65b5dc..0f1f568 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -39,10 +39,10 @@
 import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
 import com.google.devtools.build.lib.rules.cpp.LibraryToLink;
 import com.google.devtools.build.lib.skylarkbuildapi.apple.ObjcProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
@@ -396,8 +396,8 @@
       ImmutableSet.<Key<?>>of(HEADER, MODULE_MAP, SOURCE);
 
   @Override
-  public SkylarkNestedSet /*<String>*/ defineForStarlark() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, define());
+  public Depset /*<String>*/ defineForStarlark() {
+    return Depset.of(SkylarkType.STRING, define());
   }
 
   public NestedSet<String> define() {
@@ -405,8 +405,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ dynamicFrameworkFileForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, dynamicFrameworkFile());
+  public Depset /*<Artifact>*/ dynamicFrameworkFileForStarlark() {
+    return Depset.of(Artifact.TYPE, dynamicFrameworkFile());
   }
 
   NestedSet<Artifact> dynamicFrameworkFile() {
@@ -414,23 +414,23 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ exportedDebugArtifacts() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(EXPORTED_DEBUG_ARTIFACTS));
+  public Depset /*<Artifact>*/ exportedDebugArtifacts() {
+    return Depset.of(Artifact.TYPE, get(EXPORTED_DEBUG_ARTIFACTS));
   }
 
   @Override
-  public SkylarkNestedSet frameworkSearchPathOnly() {
+  public Depset frameworkSearchPathOnly() {
     return ObjcProviderSkylarkConverters.convertPathFragmentsToSkylark(get(FRAMEWORK_SEARCH_PATHS));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ forceLoadLibrary() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(FORCE_LOAD_LIBRARY));
+  public Depset /*<Artifact>*/ forceLoadLibrary() {
+    return Depset.of(Artifact.TYPE, get(FORCE_LOAD_LIBRARY));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ headerForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, header());
+  public Depset /*<Artifact>*/ headerForStarlark() {
+    return Depset.of(Artifact.TYPE, header());
   }
 
   NestedSet<Artifact> header() {
@@ -443,68 +443,68 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ importedLibrary() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(IMPORTED_LIBRARY));
+  public Depset /*<Artifact>*/ importedLibrary() {
+    return Depset.of(Artifact.TYPE, get(IMPORTED_LIBRARY));
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ include() {
+  public Depset /*<String>*/ include() {
     return ObjcProviderSkylarkConverters.convertPathFragmentsToSkylark(get(INCLUDE));
   }
 
   @Override
-  public SkylarkNestedSet includeSystem() {
+  public Depset includeSystem() {
     return ObjcProviderSkylarkConverters.convertPathFragmentsToSkylark(get(INCLUDE_SYSTEM));
   }
 
   @Override
-  public SkylarkNestedSet iquote() {
+  public Depset iquote() {
     return ObjcProviderSkylarkConverters.convertPathFragmentsToSkylark(get(IQUOTE));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ j2objcLibrary() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(J2OBJC_LIBRARY));
+  public Depset /*<Artifact>*/ j2objcLibrary() {
+    return Depset.of(Artifact.TYPE, get(J2OBJC_LIBRARY));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ jreLibrary() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(JRE_LIBRARY));
+  public Depset /*<Artifact>*/ jreLibrary() {
+    return Depset.of(Artifact.TYPE, get(JRE_LIBRARY));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ library() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(LIBRARY));
+  public Depset /*<Artifact>*/ library() {
+    return Depset.of(Artifact.TYPE, get(LIBRARY));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ linkInputs() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(LINK_INPUTS));
+  public Depset /*<Artifact>*/ linkInputs() {
+    return Depset.of(Artifact.TYPE, get(LINK_INPUTS));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ linkedBinary() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(LINKED_BINARY));
+  public Depset /*<Artifact>*/ linkedBinary() {
+    return Depset.of(Artifact.TYPE, get(LINKED_BINARY));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ linkmapFile() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(LINKMAP_FILE));
+  public Depset /*<Artifact>*/ linkmapFile() {
+    return Depset.of(Artifact.TYPE, get(LINKMAP_FILE));
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ linkopt() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, get(LINKOPT));
+  public Depset /*<String>*/ linkopt() {
+    return Depset.of(SkylarkType.STRING, get(LINKOPT));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ mergeZip() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(MERGE_ZIP));
+  public Depset /*<Artifact>*/ mergeZip() {
+    return Depset.of(Artifact.TYPE, get(MERGE_ZIP));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ moduleMap() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(MODULE_MAP));
+  public Depset /*<Artifact>*/ moduleMap() {
+    return Depset.of(Artifact.TYPE, get(MODULE_MAP));
   }
 
   @Override
@@ -513,34 +513,34 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ multiArchDynamicLibraries() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(MULTI_ARCH_DYNAMIC_LIBRARIES));
+  public Depset /*<Artifact>*/ multiArchDynamicLibraries() {
+    return Depset.of(Artifact.TYPE, get(MULTI_ARCH_DYNAMIC_LIBRARIES));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ multiArchLinkedArchives() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(MULTI_ARCH_LINKED_ARCHIVES));
+  public Depset /*<Artifact>*/ multiArchLinkedArchives() {
+    return Depset.of(Artifact.TYPE, get(MULTI_ARCH_LINKED_ARCHIVES));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ multiArchLinkedBinaries() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(MULTI_ARCH_LINKED_BINARIES));
+  public Depset /*<Artifact>*/ multiArchLinkedBinaries() {
+    return Depset.of(Artifact.TYPE, get(MULTI_ARCH_LINKED_BINARIES));
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ sdkDylib() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, get(SDK_DYLIB));
+  public Depset /*<String>*/ sdkDylib() {
+    return Depset.of(SkylarkType.STRING, get(SDK_DYLIB));
   }
 
   @Override
-  public SkylarkNestedSet sdkFramework() {
-    return (SkylarkNestedSet) ObjcProviderSkylarkConverters.convertToSkylark(SDK_FRAMEWORK,
-        get(SDK_FRAMEWORK));
+  public Depset sdkFramework() {
+    return (Depset)
+        ObjcProviderSkylarkConverters.convertToSkylark(SDK_FRAMEWORK, get(SDK_FRAMEWORK));
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ sourceForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, source());
+  public Depset /*<Artifact>*/ sourceForStarlark() {
+    return Depset.of(Artifact.TYPE, source());
   }
 
   NestedSet<Artifact> source() {
@@ -553,8 +553,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ staticFrameworkFileForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, staticFrameworkFile());
+  public Depset /*<Artifact>*/ staticFrameworkFileForStarlark() {
+    return Depset.of(Artifact.TYPE, staticFrameworkFile());
   }
 
   NestedSet<Artifact> staticFrameworkFile() {
@@ -562,14 +562,14 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ umbrellaHeader() {
-    return SkylarkNestedSet.of(Artifact.TYPE, get(UMBRELLA_HEADER));
+  public Depset /*<Artifact>*/ umbrellaHeader() {
+    return Depset.of(Artifact.TYPE, get(UMBRELLA_HEADER));
   }
 
   @Override
-  public SkylarkNestedSet weakSdkFramework() {
-    return (SkylarkNestedSet) ObjcProviderSkylarkConverters.convertToSkylark(WEAK_SDK_FRAMEWORK,
-        get(WEAK_SDK_FRAMEWORK));
+  public Depset weakSdkFramework() {
+    return (Depset)
+        ObjcProviderSkylarkConverters.convertToSkylark(WEAK_SDK_FRAMEWORK, get(WEAK_SDK_FRAMEWORK));
   }
 
   /**
@@ -958,8 +958,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ dynamicFrameworkNamesForStarlark() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, dynamicFrameworkNames());
+  public Depset /*<String>*/ dynamicFrameworkNamesForStarlark() {
+    return Depset.of(SkylarkType.STRING, dynamicFrameworkNames());
   }
 
   NestedSet<String> dynamicFrameworkNames() {
@@ -967,8 +967,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ dynamicFrameworkPathsForStarlark() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, dynamicFrameworkPaths());
+  public Depset /*<String>*/ dynamicFrameworkPathsForStarlark() {
+    return Depset.of(SkylarkType.STRING, dynamicFrameworkPaths());
   }
 
   NestedSet<String> dynamicFrameworkPaths() {
@@ -976,8 +976,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ staticFrameworkNamesForStarlark() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, staticFrameworkNames());
+  public Depset /*<String>*/ staticFrameworkNamesForStarlark() {
+    return Depset.of(SkylarkType.STRING, staticFrameworkNames());
   }
 
   NestedSet<String> staticFrameworkNames() {
@@ -985,8 +985,8 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ staticFrameworkPathsForStarlark() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, staticFrameworkPaths());
+  public Depset /*<String>*/ staticFrameworkPathsForStarlark() {
+    return Depset.of(SkylarkType.STRING, staticFrameworkPaths());
   }
 
   NestedSet<String> staticFrameworkPaths() {
@@ -1146,7 +1146,7 @@
 
     /**
      * Add elements in toAdd with the given key from skylark. An error is thrown if toAdd is not an
-     * appropriate SkylarkNestedSet.
+     * appropriate Depset.
      */
     void addElementsFromSkylark(Key<?> key, Object skylarkToAdd) throws EvalException {
       NestedSet<?> toAdd = ObjcProviderSkylarkConverters.convertToJava(key, skylarkToAdd);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java
index 28df790..e1aa79e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java
@@ -22,9 +22,9 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 import com.google.devtools.build.lib.vfs.PathFragment;
 
@@ -58,16 +58,13 @@
     return CONVERTERS.get(javaKey.getType()).valueForJava(javaKey, skylarkValue);
   }
 
-  /**
-   * Converts {@link PathFragment}s into a skylark-compatible nested set of path strings.
-   */
-  public static SkylarkNestedSet convertPathFragmentsToSkylark(
-      Iterable<PathFragment> pathFragments) {
+  /** Converts {@link PathFragment}s into a skylark-compatible nested set of path strings. */
+  public static Depset convertPathFragmentsToSkylark(Iterable<PathFragment> pathFragments) {
     NestedSetBuilder<String> result = NestedSetBuilder.stableOrder();
     for (PathFragment path : pathFragments) {
       result.add(path.getSafePathString());
     }
-    return SkylarkNestedSet.of(String.class, result.build());
+    return Depset.of(String.class, result.build());
   }
 
   /** A converter for ObjcProvider values. */
@@ -87,7 +84,7 @@
     @Override
     public Object valueForSkylark(Key<?> javaKey, NestedSet<?> javaValue) {
       SkylarkType type = SkylarkType.of(javaKey.getType());
-      return SkylarkNestedSet.of(type, javaValue);
+      return Depset.of(type, javaValue);
     }
 
     @Override
@@ -131,7 +128,7 @@
       for (SdkFramework framework : (Iterable<SdkFramework>) javaValue) {
         result.add(framework.getName());
       }
-      return SkylarkNestedSet.of(String.class, result.build());
+      return Depset.of(String.class, result.build());
     }
 
     @Override
@@ -149,11 +146,11 @@
   /** Throws an error if the given object is not a nested set of the given type. */
   private static <T> NestedSet<T> nestedSetWithType(
       Object toCheck, Class<T> expectedSetType, String keyName) throws EvalException {
-    if (toCheck instanceof SkylarkNestedSet) {
-      SkylarkNestedSet sns = (SkylarkNestedSet) toCheck;
+    if (toCheck instanceof Depset) {
+      Depset sns = (Depset) toCheck;
       try {
         return sns.getSet(expectedSetType);
-      } catch (SkylarkNestedSet.TypeException exception) {
+      } catch (Depset.TypeException exception) {
         throw new EvalException(
             null,
             String.format(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/README.md b/src/main/java/com/google/devtools/build/lib/rules/objc/README.md
index 1a3fc54..64ea951 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/README.md
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/README.md
@@ -56,7 +56,7 @@
 keys.
 
 ```
-    libraries = objc_provider.library  # A SkylarkNestedSet of Artifacts
+    libraries = objc_provider.library  # A Depset of Artifacts
 ```
 
 A skylark rule that is intended to be a dependency of native objc rules should
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java
index 3fb6b57..f9a9280 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoInfo.java
@@ -24,7 +24,7 @@
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skylarkbuildapi.ProtoInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.proto.ProtoBootstrap;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 import com.google.devtools.build.lib.util.Pair;
 import javax.annotation.Nullable;
@@ -124,8 +124,8 @@
 
   /** The proto sources in the transitive closure of this rule. */
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveProtoSourcesForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, getTransitiveProtoSources());
+  public Depset /*<Artifact>*/ getTransitiveProtoSourcesForStarlark() {
+    return Depset.of(Artifact.TYPE, getTransitiveProtoSources());
   }
 
   public NestedSet<Artifact> getTransitiveProtoSources() {
@@ -137,8 +137,8 @@
    * {@code protoc} in the specified order, via the {@code --proto_path} flag.
    */
   @Override
-  public SkylarkNestedSet /*<String>*/ getTransitiveProtoSourceRootsForStarlark() {
-    return SkylarkNestedSet.of(SkylarkType.STRING, transitiveProtoSourceRoots);
+  public Depset /*<String>*/ getTransitiveProtoSourceRootsForStarlark() {
+    return Depset.of(SkylarkType.STRING, transitiveProtoSourceRoots);
   }
 
   public NestedSet<String> getTransitiveProtoSourceRoots() {
@@ -147,7 +147,7 @@
 
   @Deprecated
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveImports() {
+  public Depset /*<Artifact>*/ getTransitiveImports() {
     return getTransitiveProtoSourcesForStarlark();
   }
 
@@ -159,8 +159,8 @@
    * direct dependencies, but not from transitive ones)
    */
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getStrictImportableProtoSourcesForDependentsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, strictImportableProtoSourcesForDependents);
+  public Depset /*<Artifact>*/ getStrictImportableProtoSourcesForDependentsForStarlark() {
+    return Depset.of(Artifact.TYPE, strictImportableProtoSourcesForDependents);
   }
 
   public NestedSet<Artifact> getStrictImportableProtoSourcesForDependents() {
@@ -231,8 +231,8 @@
    * direct-srcs descriptor set)
    */
   @Override
-  public SkylarkNestedSet /*<Artifact>*/ getTransitiveDescriptorSetsForStarlark() {
-    return SkylarkNestedSet.of(Artifact.TYPE, transitiveDescriptorSets);
+  public Depset /*<Artifact>*/ getTransitiveDescriptorSetsForStarlark() {
+    return Depset.of(Artifact.TYPE, transitiveDescriptorSets);
   }
 
   public NestedSet<Artifact> getTransitiveDescriptorSets() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
index 7f641ce..d275f2b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyInfo.java
@@ -23,10 +23,10 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.skylarkbuildapi.python.PyInfoApi;
+import com.google.devtools.build.lib.syntax.Depset;
+import com.google.devtools.build.lib.syntax.Depset.TypeException;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet.TypeException;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 import com.google.devtools.build.lib.syntax.Starlark;
 import java.util.Objects;
@@ -44,7 +44,7 @@
    * order.
    */
   private static boolean depsetHasTypeAndCompatibleOrder(
-      SkylarkNestedSet depset, SkylarkType type, Order order) {
+      Depset depset, SkylarkType type, Order order) {
     // Work around #7266 by special-casing the empty set in the type check.
     boolean typeOk = depset.isEmpty() || depset.getContentType().equals(type);
     boolean orderOk = depset.getOrder().isCompatible(order);
@@ -58,26 +58,26 @@
    */
   private static String describeType(Object value) {
     String typeName = EvalUtils.getDataTypeName(value, /*fullDetails=*/ true);
-    if (value instanceof SkylarkNestedSet) {
-      return ((SkylarkNestedSet) value).getOrder().getSkylarkName() + "-ordered " + typeName;
+    if (value instanceof Depset) {
+      return ((Depset) value).getOrder().getSkylarkName() + "-ordered " + typeName;
     } else {
       return typeName;
     }
   }
 
   // Verified on initialization to contain Artifact.
-  private final SkylarkNestedSet transitiveSources;
+  private final Depset transitiveSources;
   private final boolean usesSharedLibraries;
   // Verified on initialization to contain String.
-  private final SkylarkNestedSet imports;
+  private final Depset imports;
   private final boolean hasPy2OnlySources;
   private final boolean hasPy3OnlySources;
 
   private PyInfo(
       @Nullable Location location,
-      SkylarkNestedSet transitiveSources,
+      Depset transitiveSources,
       boolean usesSharedLibraries,
-      SkylarkNestedSet imports,
+      Depset imports,
       boolean hasPy2OnlySources,
       boolean hasPy3OnlySources) {
     super(PROVIDER, location);
@@ -122,7 +122,7 @@
   }
 
   @Override
-  public SkylarkNestedSet getTransitiveSources() {
+  public Depset getTransitiveSources() {
     return transitiveSources;
   }
 
@@ -141,7 +141,7 @@
   }
 
   @Override
-  public SkylarkNestedSet getImports() {
+  public Depset getImports() {
     return imports;
   }
 
@@ -174,17 +174,17 @@
 
     @Override
     public PyInfo constructor(
-        SkylarkNestedSet transitiveSources,
+        Depset transitiveSources,
         boolean usesSharedLibraries,
         Object importsUncast,
         boolean hasPy2OnlySources,
         boolean hasPy3OnlySources,
         Location loc)
         throws EvalException {
-      SkylarkNestedSet imports =
+      Depset imports =
           importsUncast.equals(Starlark.UNBOUND)
-              ? SkylarkNestedSet.of(String.class, NestedSetBuilder.emptySet(Order.COMPILE_ORDER))
-              : (SkylarkNestedSet) importsUncast;
+              ? Depset.of(String.class, NestedSetBuilder.emptySet(Order.COMPILE_ORDER))
+              : (Depset) importsUncast;
 
       if (!depsetHasTypeAndCompatibleOrder(transitiveSources, Artifact.TYPE, Order.COMPILE_ORDER)) {
         throw new EvalException(
@@ -265,9 +265,9 @@
       Preconditions.checkNotNull(transitiveSources);
       return new PyInfo(
           location,
-          SkylarkNestedSet.of(Artifact.class, transitiveSources),
+          Depset.of(Artifact.class, transitiveSources),
           usesSharedLibraries,
-          SkylarkNestedSet.of(String.class, imports),
+          Depset.of(String.class, imports),
           hasPy2OnlySources,
           hasPy3OnlySources);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
index a07da75..29e33c5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyRuntimeInfo.java
@@ -25,9 +25,9 @@
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.skylarkbuildapi.python.PyRuntimeInfoApi;
+import com.google.devtools.build.lib.syntax.Depset;
+import com.google.devtools.build.lib.syntax.Depset.TypeException;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet.TypeException;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.Objects;
 import javax.annotation.Nullable;
@@ -53,7 +53,7 @@
   @Nullable private final PathFragment interpreterPath;
   @Nullable private final Artifact interpreter;
   // Validated on initalization to contain Artifact
-  @Nullable private final SkylarkNestedSet files;
+  @Nullable private final Depset files;
   /** Invariant: either PY2 or PY3. */
   private final PythonVersion pythonVersion;
 
@@ -61,7 +61,7 @@
       @Nullable Location location,
       @Nullable PathFragment interpreterPath,
       @Nullable Artifact interpreter,
-      @Nullable SkylarkNestedSet files,
+      @Nullable Depset files,
       PythonVersion pythonVersion) {
     super(PROVIDER, location);
     Preconditions.checkArgument((interpreterPath == null) != (interpreter == null));
@@ -80,7 +80,7 @@
         /*location=*/ null,
         /*interpreterPath=*/ null,
         interpreter,
-        SkylarkNestedSet.of(Artifact.class, files),
+        Depset.of(Artifact.class, files),
         pythonVersion);
   }
 
@@ -153,7 +153,7 @@
 
   @Override
   @Nullable
-  public SkylarkNestedSet getFilesForStarlark() {
+  public Depset getFilesForStarlark() {
     return files;
   }
 
@@ -185,9 +185,9 @@
       String interpreterPath =
           interpreterPathUncast == NONE ? null : (String) interpreterPathUncast;
       Artifact interpreter = interpreterUncast == NONE ? null : (Artifact) interpreterUncast;
-      SkylarkNestedSet filesDepset = null;
+      Depset filesDepset = null;
       if (filesUncast != NONE) {
-        filesDepset = (SkylarkNestedSet) filesUncast;
+        filesDepset = (Depset) filesUncast;
         // Validate type of filesDepset.
         filesDepset.getSetFromParam(Artifact.class, "files");
       }
@@ -211,8 +211,7 @@
 
       if (isInBuildRuntime) {
         if (filesDepset == null) {
-          filesDepset =
-              SkylarkNestedSet.of(Artifact.class, NestedSetBuilder.emptySet(Order.STABLE_ORDER));
+          filesDepset = Depset.of(Artifact.class, NestedSetBuilder.emptySet(Order.STABLE_ORDER));
         }
         return new PyRuntimeInfo(
             loc, /*interpreterPath=*/ null, interpreter, filesDepset, parsedPythonVersion);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java
index deba1b0..59d6ef4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyStructUtils.java
@@ -22,9 +22,9 @@
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.packages.StructProvider;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.SkylarkType;
 
 /** Static helper class for creating and accessing instances of the legacy "py" struct provider. */
@@ -75,8 +75,7 @@
     // TRANSITIVE_SOURCES is mandatory
     builder.put(USES_SHARED_LIBRARIES, false);
     builder.put(
-        IMPORTS,
-        SkylarkNestedSet.of(String.class, NestedSetBuilder.<String>emptySet(Order.COMPILE_ORDER)));
+        IMPORTS, Depset.of(String.class, NestedSetBuilder.<String>emptySet(Order.COMPILE_ORDER)));
     builder.put(HAS_PY2_ONLY_SOURCES, false);
     builder.put(HAS_PY3_ONLY_SOURCES, false);
     DEFAULTS = builder.build();
@@ -101,10 +100,10 @@
    */
   public static NestedSet<Artifact> getTransitiveSources(StructImpl info) throws EvalException {
     Object fieldValue = getValue(info, TRANSITIVE_SOURCES);
-    SkylarkNestedSet castValue =
+    Depset castValue =
         SkylarkType.cast(
             fieldValue,
-            SkylarkNestedSet.class,
+            Depset.class,
             Artifact.class,
             null,
             "'%s' provider's '%s' field should be a depset of Files (got a '%s')",
@@ -122,7 +121,7 @@
                 unwrappedValue.getOrder().getSkylarkName()));
       }
       return unwrappedValue;
-    } catch (SkylarkNestedSet.TypeException exception) {
+    } catch (Depset.TypeException exception) {
       throw new EvalException(
           null,
           String.format(
@@ -156,10 +155,10 @@
    */
   public static NestedSet<String> getImports(StructImpl info) throws EvalException {
     Object fieldValue = getValue(info, IMPORTS);
-    SkylarkNestedSet castValue =
+    Depset castValue =
         SkylarkType.cast(
             fieldValue,
-            SkylarkNestedSet.class,
+            Depset.class,
             String.class,
             null,
             "'%s' provider's '%s' field should be a depset of strings (got a '%s')",
@@ -168,7 +167,7 @@
             EvalUtils.getDataTypeNameFromClass(fieldValue.getClass()));
     try {
       return castValue.getSet(String.class);
-    } catch (SkylarkNestedSet.TypeException exception) {
+    } catch (Depset.TypeException exception) {
       throw new EvalException(
           null,
           String.format(
@@ -218,9 +217,9 @@
 
   /** Builder for a legacy py provider struct. */
   public static class Builder {
-    SkylarkNestedSet transitiveSources = null;
+    Depset transitiveSources = null;
     Boolean usesSharedLibraries = null;
-    SkylarkNestedSet imports = null;
+    Depset imports = null;
     Boolean hasPy2OnlySources = null;
     Boolean hasPy3OnlySources = null;
 
@@ -228,7 +227,7 @@
     private Builder() {}
 
     public Builder setTransitiveSources(NestedSet<Artifact> transitiveSources) {
-      this.transitiveSources = SkylarkNestedSet.of(Artifact.class, transitiveSources);
+      this.transitiveSources = Depset.of(Artifact.class, transitiveSources);
       return this;
     }
 
@@ -238,7 +237,7 @@
     }
 
     public Builder setImports(NestedSet<String> imports) {
-      this.imports = SkylarkNestedSet.of(String.class, imports);
+      this.imports = Depset.of(String.class, imports);
       return this;
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ActionApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ActionApi.java
index 5377e83..6fd22c3 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ActionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ActionApi.java
@@ -18,10 +18,10 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
 import java.io.IOException;
 
@@ -50,16 +50,16 @@
   public abstract String getMnemonic();
 
   @SkylarkCallable(
-    name = "inputs",
-    doc = "A set of the input files of this action.",
-    structField = true)
-  public SkylarkNestedSet getSkylarkInputs();
+      name = "inputs",
+      doc = "A set of the input files of this action.",
+      structField = true)
+  public Depset getSkylarkInputs();
 
   @SkylarkCallable(
-    name = "outputs",
-    doc = "A set of the output files of this action.",
-    structField = true)
-  public SkylarkNestedSet getSkylarkOutputs();
+      name = "outputs",
+      doc = "A set of the output files of this action.",
+      structField = true)
+  public Depset getSkylarkOutputs();
 
   @SkylarkCallable(
       name = "argv",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/CommandLineArgsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/CommandLineArgsApi.java
index d0fff70..18f3a29 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/CommandLineArgsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/CommandLineArgsApi.java
@@ -22,9 +22,9 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.syntax.BaseFunction;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Command line args module. */
 @SkylarkModule(
@@ -248,7 +248,7 @@
             name = "values",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             defaultValue = "unbound",
             doc = "The list, tuple, or depset whose items will be appended."),
@@ -398,7 +398,7 @@
             name = "values",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             defaultValue = "unbound",
             doc = "The list, tuple, or depset whose items will be joined."),
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/DefaultInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/DefaultInfoApi.java
index b4a3c25..1521e65 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/DefaultInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/DefaultInfoApi.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** A provider that gives general information about a target's direct and transitive files. */
 @SkylarkModule(
@@ -43,14 +43,14 @@
 
   @SkylarkCallable(
       name = "files",
-      doc =  "A <a href='depset.html'><code>depset</code></a> of "
-          + "<a href='File.html'><code>File</code></a> objects representing the default "
-          + "outputs to build when this target is specified on the blaze command line. By "
-          + "default it is all predeclared outputs.",
+      doc =
+          "A <a href='depset.html'><code>depset</code></a> of "
+              + "<a href='File.html'><code>File</code></a> objects representing the default "
+              + "outputs to build when this target is specified on the blaze command line. By "
+              + "default it is all predeclared outputs.",
       structField = true,
-      allowReturnNones = true
-  )
-  SkylarkNestedSet getFiles();
+      allowReturnNones = true)
+  Depset getFiles();
 
   @SkylarkCallable(
       name = "files_to_run",
@@ -88,70 +88,70 @@
       FileT extends FileApi> extends ProviderApi {
 
     @SkylarkCallable(
-      name = "DefaultInfo",
-      doc = "<p>The <code>DefaultInfo</code> constructor.",
-      parameters = {
-        @Param(
-          name = "files",
-          type = SkylarkNestedSet.class,
-          named = true,
-          positional = false,
-          defaultValue = "None",
-          noneable = true,
-          doc = "A <a href='depset.html'><code>depset</code></a> of "
-              + "<a href='File.html'><code>File</code></a> objects representing the default "
-              + "outputs to build when this target is specified on the blaze command line. By "
-              + "default it is all predeclared outputs."
-        ),
-        @Param(
-            name = "runfiles",
-            type = RunfilesApi.class,
-            named = true,
-            positional = false,
-            defaultValue = "None",
-            noneable = true,
-            doc = "set of files acting as both the "
-                + "<code>data_runfiles</code> and <code>default_runfiles</code>."
-        ),
-        @Param(
-            name = "data_runfiles",
-            type = RunfilesApi.class,
-            named = true,
-            positional = false,
-            defaultValue = "None",
-            noneable = true,
-            doc = "the files that are added to the runfiles of a "
-                + "target that depend on the rule via the <code>data</code> attribute."
-        ),
-        @Param(
-            name = "default_runfiles",
-            type = RunfilesApi.class,
-            named = true,
-            positional = false,
-            defaultValue = "None",
-            noneable = true,
-            doc = "the files that are added to the runfiles of "
-                + "a target that depend on the rule via anything but the <code>data</code> "
-                + "attribute."
-        ),
-        @Param(
-          name = "executable",
-          type = FileApi.class,
-          named = true,
-          positional = false,
-          defaultValue = "None",
-          noneable = true,
-          doc = "If this rule is marked "
-              + "<a href='globals.html#rule.executable'><code>executable</code></a> or "
-              + "<a href='globals.html#rule.test'><code>test</code></a>, this is a "
-              + "<a href='File.html'><code>File</code></a> object representing the file that "
-              + "should be executed to run the target. By default it is the predeclared output "
-              + "<code>ctx.outputs.executable</code>."
-        )},
-      useLocation = true,
-      selfCall = true)
-    @SkylarkConstructor(objectType = DefaultInfoApi.class,
-        receiverNameForDoc = "DefaultInfo")
+        name = "DefaultInfo",
+        doc = "<p>The <code>DefaultInfo</code> constructor.",
+        parameters = {
+          @Param(
+              name = "files",
+              type = Depset.class,
+              named = true,
+              positional = false,
+              defaultValue = "None",
+              noneable = true,
+              doc =
+                  "A <a href='depset.html'><code>depset</code></a> of <a"
+                      + " href='File.html'><code>File</code></a> objects representing the default"
+                      + " outputs to build when this target is specified on the blaze command"
+                      + " line. By default it is all predeclared outputs."),
+          @Param(
+              name = "runfiles",
+              type = RunfilesApi.class,
+              named = true,
+              positional = false,
+              defaultValue = "None",
+              noneable = true,
+              doc =
+                  "set of files acting as both the "
+                      + "<code>data_runfiles</code> and <code>default_runfiles</code>."),
+          @Param(
+              name = "data_runfiles",
+              type = RunfilesApi.class,
+              named = true,
+              positional = false,
+              defaultValue = "None",
+              noneable = true,
+              doc =
+                  "the files that are added to the runfiles of a "
+                      + "target that depend on the rule via the <code>data</code> attribute."),
+          @Param(
+              name = "default_runfiles",
+              type = RunfilesApi.class,
+              named = true,
+              positional = false,
+              defaultValue = "None",
+              noneable = true,
+              doc =
+                  "the files that are added to the runfiles of "
+                      + "a target that depend on the rule via anything but the <code>data</code> "
+                      + "attribute."),
+          @Param(
+              name = "executable",
+              type = FileApi.class,
+              named = true,
+              positional = false,
+              defaultValue = "None",
+              noneable = true,
+              doc =
+                  "If this rule is marked <a"
+                      + " href='globals.html#rule.executable'><code>executable</code></a> or <a"
+                      + " href='globals.html#rule.test'><code>test</code></a>, this is a <a"
+                      + " href='File.html'><code>File</code></a> object representing the file that"
+                      + " should be executed to run the target. By default it is the predeclared"
+                      + " output <code>ctx.outputs.executable</code>.")
+        },
+        useLocation = true,
+        selfCall = true)
+    @SkylarkConstructor(objectType = DefaultInfoApi.class, receiverNameForDoc = "DefaultInfo")
     public DefaultInfoApi constructor(
         // TODO(cparsons): Use stricter types when Runfiles.NONE is passed as null.
         Object files,
@@ -159,6 +159,7 @@
         Object dataRunfiles,
         Object defaultRunfiles,
         Object executable,
-        Location loc) throws EvalException;
+        Location loc)
+        throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileProviderApi.java
index e4c2700..03a7b55 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileProviderApi.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /** A representation of the concept "this builds these files". */
 @SkylarkModule(
@@ -43,5 +43,5 @@
    * implicit targets, for example, deploy jars.
    */
   @SkylarkCallable(name = "files_to_build", documented = false, structField = true)
-  SkylarkNestedSet /*<? extends FileApi>*/ getFilesToBuildForStarlark();
+  Depset /*<? extends FileApi>*/ getFilesToBuildForStarlark();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ProtoInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ProtoInfoApi.java
index 3e61b2a..77b98f2 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ProtoInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/ProtoInfoApi.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /** Info object propagating information about protocol buffer sources. */
 @SkylarkModule(
@@ -43,7 +43,7 @@
       name = "transitive_imports",
       doc = "Transitive imports including weak dependencies.",
       structField = true)
-  public SkylarkNestedSet /*<FileT>*/ getTransitiveImports();
+  public Depset /*<FileT>*/ getTransitiveImports();
 
   @SkylarkCallable(
       name = "transitive_sources",
@@ -52,7 +52,7 @@
   // TODO(bazel-team): The difference between transitive imports and transitive proto sources
   // should never be used by Skylark or by an Aspect. One of these two should be removed,
   // preferably soon, before Skylark users start depending on them.
-  public SkylarkNestedSet /*<FileT>*/ getTransitiveProtoSourcesForStarlark();
+  public Depset /*<FileT>*/ getTransitiveProtoSourcesForStarlark();
 
   @SkylarkCallable(
       name = "direct_sources",
@@ -67,7 +67,7 @@
               + "that has no sources, it contains the check_deps_sources "
               + "from this library's direct deps.",
       structField = true)
-  public SkylarkNestedSet /*<FileT>*/ getStrictImportableProtoSourcesForDependentsForStarlark();
+  public Depset /*<FileT>*/ getStrictImportableProtoSourcesForDependentsForStarlark();
 
   @SkylarkCallable(
       name = "direct_descriptor_set",
@@ -87,13 +87,13 @@
               + " as passing --include_imports to proto-compiler. Will be empty if no"
               + " dependencies.",
       structField = true)
-  public SkylarkNestedSet /*<FileT>*/ getTransitiveDescriptorSetsForStarlark();
+  public Depset /*<FileT>*/ getTransitiveDescriptorSetsForStarlark();
 
   @SkylarkCallable(
       name = "transitive_proto_path",
       doc = "A set of proto source roots collected from the transitive closure of this rule.",
       structField = true)
-  public SkylarkNestedSet /*<String>*/ getTransitiveProtoSourceRootsForStarlark();
+  public Depset /*<String>*/ getTransitiveProtoSourceRootsForStarlark();
 
   @SkylarkCallable(
       name = "proto_source_root",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/RunfilesApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/RunfilesApi.java
index c41e2b0..b058d95 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/RunfilesApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/RunfilesApi.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /** An interface for a set of runfiles. */
 @SkylarkModule(
@@ -36,22 +36,22 @@
       name = "files",
       doc = "Returns the set of runfiles as files.",
       structField = true)
-  public SkylarkNestedSet /*<? extends FileApi>*/ getArtifactsForStarlark();
+  public Depset /*<? extends FileApi>*/ getArtifactsForStarlark();
 
   @SkylarkCallable(name = "symlinks", doc = "Returns the set of symlinks.", structField = true)
-  public SkylarkNestedSet /*<? extends SymlinkEntryApi>*/ getSymlinksForStarlark();
+  public Depset /*<? extends SymlinkEntryApi>*/ getSymlinksForStarlark();
 
   @SkylarkCallable(
       name = "root_symlinks",
       doc = "Returns the set of root symlinks.",
       structField = true)
-  public SkylarkNestedSet /*<? extends SymlinkEntryApi>*/ getRootSymlinksForStarlark();
+  public Depset /*<? extends SymlinkEntryApi>*/ getRootSymlinksForStarlark();
 
   @SkylarkCallable(
       name = "empty_filenames",
       doc = "Returns names of empty files to create.",
       structField = true)
-  public SkylarkNestedSet /*<String>*/ getEmptyFilenamesForStarlark();
+  public Depset /*<String>*/ getEmptyFilenamesForStarlark();
 
   @SkylarkCallable(
     name = "merge",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkActionFactoryApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkActionFactoryApi.java
index d1f3ee7..0994314 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkActionFactoryApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkActionFactoryApi.java
@@ -21,10 +21,10 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 
@@ -151,7 +151,7 @@
             name = "inputs",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             generic1 = FileApi.class,
             named = true,
@@ -228,7 +228,7 @@
             name = "inputs",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             generic1 = FileApi.class,
             defaultValue = "[]",
@@ -267,7 +267,7 @@
             name = "tools",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             defaultValue = "unbound",
             named = true,
@@ -382,7 +382,7 @@
             name = "inputs",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             generic1 = FileApi.class,
             defaultValue = "[]",
@@ -393,7 +393,7 @@
             name = "tools",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             generic1 = FileApi.class,
             defaultValue = "unbound",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkCommandLineApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkCommandLineApi.java
index 2d14e41..d86654e 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkCommandLineApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkCommandLineApi.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.skylarkinterface.StarlarkDeprecated;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Interface for a module associated with creating efficient command lines. */
 @SkylarkModule(
@@ -41,9 +41,9 @@
         @Param(name = "separator", type = String.class, doc = "the separator string to join on."),
         @Param(
             name = "files",
-            type = SkylarkNestedSet.class,
+            type = Depset.class,
             generic1 = FileApi.class,
             doc = "the files to concatenate.")
       })
-  public String joinPaths(String separator, SkylarkNestedSet files) throws EvalException;
+  public String joinPaths(String separator, Depset files) throws EvalException;
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java
index 4ad79f8..4ec398b 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java
@@ -24,12 +24,12 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.syntax.ClassObject;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.NoneType;
 import com.google.devtools.build.lib.syntax.Sequence;
 import com.google.devtools.build.lib.syntax.SkylarkIndexable;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.syntax.Tuple;
@@ -562,7 +562,7 @@
             name = "inputs",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             generic1 = FileApi.class,
             defaultValue = "[]",
@@ -586,7 +586,7 @@
             name = "tools",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             generic1 = FileApi.class,
             defaultValue = "unbound",
@@ -778,7 +778,7 @@
             name = "inputs",
             allowedTypes = {
               @ParamType(type = Sequence.class),
-              @ParamType(type = SkylarkNestedSet.class),
+              @ParamType(type = Depset.class),
             },
             generic1 = FileApi.class,
             named = true,
@@ -853,7 +853,7 @@
         // Also, allow empty set for init
         @Param(
             name = "transitive_files",
-            type = SkylarkNestedSet.class,
+            type = Depset.class,
             generic1 = FileApi.class,
             noneable = true,
             defaultValue = "None",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TransitiveInfoCollectionApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TransitiveInfoCollectionApi.java
index 967c4f1..7f5adfd 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TransitiveInfoCollectionApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/TransitiveInfoCollectionApi.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
 
 /** Interface for a build target. */
@@ -43,11 +43,11 @@
 public interface TransitiveInfoCollectionApi extends SkylarkValue {
 
   @SkylarkCallable(
-    name = "output_group",
-    documented = false, //  TODO(dslomov): document.
-    parameters = {
-      @Param(name = "group_name", type = String.class, doc = "Output group name", named = true)
-    },
-    disableWithFlag = FlagIdentifier.INCOMPATIBLE_NO_TARGET_OUTPUT_GROUP)
-  SkylarkNestedSet outputGroup(String group);
+      name = "output_group",
+      documented = false, //  TODO(dslomov): document.
+      parameters = {
+        @Param(name = "group_name", type = String.class, doc = "Output group name", named = true)
+      },
+      disableWithFlag = FlagIdentifier.INCOMPATIBLE_NO_TARGET_OUTPUT_GROUP)
+  Depset outputGroup(String group);
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java
index a32a1d1..0bebd64 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidAssetsInfoApi.java
@@ -23,8 +23,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import javax.annotation.Nullable;
 
 /** Provides information about transitive Android assets. */
@@ -61,7 +61,7 @@
   FileApi getValidationResult();
 
   @SkylarkCallable(name = "direct_parsed_assets", structField = true, doc = "", documented = false)
-  SkylarkNestedSet /*<AssetsT>*/ getDirectParsedAssetsForStarlark();
+  Depset /*<AssetsT>*/ getDirectParsedAssetsForStarlark();
 
   /** Returns the local assets for the target. */
   @SkylarkCallable(
@@ -86,16 +86,16 @@
       structField = true,
       doc = "",
       documented = false)
-  SkylarkNestedSet /*<AssetsT>*/ getTransitiveParsedAssetsForStarlark();
+  Depset /*<AssetsT>*/ getTransitiveParsedAssetsForStarlark();
 
   @SkylarkCallable(name = "assets", structField = true, doc = "", documented = false)
-  SkylarkNestedSet /*<FileT>*/ getAssetsForStarlark();
+  Depset /*<FileT>*/ getAssetsForStarlark();
 
   @SkylarkCallable(name = "symbols", structField = true, doc = "", documented = false)
-  SkylarkNestedSet /*<FileT>*/ getSymbolsForStarlark();
+  Depset /*<FileT>*/ getSymbolsForStarlark();
 
   @SkylarkCallable(name = "compiled_symbols", structField = true, doc = "", documented = false)
-  SkylarkNestedSet /*<FileT>*/ getCompiledSymbolsForStarlark();
+  Depset /*<FileT>*/ getCompiledSymbolsForStarlark();
 
   /** The provider implementing this can construct the AndroidAssetsInfo provider. */
   @SkylarkModule(
@@ -130,35 +130,35 @@
               doc = "A depset of all the parsed assets in the target.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = ParsedAndroidAssetsApi.class),
           @Param(
               name = "transitive_parsed_assets",
               doc = "A depset of all the parsed assets in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = ParsedAndroidAssetsApi.class),
           @Param(
               name = "transitive_assets",
               doc = "A depset of all the assets in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_symbols",
               doc = "A depset of all the symbols in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_compiled_symbols",
               doc = "A depset of all the compiled symbols in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
         },
         selfCall = true)
@@ -166,11 +166,11 @@
     public AndroidAssetsInfoApi<FileT, AssetsT> createInfo(
         Label label,
         Object validationResult,
-        SkylarkNestedSet directParsedAssets,
-        SkylarkNestedSet transitiveParsedAssets,
-        SkylarkNestedSet transitiveAssets,
-        SkylarkNestedSet transitiveSymbols,
-        SkylarkNestedSet transitiveCompiledSymbols)
+        Depset directParsedAssets,
+        Depset transitiveParsedAssets,
+        Depset transitiveAssets,
+        Depset transitiveSymbols,
+        Depset transitiveCompiledSymbols)
         throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidIdeInfoProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidIdeInfoProviderApi.java
index 25513c0..3ab70c0 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidIdeInfoProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidIdeInfoProviderApi.java
@@ -23,10 +23,10 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import javax.annotation.Nullable;
 
 /**
@@ -169,7 +169,7 @@
 
   /** A map, keyed on architecture, of the native libs for the app, if any. */
   @SkylarkCallable(name = "native_libs", structField = true, doc = "", documented = false)
-  ImmutableMap<String, SkylarkNestedSet> getNativeLibsSkylark();
+  ImmutableMap<String, Depset> getNativeLibsSkylark();
 
   /** The provider implementing this can construct the AndroidIdeInfo provider. */
   @SkylarkModule(
@@ -310,7 +310,7 @@
         /*noneable*/ Object signedApk,
         /*noneable*/ Object aar,
         Sequence<?> apksUnderTest, // <FileT>
-        Dict<?, ?> nativeLibs /* <String, SkylarkNestedSet> */)
+        Dict<?, ?> nativeLibs /* <String, Depset> */)
         throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidIdlProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidIdlProviderApi.java
index f1ce426..1314496 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidIdlProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidIdlProviderApi.java
@@ -21,8 +21,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * Configured targets implementing this provider can contribute Android IDL information to the
@@ -47,7 +47,7 @@
       structField = true,
       doc = "Returns a depset of strings of all the idl import roots.",
       documented = false)
-  SkylarkNestedSet /*<String>*/ getTransitiveIdlImportRootsForStarlark();
+  Depset /*<String>*/ getTransitiveIdlImportRootsForStarlark();
 
   /** The IDL files in the transitive closure. */
   @SkylarkCallable(
@@ -55,7 +55,7 @@
       structField = true,
       doc = "Returns a depset of artifacts of all the idl imports.",
       documented = false)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveIdlImportsForStarlark();
+  Depset /*<FileT>*/ getTransitiveIdlImportsForStarlark();
 
   /** The IDL jars in the transitive closure, both class and source jars. */
   @SkylarkCallable(
@@ -63,7 +63,7 @@
       structField = true,
       doc = "Returns a depset of artifacts of all the idl class and source jars.",
       documented = false)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveIdlJarsForStarlark();
+  Depset /*<FileT>*/ getTransitiveIdlJarsForStarlark();
 
   /** The preprocessed IDL files in the transitive closure. */
   @SkylarkCallable(
@@ -71,7 +71,7 @@
       structField = true,
       doc = "Returns a depset of artifacts of all the idl preprocessed files.",
       documented = false)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveIdlPreprocessedForStarlark();
+  Depset /*<FileT>*/ getTransitiveIdlPreprocessedForStarlark();
 
   /** The provider implementing this can construct the AndroidIdlInfo provider. */
   @SkylarkModule(
@@ -92,14 +92,14 @@
               doc = "A depset of strings of all the idl import roots in the transitive closure.",
               positional = true,
               named = false,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = String.class),
           @Param(
               name = "transitive_idl_imports",
               doc = "A depset of artifacts of all the idl imports in the transitive closure.",
               positional = true,
               named = false,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_idl_jars",
@@ -108,7 +108,7 @@
                       + "transitive closure.",
               positional = true,
               named = false,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_idl_preprocessed",
@@ -117,16 +117,16 @@
                       + "closure.",
               positional = true,
               named = false,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
         },
         selfCall = true)
     @SkylarkConstructor(objectType = AndroidIdlProviderApi.class, receiverNameForDoc = NAME)
     AndroidIdlProviderApi<FileT> createInfo(
-        SkylarkNestedSet transitiveIdlImportRoots,
-        SkylarkNestedSet transitiveIdlImports,
-        SkylarkNestedSet transitiveIdlJars,
-        SkylarkNestedSet transitiveIdlPreprocessed)
+        Depset transitiveIdlImportRoots,
+        Depset transitiveIdlImports,
+        Depset transitiveIdlJars,
+        Depset transitiveIdlPreprocessed)
         throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryAarInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryAarInfoApi.java
index 229d9f1..6b6bfdb 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryAarInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryAarInfoApi.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /** A target that can provide the aar artifact of Android libraries */
 @SkylarkModule(
@@ -47,5 +47,5 @@
       doc = "",
       documented = false,
       structField = true)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveAarArtifactsForStarlark();
+  Depset /*<FileT>*/ getTransitiveAarArtifactsForStarlark();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java
index 5041f11..a59ca3f 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidLibraryResourceClassJarProviderApi.java
@@ -21,8 +21,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Provides resource class jars from android_library rules. */
 @SkylarkModule(
@@ -39,7 +39,7 @@
   String NAME = "AndroidLibraryResourceClassJarProvider";
 
   @SkylarkCallable(name = "jars", structField = true, doc = "", documented = false)
-  SkylarkNestedSet /*<FileT>*/ getResourceClassJarsForStarlark();
+  Depset /*<FileT>*/ getResourceClassJarsForStarlark();
 
   /** The provider implementing this can construct the AndroidLibraryResourceClassJarProvider. */
   @SkylarkModule(
@@ -60,14 +60,13 @@
               doc = "Resource class jars.",
               positional = true,
               named = false,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
         },
         selfCall = true)
     @SkylarkConstructor(
         objectType = AndroidLibraryResourceClassJarProviderApi.class,
         receiverNameForDoc = NAME)
-    AndroidLibraryResourceClassJarProviderApi<FileT> create(SkylarkNestedSet jars)
-        throws EvalException;
+    AndroidLibraryResourceClassJarProviderApi<FileT> create(Depset jars) throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidNativeLibsInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidNativeLibsInfoApi.java
index 4b1b7f7..0afc4e7 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidNativeLibsInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidNativeLibsInfoApi.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * Provider of transitively available ZIPs of native libs that should be directly copied into the
@@ -45,7 +45,7 @@
       doc = "Returns the native libraries produced by the rule.",
       documented = false,
       structField = true)
-  SkylarkNestedSet /*<FileT>*/ getNativeLibsForStarlark();
+  Depset /*<FileT>*/ getNativeLibsForStarlark();
 
   /** Provider for {@link AndroidNativeLibsInfoApi}. */
   @SkylarkModule(
@@ -63,13 +63,13 @@
         parameters = {
           @Param(
               name = "native_libs",
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class,
               named = true,
               doc = "The native libraries produced by the rule."),
         },
         selfCall = true)
     @SkylarkConstructor(objectType = AndroidNativeLibsInfoApi.class)
-    public AndroidNativeLibsInfoApi<?> createInfo(SkylarkNestedSet nativeLibs) throws EvalException;
+    public AndroidNativeLibsInfoApi<?> createInfo(Depset nativeLibs) throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidResourcesInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidResourcesInfoApi.java
index 2ac36ba..83df85b 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidResourcesInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidResourcesInfoApi.java
@@ -22,8 +22,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** A provider that supplies resource information from its transitive closure. */
 @SkylarkModule(
@@ -73,7 +73,7 @@
       doc = "Returns the transitive ResourceContainers for the label.",
       documented = false,
       structField = true)
-  SkylarkNestedSet /*<ValidatedAndroidDataT>*/ getTransitiveAndroidResourcesForStarlark();
+  Depset /*<ValidatedAndroidDataT>*/ getTransitiveAndroidResourcesForStarlark();
 
   /** Returns the immediate ResourceContainers for the label. */
   @SkylarkCallable(
@@ -81,44 +81,44 @@
       doc = "Returns the immediate ResourceContainers for the label.",
       documented = false,
       structField = true)
-  SkylarkNestedSet /*<ValidatedAndroidDataT>*/ getDirectAndroidResourcesForStarlark();
+  Depset /*<ValidatedAndroidDataT>*/ getDirectAndroidResourcesForStarlark();
 
   @SkylarkCallable(name = "transitive_resources", doc = "", documented = false, structField = true)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveResourcesForStarlark();
+  Depset /*<FileT>*/ getTransitiveResourcesForStarlark();
 
   @SkylarkCallable(name = "transitive_manifests", doc = "", documented = false, structField = true)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveManifestsForStarlark();
+  Depset /*<FileT>*/ getTransitiveManifestsForStarlark();
 
   @SkylarkCallable(
       name = "transitive_aapt2_r_txt",
       doc = "",
       documented = false,
       structField = true)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveAapt2RTxtForStarlark();
+  Depset /*<FileT>*/ getTransitiveAapt2RTxtForStarlark();
 
   // TODO(b/132383435): remove this
   @SkylarkCallable(name = "validation_artifacts", doc = "", documented = false, structField = true)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveAapt2ValidationArtifactsForStarlark();
+  Depset /*<FileT>*/ getTransitiveAapt2ValidationArtifactsForStarlark();
 
   @SkylarkCallable(
       name = "transitive_symbols_bin",
       doc = "",
       documented = false,
       structField = true)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveSymbolsBinForStarlark();
+  Depset /*<FileT>*/ getTransitiveSymbolsBinForStarlark();
 
   @SkylarkCallable(
       name = "transitive_compiled_symbols",
       doc = "",
       documented = false,
       structField = true)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveCompiledSymbolsForStarlark();
+  Depset /*<FileT>*/ getTransitiveCompiledSymbolsForStarlark();
 
   @SkylarkCallable(name = "transitive_static_lib", doc = "", documented = false, structField = true)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveStaticLibForStarlark();
+  Depset /*<FileT>*/ getTransitiveStaticLibForStarlark();
 
   @SkylarkCallable(name = "transitive_r_txt", doc = "", documented = false, structField = true)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveRTxtForStarlark();
+  Depset /*<FileT>*/ getTransitiveRTxtForStarlark();
 
   /** Provider for {@link AndroidResourcesInfoApi}. */
   @SkylarkModule(
@@ -157,42 +157,42 @@
                       + "closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = ValidatedAndroidDataApi.class),
           @Param(
               name = "direct_android_resources",
               doc = "A depset of ValidatedAndroidData of Android Resources for the target.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = ValidatedAndroidDataApi.class),
           @Param(
               name = "transitive_resources",
               doc = "A depset of Artifacts of Android Resource files in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_manifests",
               doc = "A depset of Artifacts of Android Manifests in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_aapt2_r_txt",
               doc = "A depset of Artifacts of Android AAPT2 R.txt files in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_symbols_bin",
               doc = "A depset of Artifacts of Android symbols files in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_compiled_symbols",
@@ -201,21 +201,21 @@
                       + "closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_static_lib",
               doc = "A depset of Artifacts of static lib files in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           @Param(
               name = "transitive_r_txt",
               doc = "A depset of Artifacts of Android AAPT R.txt files in the transitive closure.",
               positional = true,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
           // TODO(b/132383435): remove this
           @Param(
@@ -224,7 +224,7 @@
               doc = "A depset of opaque files to trigger resource validation.",
               positional = false,
               named = true,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
         },
         selfCall = true)
@@ -233,15 +233,15 @@
         Label label,
         AndroidManifestInfoT manifest,
         FileT rTxt,
-        SkylarkNestedSet transitiveAndroidResources,
-        SkylarkNestedSet directAndroidResources,
-        SkylarkNestedSet transitiveResources,
-        SkylarkNestedSet transitiveManifests,
-        SkylarkNestedSet transitiveAapt2RTxt,
-        SkylarkNestedSet transitiveSymbolsBin,
-        SkylarkNestedSet transitiveCompiledSymbols,
-        SkylarkNestedSet transitiveStaticLib,
-        SkylarkNestedSet transitiveRTxt,
+        Depset transitiveAndroidResources,
+        Depset directAndroidResources,
+        Depset transitiveResources,
+        Depset transitiveManifests,
+        Depset transitiveAapt2RTxt,
+        Depset transitiveSymbolsBin,
+        Depset transitiveCompiledSymbols,
+        Depset transitiveStaticLib,
+        Depset transitiveRTxt,
         Object transitiveAapt2ValidationArtifacts)
         throws EvalException;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java
index 90969a0..b991fde 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java
@@ -21,7 +21,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import javax.annotation.Nullable;
 
 /**
@@ -85,7 +85,7 @@
               + "to a set of the native library files, or the empty dictionary if there are no "
               + "native libraries.",
       documented = false)
-  ImmutableMap<String, SkylarkNestedSet> getNativeLibs();
+  ImmutableMap<String, Depset> getNativeLibs();
 
   @SkylarkCallable(
       name = "resource_apk",
@@ -124,7 +124,7 @@
       structField = true,
       doc = "Returns resources defined by this target.",
       documented = false)
-  SkylarkNestedSet /*<FileT>*/ getResources();
+  Depset /*<FileT>*/ getResources();
 
   @SkylarkCallable(
       name = "resource_jar",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/DataBindingV2ProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/DataBindingV2ProviderApi.java
index aee7c21..44c7e61 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/DataBindingV2ProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/DataBindingV2ProviderApi.java
@@ -22,9 +22,9 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import javax.annotation.Nullable;
 
 /**
@@ -92,7 +92,7 @@
 
   /** Returns the BR files from this rule and its dependencies. */
   @SkylarkCallable(name = "transitive_br_files", structField = true, doc = "", documented = false)
-  SkylarkNestedSet /*<T>*/ getTransitiveBRFilesForStarlark();
+  Depset /*<T>*/ getTransitiveBRFilesForStarlark();
 
   /**
    * Returns a NestedSet containing the label and java package for this rule and its transitive
@@ -103,7 +103,7 @@
       structField = true,
       doc = "",
       documented = false)
-  SkylarkNestedSet /*<LabelJavaPackagePair>*/ getTransitiveLabelAndJavaPackagesForStarlark();
+  Depset /*<LabelJavaPackagePair>*/ getTransitiveLabelAndJavaPackagesForStarlark();
 
   /**
    * Returns the label and java package for this rule and any rules that this rule exports.
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleCommonApi.java
index 57d0867..a4fb1d8 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleCommonApi.java
@@ -26,10 +26,10 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 
 /** Interface for a module with useful functions for creating apple-related rule implementations. */
@@ -319,7 +319,7 @@
                     + "dependencies linked into the binary."),
         @Param(
             name = "framework_dirs",
-            type = SkylarkNestedSet.class,
+            type = Depset.class,
             generic1 = String.class,
             named = true,
             noneable = true,
@@ -330,7 +330,7 @@
                     + "framework."),
         @Param(
             name = "framework_files",
-            type = SkylarkNestedSet.class,
+            type = Depset.class,
             generic1 = FileApi.class,
             named = true,
             noneable = true,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleDynamicFrameworkInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleDynamicFrameworkInfoApi.java
index a244812..8d2a8c9 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleDynamicFrameworkInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/AppleDynamicFrameworkInfoApi.java
@@ -19,7 +19,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import javax.annotation.Nullable;
 
 /**
@@ -41,7 +41,7 @@
       doc =
           "The framework path names used as link inputs in order to link against the dynamic "
               + "framework.")
-  public SkylarkNestedSet /*<String>*/ getDynamicFrameworkDirs();
+  public Depset /*<String>*/ getDynamicFrameworkDirs();
 
   /**
    * Returns the full set of artifacts that should be included as inputs to link against the dynamic
@@ -53,7 +53,7 @@
       doc =
           "The full set of files that should be included as inputs to link against the "
               + "dynamic framework.")
-  public SkylarkNestedSet /*<FileApiT>*/ getDynamicFrameworkFiles();
+  public Depset /*<FileApiT>*/ getDynamicFrameworkFiles();
 
   /**
    * Returns the multi-architecture dylib binary of the dynamic framework. May return null if
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcProviderApi.java
index 308d022..64693b3 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcProviderApi.java
@@ -19,8 +19,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * An interface for an info type that provides all compiling and linking information in the
@@ -39,7 +39,7 @@
       doc =
           "A set of strings from 'defines' attributes. These are to be passed as '-D' flags to "
               + "all invocations of the compiler for this target and all depending targets.")
-  public SkylarkNestedSet /*<String>*/ defineForStarlark();
+  public Depset /*<String>*/ defineForStarlark();
 
   @SkylarkCallable(
       name = "dynamic_framework_file",
@@ -47,13 +47,13 @@
       doc =
           "The library files in .framework directories belonging to a dynamically linked "
               + "framework.")
-  public SkylarkNestedSet /*<FileApiT>*/ dynamicFrameworkFileForStarlark();
+  public Depset /*<FileApiT>*/ dynamicFrameworkFileForStarlark();
 
   @SkylarkCallable(
       name = "exported_debug_artifacts",
       structField = true,
       doc = "Debug files that should be exported by the top-level target.")
-  public SkylarkNestedSet /*<FileApiT>*/ exportedDebugArtifacts();
+  public Depset /*<FileApiT>*/ exportedDebugArtifacts();
 
   @SkylarkCallable(
       name = "framework_search_path_only",
@@ -61,19 +61,19 @@
       doc =
           "Exec paths of .framework directories corresponding to frameworks to include "
               + "in search paths, but not to link.")
-  public SkylarkNestedSet /*<String>*/ frameworkSearchPathOnly();
+  public Depset /*<String>*/ frameworkSearchPathOnly();
 
   @SkylarkCallable(
       name = "force_load_library",
       structField = true,
       doc = "Libraries to load with -force_load.")
-  public SkylarkNestedSet /*<FileApiT>*/ forceLoadLibrary();
+  public Depset /*<FileApiT>*/ forceLoadLibrary();
 
   @SkylarkCallable(
       name = "header",
       structField = true,
       doc = "All header files. These may be either public or private headers.")
-  public SkylarkNestedSet /*<FileApiT>*/ headerForStarlark();
+  public Depset /*<FileApiT>*/ headerForStarlark();
 
   @SkylarkCallable(
       name = "direct_headers",
@@ -87,44 +87,45 @@
       name = "imported_library",
       structField = true,
       doc = "Imported precompiled static libraries (.a files) to be linked into the binary.")
-  public SkylarkNestedSet /*<FileApiT>*/ importedLibrary();
+  public Depset /*<FileApiT>*/ importedLibrary();
 
-  @SkylarkCallable(name = "include",
+  @SkylarkCallable(
+      name = "include",
       structField = true,
-      doc = "Include search paths specified with '-I' on the command line. Also known as "
-          + "header search paths (and distinct from <em>user</em> header search paths)."
-  )
-  public SkylarkNestedSet include();
+      doc =
+          "Include search paths specified with '-I' on the command line. Also known as "
+              + "header search paths (and distinct from <em>user</em> header search paths).")
+  public Depset include();
 
-  @SkylarkCallable(name = "include_system",
+  @SkylarkCallable(
+      name = "include_system",
       structField = true,
-      doc = "System include search paths (typically specified with -isystem)."
-  )
-  public SkylarkNestedSet includeSystem();
+      doc = "System include search paths (typically specified with -isystem).")
+  public Depset includeSystem();
 
-  @SkylarkCallable(name = "iquote",
+  @SkylarkCallable(
+      name = "iquote",
       structField = true,
-      doc = "User header search paths (typically specified with -iquote)."
-  )
-  public SkylarkNestedSet iquote();
+      doc = "User header search paths (typically specified with -iquote).")
+  public Depset iquote();
 
   @SkylarkCallable(
       name = "j2objc_library",
       structField = true,
       doc = "Static libraries that are built from J2ObjC-translated Java code.")
-  public SkylarkNestedSet /*<FileApiT>*/ j2objcLibrary();
+  public Depset /*<FileApiT>*/ j2objcLibrary();
 
   @SkylarkCallable(
       name = "jre_library",
       structField = true,
       doc = "J2ObjC JRE emulation libraries and their dependencies.")
-  public SkylarkNestedSet /*<FileApiT>*/ jreLibrary();
+  public Depset /*<FileApiT>*/ jreLibrary();
 
   @SkylarkCallable(
       name = "library",
       structField = true,
       doc = "Library (.a) files compiled by dependencies of the current target.")
-  public SkylarkNestedSet /*<FileApiT>*/ library();
+  public Depset /*<FileApiT>*/ library();
 
   @SkylarkCallable(
       name = "link_inputs",
@@ -134,7 +135,7 @@
               + " libraries or archives. This catch-all provides a way to add arbitrary data (e.g."
               + " Swift AST files) to the linker. The rule that adds these is also responsible to"
               + " add the necessary linker flags to 'linkopt'.")
-  public SkylarkNestedSet /*<FileApiT>*/ linkInputs();
+  public Depset /*<FileApiT>*/ linkInputs();
 
   @SkylarkCallable(
       name = "linked_binary",
@@ -142,16 +143,16 @@
       doc =
           "Single-architecture linked binaries to be combined for the final multi-architecture "
               + "binary.")
-  public SkylarkNestedSet /*<FileApiT>*/ linkedBinary();
+  public Depset /*<FileApiT>*/ linkedBinary();
 
   @SkylarkCallable(
       name = "linkmap_file",
       structField = true,
       doc = "Single-architecture link map for a binary.")
-  public SkylarkNestedSet /*<FileApiT>*/ linkmapFile();
+  public Depset /*<FileApiT>*/ linkmapFile();
 
   @SkylarkCallable(name = "linkopt", structField = true, doc = "Linking options.")
-  public SkylarkNestedSet /*<String>*/ linkopt();
+  public Depset /*<String>*/ linkopt();
 
   @SkylarkCallable(
       name = "merge_zip",
@@ -160,13 +161,13 @@
           "Merge zips to include in the bundle. The entries of these zip files are included "
               + "in the final bundle with the same path. The entries in the merge zips should not "
               + "include the bundle root path (e.g. 'Foo.app').")
-  public SkylarkNestedSet /*<FileApiT>*/ mergeZip();
+  public Depset /*<FileApiT>*/ mergeZip();
 
   @SkylarkCallable(
       name = "module_map",
       structField = true,
       doc = "Clang module maps, used to enforce proper use of private header files.")
-  public SkylarkNestedSet /*<FileApiT>*/ moduleMap();
+  public Depset /*<FileApiT>*/ moduleMap();
 
   @SkylarkCallable(
       name = "direct_module_maps",
@@ -180,34 +181,34 @@
       name = "multi_arch_dynamic_libraries",
       structField = true,
       doc = "Combined-architecture dynamic libraries to include in the final bundle.")
-  public SkylarkNestedSet /*<FileApiT>*/ multiArchDynamicLibraries();
+  public Depset /*<FileApiT>*/ multiArchDynamicLibraries();
 
   @SkylarkCallable(
       name = "multi_arch_linked_archives",
       structField = true,
       doc = "Combined-architecture archives to include in the final bundle.")
-  public SkylarkNestedSet /*<FileApiT>*/ multiArchLinkedArchives();
+  public Depset /*<FileApiT>*/ multiArchLinkedArchives();
 
   @SkylarkCallable(
       name = "multi_arch_linked_binaries",
       structField = true,
       doc = "Combined-architecture binaries to include in the final bundle.")
-  public SkylarkNestedSet /*<FileApiT>*/ multiArchLinkedBinaries();
+  public Depset /*<FileApiT>*/ multiArchLinkedBinaries();
 
   @SkylarkCallable(
       name = "sdk_dylib",
       structField = true,
       doc = "Names of SDK .dylib libraries to link with. For instance, 'libz' or 'libarchive'.")
-  public SkylarkNestedSet /*<String>*/ sdkDylib();
+  public Depset /*<String>*/ sdkDylib();
 
-  @SkylarkCallable(name = "sdk_framework",
+  @SkylarkCallable(
+      name = "sdk_framework",
       structField = true,
-      doc = "Names of SDK frameworks to link with (e.g. 'AddressBook', 'QuartzCore')."
-  )
-  public SkylarkNestedSet sdkFramework();
+      doc = "Names of SDK frameworks to link with (e.g. 'AddressBook', 'QuartzCore').")
+  public Depset sdkFramework();
 
   @SkylarkCallable(name = "source", structField = true, doc = "All transitive source files.")
-  public SkylarkNestedSet /*<FileApiT>*/ sourceForStarlark();
+  public Depset /*<FileApiT>*/ sourceForStarlark();
 
   @SkylarkCallable(
       name = "direct_sources",
@@ -219,7 +220,7 @@
       name = "static_framework_file",
       structField = true,
       doc = "The library files in .framework directories that should be statically linked.")
-  public SkylarkNestedSet /*<FileApiT>*/ staticFrameworkFileForStarlark();
+  public Depset /*<FileApiT>*/ staticFrameworkFileForStarlark();
 
   @SkylarkCallable(
       name = "umbrella_header",
@@ -227,7 +228,7 @@
       doc =
           "Clang umbrella header. Public headers are #included in umbrella headers to be "
               + "compatible with J2ObjC segmented headers.")
-  public SkylarkNestedSet /*<FileApiT>*/ umbrellaHeader();
+  public Depset /*<FileApiT>*/ umbrellaHeader();
 
   @SkylarkCallable(
       name = "weak_sdk_framework",
@@ -236,29 +237,29 @@
           "Names of SDK frameworks to weakly link with. For instance, 'MediaAccessibility'. "
               + "In difference to regularly linked SDK frameworks, symbols from weakly linked "
               + "frameworks do not cause an error if they are not present at runtime.")
-  public SkylarkNestedSet weakSdkFramework();
+  public Depset weakSdkFramework();
 
   @SkylarkCallable(
       name = "dynamic_framework_names",
       structField = true,
       doc = "Returns all names of dynamic frameworks in this provider.")
-  public SkylarkNestedSet /*<String>*/ dynamicFrameworkNamesForStarlark();
+  public Depset /*<String>*/ dynamicFrameworkNamesForStarlark();
 
   @SkylarkCallable(
       name = "dynamic_framework_paths",
       structField = true,
       doc = "Returns all framework paths to dynamic frameworks in this provider.")
-  public SkylarkNestedSet /*<String>*/ dynamicFrameworkPathsForStarlark();
+  public Depset /*<String>*/ dynamicFrameworkPathsForStarlark();
 
   @SkylarkCallable(
       name = "static_framework_names",
       structField = true,
       doc = "Returns all names of static frameworks in this provider.")
-  public SkylarkNestedSet /*<String>*/ staticFrameworkNamesForStarlark();
+  public Depset /*<String>*/ staticFrameworkNamesForStarlark();
 
   @SkylarkCallable(
       name = "static_framework_paths",
       structField = true,
       doc = "Returns all framework paths to static frameworks in this provider.")
-  public SkylarkNestedSet /*<String>*/ staticFrameworkPathsForStarlark();
+  public Depset /*<String>*/ staticFrameworkPathsForStarlark();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
index 8aeadb8..dfb166e 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
@@ -22,10 +22,10 @@
 import com.google.devtools.build.lib.skylarkinterface.ParamType;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.NoneType;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.syntax.Tuple;
 
@@ -362,10 +362,7 @@
             named = true,
             noneable = true,
             defaultValue = "None",
-            allowedTypes = {
-              @ParamType(type = SkylarkNestedSet.class),
-              @ParamType(type = NoneType.class)
-            }),
+            allowedTypes = {@ParamType(type = Depset.class), @ParamType(type = NoneType.class)}),
         @Param(
             name = "pic_objects",
             doc = "List of pic object files.",
@@ -373,10 +370,7 @@
             named = true,
             noneable = true,
             defaultValue = "None",
-            allowedTypes = {
-              @ParamType(type = SkylarkNestedSet.class),
-              @ParamType(type = NoneType.class)
-            }),
+            allowedTypes = {@ParamType(type = Depset.class), @ParamType(type = NoneType.class)}),
       })
   CompilationOutputsT createCompilationOutputsFromSkylark(
       Object objectsObject, Object picObjectsObject, Location location) throws EvalException;
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
index bda0516..6d0e3ef 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /**
  * Interface for a store of information needed for C++ compilation aggregated across dependencies.
@@ -36,7 +36,7 @@
           "Returns the set of defines needed to compile this target. Each define is a string."
               + " These values are propagated to the target's transitive dependencies.",
       structField = true)
-  SkylarkNestedSet getSkylarkDefines();
+  Depset getSkylarkDefines();
 
   @SkylarkCallable(
       name = "local_defines",
@@ -44,13 +44,13 @@
           "Returns the set of defines needed to compile this target. Each define is a string."
               + " These values are not propagated to the target's transitive dependencies.",
       structField = true)
-  SkylarkNestedSet getSkylarkNonTransitiveDefines();
+  Depset getSkylarkNonTransitiveDefines();
 
   @SkylarkCallable(
       name = "headers",
       doc = "Returns the set of headers needed to compile this target.",
       structField = true)
-  SkylarkNestedSet getSkylarkHeaders();
+  Depset getSkylarkHeaders();
 
   @SkylarkCallable(
       name = "system_includes",
@@ -59,7 +59,7 @@
               + " brackets, e.g. #include <foo/bar/header.h>. They can be either relative to the"
               + " exec root or absolute. Usually passed with -isystem.",
       structField = true)
-  SkylarkNestedSet getSkylarkSystemIncludeDirs();
+  Depset getSkylarkSystemIncludeDirs();
 
   @SkylarkCallable(
       name = "framework_includes",
@@ -67,7 +67,7 @@
           "Returns the set of search paths (as strings) for framework header files. Usually passed"
               + " with -F.",
       structField = true)
-  SkylarkNestedSet getSkylarkFrameworkIncludeDirs();
+  Depset getSkylarkFrameworkIncludeDirs();
 
   @SkylarkCallable(
       name = "includes",
@@ -75,7 +75,7 @@
           "Returns the set of search paths (as strings) for header files referenced both by angle"
               + " bracket and quotes. Usually passed with -I.",
       structField = true)
-  SkylarkNestedSet getSkylarkIncludeDirs();
+  Depset getSkylarkIncludeDirs();
 
   @SkylarkCallable(
       name = "quote_includes",
@@ -84,5 +84,5 @@
               + " e.g. #include \"foo/bar/header.h\". They can be either relative to the exec root"
               + " or absolute. Usually passed with -iquote.",
       structField = true)
-  SkylarkNestedSet getSkylarkQuoteIncludeDirs();
+  Depset getSkylarkQuoteIncludeDirs();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingContextApi.java
index 90860fa..8e4904a 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingContextApi.java
@@ -19,8 +19,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 
@@ -51,12 +51,12 @@
       name = "additional_inputs",
       doc = "Returns the depset of additional inputs, e.g.: linker scripts.",
       structField = true)
-  SkylarkNestedSet getSkylarkNonCodeInputs();
+  Depset getSkylarkNonCodeInputs();
 
   @SkylarkCallable(
       name = "linker_inputs",
       doc = "Returns the depset of linker inputs.",
       enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_CC_SHARED_LIBRARY,
       structField = true)
-  SkylarkNestedSet getSkylarkLinkerInputs();
+  Depset getSkylarkLinkerInputs();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
index 1e2ca3a..fcd30f7 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
@@ -25,11 +25,11 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.NoneType;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.lib.syntax.Tuple;
@@ -316,10 +316,7 @@
             named = true,
             defaultValue = "None",
             noneable = true,
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "quote_include_directories",
             doc = "Depset of quote include directories.",
@@ -327,10 +324,7 @@
             named = true,
             defaultValue = "None",
             noneable = true,
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "system_include_directories",
             doc = "Depset of system include directories.",
@@ -338,10 +332,7 @@
             named = true,
             defaultValue = "None",
             noneable = true,
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "framework_include_directories",
             doc = "Depset of framework include directories.",
@@ -349,10 +340,7 @@
             named = true,
             defaultValue = "None",
             noneable = true,
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "preprocessor_defines",
             doc = "Depset of preprocessor defines.",
@@ -360,10 +348,7 @@
             named = true,
             defaultValue = "None",
             noneable = true,
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "use_pic",
             doc = "When true the compilation will generate position independent code.",
@@ -416,10 +401,7 @@
             named = true,
             defaultValue = "None",
             noneable = true,
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "runtime_library_search_directories",
             doc = "Depset of directories where loader will look for libraries at runtime.",
@@ -427,10 +409,7 @@
             named = true,
             defaultValue = "None",
             noneable = true,
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "user_link_flags",
             doc = "List of additional link flags (linkopts).",
@@ -621,10 +600,7 @@
             named = true,
             noneable = true,
             defaultValue = "None",
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "user_link_flags",
             doc = "List of user link flags passed as strings.",
@@ -632,10 +608,7 @@
             named = true,
             noneable = true,
             defaultValue = "None",
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "additional_inputs",
             doc = "For additional inputs to the linking action, e.g.: linking scripts.",
@@ -643,10 +616,7 @@
             named = true,
             noneable = true,
             defaultValue = "None",
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
       })
   LinkerInputT createLinkerInput(
       Label owner,
@@ -670,10 +640,7 @@
             named = true,
             enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_CC_SHARED_LIBRARY,
             valueWhenDisabled = "None",
-            allowedTypes = {
-              @ParamType(type = NoneType.class),
-              @ParamType(type = SkylarkNestedSet.class)
-            }),
+            allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = Depset.class)}),
         @Param(
             name = "libraries_to_link",
             doc = "List of <code>LibraryToLink</code>.",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkApiProviderApi.java
index 13869ef..cd172a1 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcSkylarkApiProviderApi.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /** Object with information about C++ rules. Every C++-related target should provide this. */
 @SkylarkModule(
@@ -39,7 +39,7 @@
           "Returns a <a href=\"depset.html\">depset</a> of headers that have been declared in the "
               + " <code>src</code> or <code>headers</code> attribute"
               + "(possibly empty but never <code>None</code>).")
-  public SkylarkNestedSet /*<FileT>*/ getTransitiveHeadersForStarlark();
+  public Depset /*<FileT>*/ getTransitiveHeadersForStarlark();
 
   @SkylarkCallable(
       name = "libs",
@@ -49,7 +49,7 @@
               + "<code>FULLY STATIC</code> mode (<code>linkopts=[\"-static\"]</code>) or "
               + "<code>MOSTLY STATIC</code> mode (<code>linkstatic=1</code>) "
               + "(possibly empty but never <code>None</code>)")
-  public SkylarkNestedSet /*<FileT>*/ getLibrariesForStarlark();
+  public Depset /*<FileT>*/ getLibrariesForStarlark();
 
   @SkylarkCallable(
       name = "link_flags",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainProviderApi.java
index 0dc6513..96e40c8 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcToolchainProviderApi.java
@@ -20,8 +20,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import javax.annotation.Nullable;
 
 /** Information about the C++ toolchain. */
@@ -60,7 +60,7 @@
           "Returns all toolchain files (so they can be passed to actions using this "
               + "toolchain as inputs).",
       structField = true)
-  public SkylarkNestedSet getAllFilesForStarlark();
+  public Depset getAllFilesForStarlark();
 
   @SkylarkCallable(
       name = "static_runtime_lib",
@@ -78,7 +78,7 @@
             named = true,
             type = FeatureConfigurationApi.class)
       })
-  public SkylarkNestedSet getStaticRuntimeLibForStarlark(FeatureConfigurationT featureConfiguration)
+  public Depset getStaticRuntimeLibForStarlark(FeatureConfigurationT featureConfiguration)
       throws EvalException;
 
   @SkylarkCallable(
@@ -97,8 +97,8 @@
             named = true,
             type = FeatureConfigurationApi.class)
       })
-  public SkylarkNestedSet getDynamicRuntimeLibForStarlark(
-      FeatureConfigurationT featureConfiguration) throws EvalException;
+  public Depset getDynamicRuntimeLibForStarlark(FeatureConfigurationT featureConfiguration)
+      throws EvalException;
 
   @SkylarkCallable(
       name = "sysroot",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java
index c67f048..b4257a8 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java
@@ -26,10 +26,10 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.NoneType;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Tuple;
 
 /**
@@ -213,6 +213,6 @@
             named = true,
             allowedTypes = {@ParamType(type = NoneType.class), @ParamType(type = FileApi.class)}),
       })
-  public SkylarkNestedSet /*<FileT>*/ getGopackageFilesForStarlark(
+  public Depset /*<FileT>*/ getGopackageFilesForStarlark(
       SkylarkRuleContextT skylarkRuleContext, FileT skylarkGopkg);
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java
index 3217d45..73b2157 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java
@@ -21,9 +21,9 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * Helper class for the C++ aspects of {py,java,go}_wrap_cc. Provides methods to create the swig and
@@ -75,8 +75,7 @@
         @Param(name = "py_file", positional = false, named = true, type = FileApi.class),
       })
   // TODO(plf): Not written in Skylark because of PyCommon.
-  public SkylarkNestedSet getTransitivePythonSources(
-      SkylarkRuleContextT skylarkRuleContext, FileT pyFile)
+  public Depset getTransitivePythonSources(SkylarkRuleContextT skylarkRuleContext, FileT pyFile)
       throws EvalException, InterruptedException;
 
   @SkylarkCallable(
@@ -85,15 +84,10 @@
       documented = false,
       parameters = {
         @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class),
-        @Param(
-            name = "files_to_build",
-            positional = false,
-            named = true,
-            type = SkylarkNestedSet.class),
+        @Param(name = "files_to_build", positional = false, named = true, type = Depset.class),
       })
   // TODO(plf): Not written in Skylark because of PythonRunfilesProvider.
-  public RunfilesApi getPythonRunfiles(
-      SkylarkRuleContextT skylarkRuleContext, SkylarkNestedSet filesToBuild)
+  public RunfilesApi getPythonRunfiles(SkylarkRuleContextT skylarkRuleContext, Depset filesToBuild)
       throws EvalException, InterruptedException;
 
   @SkylarkCallable(
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java
index d01e68b..ebc75ad 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java
@@ -22,10 +22,10 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.NoneType;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * Helper class for the C++ aspects of {py,java,go}_wrap_cc. Provides methods to create the swig and
@@ -67,8 +67,7 @@
       parameters = {
         @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class),
       })
-  public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes(
-      SkylarkRuleContextT skylarkRuleContext);
+  public Depset skylarkCollectTransitiveSwigIncludes(SkylarkRuleContextT skylarkRuleContext);
 
   @SkylarkCallable(
       name = "create_compile_actions",
@@ -120,15 +119,11 @@
       documented = false,
       parameters = {
         @Param(name = "ctx", positional = false, named = true, type = SkylarkRuleContextApi.class),
-        @Param(
-            name = "swig_includes",
-            positional = false,
-            named = true,
-            type = SkylarkNestedSet.class),
+        @Param(name = "swig_includes", positional = false, named = true, type = Depset.class),
       })
   // TODO(plf): Not written in Skylark because of PythonRunfilesProvider.
   public WrapCcIncludeProviderT getWrapCcIncludeProvider(
-      SkylarkRuleContextT skylarkRuleContext, SkylarkNestedSet swigIncludes)
+      SkylarkRuleContextT skylarkRuleContext, Depset swigIncludes)
       throws EvalException, InterruptedException;
 
   @SkylarkCallable(
@@ -152,11 +147,7 @@
             positional = false,
             named = true,
             type = CcCompilationContextApi.class),
-        @Param(
-            name = "swig_includes",
-            positional = false,
-            named = true,
-            type = SkylarkNestedSet.class),
+        @Param(name = "swig_includes", positional = false, named = true, type = Depset.class),
         @Param(name = "swig_source", positional = false, named = true, type = FileApi.class),
         @Param(name = "sub_parameters", positional = false, named = true, type = Sequence.class),
         @Param(name = "cc_file", positional = false, named = true, type = FileApi.class),
@@ -176,11 +167,7 @@
             noneable = true,
             defaultValue = "None",
             allowedTypes = {@ParamType(type = String.class), @ParamType(type = NoneType.class)}),
-        @Param(
-            name = "auxiliary_inputs",
-            positional = false,
-            named = true,
-            type = SkylarkNestedSet.class),
+        @Param(name = "auxiliary_inputs", positional = false, named = true, type = Depset.class),
         @Param(name = "swig_attribute_name", positional = false, named = true, type = String.class),
         @Param(
             name = "zip_tool",
@@ -199,7 +186,7 @@
       CcToolchainProviderT ccToolchain,
       FeatureConfigurationT featureConfiguration,
       CcCompilationContextT wrapperCcCompilationContext,
-      SkylarkNestedSet swigIncludes,
+      Depset swigIncludes,
       FileT swigSource,
       Sequence<?> subParameters, // <String> expected
       FileT ccFile,
@@ -207,7 +194,7 @@
       Sequence<?> outputFiles, // <FileT> expected
       Object outDir,
       Object javaDir,
-      SkylarkNestedSet auxiliaryInputs,
+      Depset auxiliaryInputs,
       String swigAttributeName,
       Object zipTool)
       throws EvalException, InterruptedException;
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
index 633f427..20fcdc8 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/GeneratedExtensionRegistryProviderApi.java
@@ -22,8 +22,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Provides information about generated proto extensions. */
 @SkylarkModule(
@@ -48,7 +48,7 @@
   FileT getSrcJar();
 
   @SkylarkCallable(name = "inputs", structField = true, doc = "", documented = false)
-  SkylarkNestedSet /*<FileT>*/ getInputsForStarlark();
+  Depset /*<FileT>*/ getInputsForStarlark();
 
   /** The provider implementing this can construct the GeneratedExtensionRegistryProvider. */
   @SkylarkModule(name = "Provider", doc = "", documented = false)
@@ -87,7 +87,7 @@
               doc = "Proto jars used to generate the registry",
               positional = true,
               named = false,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
         },
         selfCall = true)
@@ -95,11 +95,7 @@
         objectType = GeneratedExtensionRegistryProviderApi.class,
         receiverNameForDoc = NAME)
     GeneratedExtensionRegistryProviderApi<FileT> create(
-        Label generatingRuleLabel,
-        boolean isLite,
-        FileT classJar,
-        FileT srcJar,
-        SkylarkNestedSet inputs)
+        Label generatingRuleLabel, boolean isLite, FileT classJar, FileT srcJar, Depset inputs)
         throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaAnnotationProcessingApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaAnnotationProcessingApi.java
index 9317502..5a4d3cb 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaAnnotationProcessingApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaAnnotationProcessingApi.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import javax.annotation.Nullable;
 
 /**
@@ -64,7 +64,7 @@
       doc =
           "Returns a transitive set of class file jars resulting from annotation "
               + "processing of this rule and its dependencies.")
-  public SkylarkNestedSet /*<FileTypeT>*/ getTransitiveGenClassJarsForStarlark();
+  public Depset /*<FileTypeT>*/ getTransitiveGenClassJarsForStarlark();
 
   @SkylarkCallable(
       name = "transitive_source_jars",
@@ -72,13 +72,13 @@
       doc =
           "Returns a transitive set of source archives resulting from annotation processing "
               + "of this rule and its dependencies.")
-  public SkylarkNestedSet /*<FileTypeT>*/ getTransitiveGenSourceJarsForStarlark();
+  public Depset /*<FileTypeT>*/ getTransitiveGenSourceJarsForStarlark();
 
   @SkylarkCallable(
       name = "processor_classpath",
       structField = true,
       doc = "Returns a classpath of annotation processors applied to this rule.")
-  public SkylarkNestedSet /*<FileTypeT>*/ getProcessorClasspathForStarlark();
+  public Depset /*<FileTypeT>*/ getProcessorClasspathForStarlark();
 
   @SkylarkCallable(
     name = "processor_classnames",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
index d889bb6..429c62b 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCommonApi.java
@@ -26,9 +26,9 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics.FlagIdentifier;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
@@ -531,7 +531,7 @@
             doc = "The JavaInfo to query."),
       },
       enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_GOOGLE_LEGACY_API)
-  public SkylarkNestedSet /*<FileT>*/ getCompileTimeJavaDependencyArtifacts(JavaInfoT javaInfo);
+  public Depset /*<FileT>*/ getCompileTimeJavaDependencyArtifacts(JavaInfoT javaInfo);
 
   @SkylarkCallable(
       name = "add_compile_time_jdeps",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCompilationInfoProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCompilationInfoProviderApi.java
index 7127cbe..4611644 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCompilationInfoProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCompilationInfoProviderApi.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /** Info object for compilation information for java rules. */
 @SkylarkModule(
@@ -36,13 +36,13 @@
       name = "runtime_classpath",
       structField = true,
       doc = "Run-time classpath for this Java target.")
-  public SkylarkNestedSet /*<FileT>*/ getRuntimeClasspath();
+  public Depset /*<FileT>*/ getRuntimeClasspath();
 
   @SkylarkCallable(
       name = "compilation_classpath",
       structField = true,
       doc = "Compilation classpath for this Java target.")
-  public SkylarkNestedSet /*<FileT>*/ getCompilationClasspath();
+  public Depset /*<FileT>*/ getCompilationClasspath();
 
   @SkylarkCallable(
       name = "boot_classpath",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaInfoApi.java
index b1d18c2..62d306b 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaInfoApi.java
@@ -23,9 +23,9 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 
 /** Info object encapsulating all information by java rules. */
@@ -43,7 +43,7 @@
               + " href=\"JavaInfo.html#transitive_runtime_deps\">JavaInfo.transitive_runtime_deps"
               + "</a></code> for legacy reasons.",
       structField = true)
-  public SkylarkNestedSet getTransitiveRuntimeJars();
+  public Depset getTransitiveRuntimeJars();
 
   @SkylarkCallable(
       name = "transitive_compile_time_jars",
@@ -53,7 +53,7 @@
               + " href=\"JavaInfo.html#transitive_deps\">JavaInfo.transitive_deps</a></code> for"
               + " legacy reasons.",
       structField = true)
-  public SkylarkNestedSet getTransitiveCompileTimeJars();
+  public Depset getTransitiveCompileTimeJars();
 
   @SkylarkCallable(
       name = "compile_jars",
@@ -62,7 +62,7 @@
               + " interface jars (ijar or hjar), regular jars or both, depending on whether rule"
               + " implementations chose to create interface jars or not.",
       structField = true)
-  public SkylarkNestedSet getCompileTimeJars();
+  public Depset getCompileTimeJars();
 
   @SkylarkCallable(
       name = "full_compile_jars",
@@ -81,7 +81,7 @@
               + " <code><a class=\"anchor\""
               + " href=\"JavaInfo.html#compile_jars\">JavaInfo.compile_jars</a></code></li>",
       structField = true)
-  public SkylarkNestedSet getFullCompileTimeJars();
+  public Depset getFullCompileTimeJars();
 
   @SkylarkCallable(
       name = "source_jars",
@@ -127,7 +127,7 @@
               + " href=\"JavaInfo.html#transitive_compile_time_jars\">JavaInfo.transitive_compile_time_jars</a></code>"
               + " for legacy reasons.",
       structField = true)
-  public SkylarkNestedSet /*<FileT>*/ getTransitiveDeps();
+  public Depset /*<FileT>*/ getTransitiveDeps();
 
   @SkylarkCallable(
       name = "transitive_runtime_deps",
@@ -137,7 +137,7 @@
               + " href=\"JavaInfo.html#transitive_runtime_jars\">JavaInfo.transitive_runtime_jars"
               + "</a></code> for legacy reasons.",
       structField = true)
-  public SkylarkNestedSet /*<FileT>*/ getTransitiveRuntimeDeps();
+  public Depset /*<FileT>*/ getTransitiveRuntimeDeps();
 
   @SkylarkCallable(
       name = "transitive_source_jars",
@@ -145,13 +145,13 @@
           "Returns the Jars containing source files of the current target and all of its"
               + " transitive dependencies.",
       structField = true)
-  public SkylarkNestedSet /*<FileT>*/ getTransitiveSourceJars();
+  public Depset /*<FileT>*/ getTransitiveSourceJars();
 
   @SkylarkCallable(
       name = "transitive_exports",
       structField = true,
       doc = "Returns a set of labels that are being exported from this rule transitively.")
-  public SkylarkNestedSet /*<Label>*/ getTransitiveExports();
+  public Depset /*<Label>*/ getTransitiveExports();
 
   /** Provider class for {@link JavaInfoApi} objects. */
   @SkylarkModule(name = "Provider", documented = false, doc = "")
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeClasspathProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
index 78261db..3515609 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeClasspathProviderApi.java
@@ -17,12 +17,12 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /** Provider for the runtime classpath contributions of a Java binary. */
 @SkylarkModule(name = "JavaRuntimeClasspathProvider", doc = "", documented = false)
 public interface JavaRuntimeClasspathProviderApi extends SkylarkValue {
 
   @SkylarkCallable(name = "runtime_classpath", documented = false, structField = true)
-  public SkylarkNestedSet /*<File>*/ getRuntimeClasspath();
+  public Depset /*<File>*/ getRuntimeClasspath();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeInfoApi.java
index 3116bba..478c625 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaRuntimeInfoApi.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /** Information about the Java runtime being used. */
 @SkylarkModule(
@@ -67,5 +67,5 @@
       name = "files",
       doc = "Returns the files in the Java runtime.",
       structField = true)
-  SkylarkNestedSet skylarkJavaBaseInputs();
+  Depset skylarkJavaBaseInputs();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaToolchainSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaToolchainSkylarkApiProviderApi.java
index e48db2d..cfa2af6 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaToolchainSkylarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaToolchainSkylarkApiProviderApi.java
@@ -19,8 +19,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * Provides access to information about the Java toolchain rule. Accessible as a 'java_toolchain'
@@ -56,7 +56,7 @@
       name = "bootclasspath",
       doc = "The Java target bootclasspath entries. Corresponds to javac's -bootclasspath flag.",
       structField = true)
-  public SkylarkNestedSet getSkylarkBootclasspath();
+  public Depset getSkylarkBootclasspath();
 
   @SkylarkCallable(
       name = "jvm_opt",
@@ -65,5 +65,5 @@
   public Sequence<String> getSkylarkJvmOptions();
 
   @SkylarkCallable(name = "tools", doc = "The compilation tools.", structField = true)
-  public SkylarkNestedSet getSkylarkTools();
+  public Depset getSkylarkTools();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/ProguardSpecProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/ProguardSpecProviderApi.java
index 8985e03..a847b2a 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/ProguardSpecProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/ProguardSpecProviderApi.java
@@ -21,8 +21,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Provides information about proguard specs for Android binaries. */
 @SkylarkModule(
@@ -34,7 +34,7 @@
   public static final String NAME = "ProguardSpecProvider";
 
   @SkylarkCallable(name = "specs", structField = true, doc = "", documented = false)
-  SkylarkNestedSet /*<FileT>*/ getTransitiveProguardSpecsForStarlark();
+  Depset /*<FileT>*/ getTransitiveProguardSpecsForStarlark();
 
   /** The provider implementing this can construct the ProguardSpecProvider. */
   @SkylarkModule(name = "Provider", doc = "", documented = false)
@@ -49,11 +49,11 @@
               doc = "Transitive proguard specs.",
               positional = true,
               named = false,
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class),
         },
         selfCall = true)
     @SkylarkConstructor(objectType = ProguardSpecProviderApi.class, receiverNameForDoc = NAME)
-    ProguardSpecProviderApi<FileT> create(SkylarkNestedSet specs) throws EvalException;
+    ProguardSpecProviderApi<FileT> create(Depset specs) throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoRegistryProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoRegistryProviderApi.java
index 9e30dd7..93c7ed1 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoRegistryProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/proto/ProtoRegistryProviderApi.java
@@ -19,8 +19,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Provides information about flavors for all built protos. */
 @SkylarkModule(
@@ -30,7 +30,7 @@
 public interface ProtoRegistryProviderApi<FileT extends FileApi> extends StructApi {
 
   @SkylarkCallable(name = "jars", documented = false, doc = "", structField = true)
-  SkylarkNestedSet /*<FileT>*/ getJars();
+  Depset /*<FileT>*/ getJars();
 
   @SkylarkCallable(name = "flavors", documented = false, doc = "", structField = true)
   Sequence<String> getFlavors();
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyInfoApi.java
index 4fbb185..fadeeae 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyInfoApi.java
@@ -23,8 +23,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Provider instance for the Python rules. */
 @SkylarkModule(
@@ -40,7 +40,7 @@
           "A (<code>postorder</code>-compatible) depset of <code>.py</code> files appearing in the "
               + "target's <code>srcs</code> and the <code>srcs</code> of the target's transitive "
               + "<code>deps</code>.")
-  SkylarkNestedSet getTransitiveSources();
+  Depset getTransitiveSources();
 
   @SkylarkCallable(
       name = "uses_shared_libraries",
@@ -62,7 +62,7 @@
               + ""
               + "<p>The order of the depset is not guaranteed and may be changed in the future. It "
               + "is recommended to use <code>default</code> order (the default).")
-  SkylarkNestedSet getImports();
+  Depset getImports();
 
   @SkylarkCallable(
       name = "has_py2_only_sources",
@@ -86,7 +86,7 @@
         parameters = {
           @Param(
               name = "transitive_sources",
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class,
               positional = false,
               named = true,
@@ -100,7 +100,7 @@
               doc = "The value for the new object's <code>uses_shared_libraries</code> field."),
           @Param(
               name = "imports",
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = String.class,
               positional = false,
               named = true,
@@ -125,7 +125,7 @@
         useLocation = true)
     @SkylarkConstructor(objectType = PyInfoApi.class, receiverNameForDoc = "PyInfo")
     PyInfoApi<?> constructor(
-        SkylarkNestedSet transitiveSources,
+        Depset transitiveSources,
         boolean usesSharedLibraries,
         Object importsUncast,
         boolean hasPy2OnlySources,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyRuntimeInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyRuntimeInfoApi.java
index b1ccaad..365b307 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyRuntimeInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/python/PyRuntimeInfoApi.java
@@ -23,8 +23,8 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import javax.annotation.Nullable;
 
 /** Provider instance for {@code py_runtime}. */
@@ -76,7 +76,7 @@
               + "of <code>interpreter</code> need not be included in this "
               + "field. If this is a platform runtime then this field is <code>None</code>.")
   @Nullable
-  SkylarkNestedSet getFilesForStarlark();
+  Depset getFilesForStarlark();
 
   @SkylarkCallable(
       name = "python_version",
@@ -116,7 +116,7 @@
                       + "a value for this argument if you pass in <code>interpreter_path</code>."),
           @Param(
               name = "files",
-              type = SkylarkNestedSet.class,
+              type = Depset.class,
               generic1 = FileApi.class,
               noneable = true,
               positional = false,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test/AnalysisFailureInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test/AnalysisFailureInfoApi.java
index 514e038..d0fb42e 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test/AnalysisFailureInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test/AnalysisFailureInfoApi.java
@@ -18,7 +18,7 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /**
  * Encapsulates information about an analysis-phase error which would have occurred during a build.
@@ -57,7 +57,7 @@
               + "occurred in this target or its dependencies.",
       documented = false,
       structField = true)
-  public SkylarkNestedSet /*<AnalysisFailureApiT>*/ getCauses();
+  public Depset /*<AnalysisFailureApiT>*/ getCauses();
 
   /** Provider class for {@link AnalysisFailureInfoApi} objects. */
   @SkylarkModule(name = "Provider", documented = false, doc = "")
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerialization.java b/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerialization.java
index fb3086d..7a7bf91 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerialization.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerialization.java
@@ -22,11 +22,11 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.syntax.CallUtils;
 import com.google.devtools.build.lib.syntax.ClassObject;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.MethodDescriptor;
 import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import java.lang.reflect.Array;
 import java.util.Map;
 import java.util.Set;
@@ -55,7 +55,7 @@
   }
 
   private static boolean hasChildren(Object value) {
-    if (value instanceof SkylarkNestedSet) {
+    if (value instanceof Depset) {
       return true;
     }
     if (value instanceof NestedSetView) {
@@ -83,8 +83,8 @@
   }
 
   static ImmutableList<Value> getChildren(ThreadObjectMap objectMap, Object value) {
-    if (value instanceof SkylarkNestedSet) {
-      return getChildren(objectMap, (SkylarkNestedSet) value);
+    if (value instanceof Depset) {
+      return getChildren(objectMap, (Depset) value);
     }
     if (value instanceof NestedSetView) {
       return getChildren(objectMap, (NestedSetView) value);
@@ -161,8 +161,7 @@
     return children.build();
   }
 
-  private static ImmutableList<Value> getChildren(
-      ThreadObjectMap objectMap, SkylarkNestedSet nestedSet) {
+  private static ImmutableList<Value> getChildren(ThreadObjectMap objectMap, Depset nestedSet) {
     return ImmutableList.<Value>builder()
         .add(
             Value.newBuilder()
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BUILD b/src/main/java/com/google/devtools/build/lib/syntax/BUILD
index 85b2c01..d8b2146 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BUILD
@@ -98,6 +98,7 @@
         "Concatable.java",
         "DebugFrame.java",
         "Debugger.java",
+        "Depset.java",
         "Dict.java",
         "Eval.java",
         "EvalException.java",
@@ -119,7 +120,6 @@
         "Sequence.java",
         "SkylarkClassObject.java",
         "SkylarkIndexable.java",
-        "SkylarkNestedSet.java",
         "SkylarkQueryable.java",
         "SkylarkSignatureProcessor.java",
         "SkylarkType.java",
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java b/src/main/java/com/google/devtools/build/lib/syntax/Depset.java
similarity index 88%
rename from src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
rename to src/main/java/com/google/devtools/build/lib/syntax/Depset.java
index 7bbef1d..fde1f11 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Depset.java
@@ -32,12 +32,18 @@
 import javax.annotation.Nullable;
 
 /**
- * A generic, type-safe {@link NestedSet} wrapper for Skylark.
+ * A Depset is a Starlark value that wraps a {@link NestedSet}.
  *
- * <p>The content type of a non-empty {@code SkylarkNestedSet} is determined by its first element.
- * All elements must have the same type. An empty depset has type {@code SkylarkType.TOP}, and may
- * be combined with any other depset.
+ * <p>A NestedSet has a type parameter that describes, at compile time, the elements of the set. By
+ * contrast, a Depset has a value, {@link #getContentType}, that describes the elements during
+ * execution. This type symbol permits the element type of a Depset value to be queried, after the
+ * type parameter has been erased, without visiting each element of the often-vast data structure.
+ *
+ * <p>The content type of a non-empty {@code Depset} is determined by its first element. All
+ * elements must have the same type. An empty depset has type {@code SkylarkType.TOP}, and may be
+ * combined with any other depset.
  */
+// TODO(adonovan): move to lib.packages, as this is a Bazelism.
 @SkylarkModule(
     name = "depset",
     category = SkylarkModuleCategory.BUILTIN,
@@ -83,14 +89,14 @@
             + " may interfere with the ordering semantics.")
 @Immutable
 @AutoCodec
-public final class SkylarkNestedSet implements SkylarkValue {
+public final class Depset implements SkylarkValue {
   private final SkylarkType contentType;
   private final NestedSet<?> set;
   @Nullable private final ImmutableList<Object> items;
   @Nullable private final ImmutableList<NestedSet<?>> transitiveItems;
 
   @AutoCodec.VisibleForSerialization
-  SkylarkNestedSet(
+  Depset(
       SkylarkType contentType,
       NestedSet<?> set,
       ImmutableList<Object> items,
@@ -101,12 +107,8 @@
     this.transitiveItems = transitiveItems;
   }
 
-  static SkylarkNestedSet of(
-      Order order,
-      SkylarkType contentType,
-      Object item,
-      Location loc,
-      @Nullable SkylarkNestedSet left)
+  static Depset of(
+      Order order, SkylarkType contentType, Object item, Location loc, @Nullable Depset left)
       throws EvalException {
     ImmutableList.Builder<Object> itemsBuilder = ImmutableList.builder();
     ImmutableList.Builder<NestedSet<?>> transitiveItemsBuilder = ImmutableList.builder();
@@ -119,8 +121,8 @@
       }
     }
     // Adding the item
-    if (item instanceof SkylarkNestedSet) {
-      SkylarkNestedSet nestedSet = (SkylarkNestedSet) item;
+    if (item instanceof Depset) {
+      Depset nestedSet = (Depset) item;
       if (!nestedSet.isEmpty()) {
         contentType = checkType(contentType, nestedSet.contentType, loc);
         transitiveItemsBuilder.add(nestedSet.set);
@@ -151,42 +153,41 @@
       // Order mismatch between item and builder.
       throw new EvalException(loc, e.getMessage());
     }
-    return new SkylarkNestedSet(contentType, builder.build(), items, transitiveItems);
+    return new Depset(contentType, builder.build(), items, transitiveItems);
   }
 
-  static SkylarkNestedSet of(Order order, Object item, Location loc) throws EvalException {
+  static Depset of(Order order, Object item, Location loc) throws EvalException {
     // TODO(adonovan): rethink this API. TOP is a pessimistic type for item, and it's wrong
-    // (should be BOTTOM) if item is an empty SkylarkNestedSet or Sequence.
+    // (should be BOTTOM) if item is an empty Depset or Sequence.
     return of(order, SkylarkType.TOP, item, loc, null);
   }
 
-  static SkylarkNestedSet of(SkylarkNestedSet left, Object right, Location loc)
-      throws EvalException {
+  static Depset of(Depset left, Object right, Location loc) throws EvalException {
     return of(left.set.getOrder(), left.contentType, right, loc, left);
   }
 
   /**
-   * Returns a type-safe SkylarkNestedSet. Use this instead of the constructor if possible.
+   * Returns a type-safe Depset. Use this instead of the constructor if possible.
    *
    * <p>This operation is type-safe only if the specified element type is appropriate for every
    * element of the set.
    */
-  // TODO(adonovan): enforce that we never construct a SkylarkNestedSet with a StarlarkType
+  // TODO(adonovan): enforce that we never construct a Depset with a StarlarkType
   // that represents a non-Skylark type (e.g. NestedSet<PathFragment>).
   // One way to do that is to disallow constructing StarlarkTypes for classes
   // that would fail Starlark.valid; however remains the problem that
   // Object.class means "any Starlark value" but in fact allows any Java value.
-  public static <T> SkylarkNestedSet of(SkylarkType contentType, NestedSet<T> set) {
-    return new SkylarkNestedSet(contentType, set, null, null);
+  public static <T> Depset of(SkylarkType contentType, NestedSet<T> set) {
+    return new Depset(contentType, set, null, null);
   }
 
   /**
-   * Returns a type safe SkylarkNestedSet. Use this instead of the constructor if possible.
+   * Returns a type safe Depset. Use this instead of the constructor if possible.
    *
    * <p>This operation is type-safe only if the specified element type is appropriate for every
    * element of the set.
    */
-  public static <T> SkylarkNestedSet of(Class<T> contentType, NestedSet<T> set) {
+  public static <T> Depset of(Class<T> contentType, NestedSet<T> set) {
     return of(SkylarkType.of(contentType), set);
   }
 
@@ -316,8 +317,8 @@
    *
    * <p>If the parameter's value is None, returns an empty nested set.
    *
-   * @throws EvalException if the parameter is neither None nor a SkylarkNestedSet, or if it is a
-   *     SkylarkNestedSet of an unexpected type
+   * @throws EvalException if the parameter is neither None nor a Depset, or if it is a Depset of an
+   *     unexpected type
    */
   // TODO(b/140932420): Better noneable handling should prevent instanceof checking.
   public static <T> NestedSet<T> getSetFromNoneableParam(
@@ -325,8 +326,8 @@
     if (depsetOrNone == Starlark.NONE) {
       return NestedSetBuilder.<T>emptySet(Order.STABLE_ORDER);
     }
-    if (depsetOrNone instanceof SkylarkNestedSet) {
-      SkylarkNestedSet depset = (SkylarkNestedSet) depsetOrNone;
+    if (depsetOrNone instanceof Depset) {
+      Depset depset = (Depset) depsetOrNone;
       return depset.getSetFromParam(expectedType, fieldName);
     } else {
       throw new EvalException(
@@ -386,7 +387,7 @@
       },
       useLocation = true,
       useStarlarkThread = true)
-  public SkylarkNestedSet union(Object newElements, Location loc, StarlarkThread thread)
+  public Depset union(Object newElements, Location loc, StarlarkThread thread)
       throws EvalException {
     if (thread.getSemantics().incompatibleDepsetUnion()) {
       throw new EvalException(
@@ -397,9 +398,9 @@
               + "to temporarily disable this check.");
     }
     // newElements' type is Object because of the polymorphism on unioning two
-    // SkylarkNestedSets versus a set and another kind of iterable.
+    // Depsets versus a set and another kind of iterable.
     // Can't use EvalUtils#toIterable since that would discard this information.
-    return SkylarkNestedSet.of(this, newElements, loc);
+    return Depset.of(this, newElements, loc);
   }
 
   @SkylarkCallable(
@@ -439,10 +440,10 @@
   }
 
   /**
-   * Builder for {@link SkylarkNestedSet}.
+   * Builder for {@link Depset}.
    *
-   * <p>Use this to construct typesafe Skylark nested sets (depsets).
-   * Encapsulates content type checking logic.
+   * <p>Use this to construct typesafe Skylark nested sets (depsets). Encapsulates content type
+   * checking logic.
    */
   public static final class Builder {
 
@@ -469,7 +470,7 @@
     }
 
     /** Adds a transitive set, checking that its type is equal to the elements already added. */
-    public Builder addTransitive(SkylarkNestedSet transitive) throws EvalException {
+    public Builder addTransitive(Depset transitive) throws EvalException {
       if (transitive.isEmpty()) {
         return this;
       }
@@ -485,8 +486,8 @@
       return this;
     }
 
-    public SkylarkNestedSet build() {
-      return new SkylarkNestedSet(contentType, builder.build(), null, null);
+    public Depset build() {
+      return new Depset(contentType, builder.build(), null, null);
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
index 10401f5..1ac7a6d 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
@@ -98,7 +98,7 @@
           if (o1 instanceof ClassObject) {
             throw new ComparisonException("Cannot compare structs");
           }
-          if (o1 instanceof SkylarkNestedSet) {
+          if (o1 instanceof Depset) {
             throw new ComparisonException("Cannot compare depsets");
           }
           try {
@@ -144,7 +144,7 @@
    * @param o an Object
    * @return true if the object is known to be an immutable value.
    */
-  // NB: This is used as the basis for accepting objects in SkylarkNestedSet-s.
+  // NB: This is used as the basis for accepting objects in Depset-s.
   public static boolean isImmutable(Object o) {
     if (o instanceof SkylarkValue) {
       return ((SkylarkValue) o).isImmutable();
@@ -159,7 +159,7 @@
    * @param c a Class
    * @return true if the class is known to represent only recursively immutable values.
    */
-  // NB: This is used as the basis for accepting objects in SkylarkNestedSet-s,
+  // NB: This is used as the basis for accepting objects in Depset-s,
   // as well as for accepting objects as keys for Skylark dict-s.
   private static boolean isImmutable(Class<?> c) {
     return c.isAnnotationPresent(Immutable.class) // TODO(bazel-team): beware of containers!
@@ -218,8 +218,8 @@
   public static String getDataTypeName(Object object, boolean fullDetails) {
     Preconditions.checkNotNull(object);
     if (fullDetails) {
-      if (object instanceof SkylarkNestedSet) {
-        SkylarkNestedSet set = (SkylarkNestedSet) object;
+      if (object instanceof Depset) {
+        Depset set = (Depset) object;
         return "depset of " + set.getContentType() + "s";
       }
       if (object instanceof SelectorList) {
@@ -693,7 +693,7 @@
     }
 
     // TODO(bazel-team): Remove deprecated operator.
-    if (x instanceof SkylarkNestedSet) {
+    if (x instanceof Depset) {
       if (thread.getSemantics().incompatibleDepsetUnion()) {
         throw new EvalException(
             location,
@@ -702,7 +702,7 @@
                 + "recommendations. Use --incompatible_depset_union=false "
                 + "to temporarily disable this check.");
       }
-      return SkylarkNestedSet.of((SkylarkNestedSet) x, y, location);
+      return Depset.of((Depset) x, y, location);
     }
     throw unknownBinaryOperator(x, y, TokenKind.PLUS, location);
   }
@@ -712,7 +712,7 @@
       throws EvalException {
     if (x instanceof Integer && y instanceof Integer) {
       return ((Integer) x) | ((Integer) y);
-    } else if (x instanceof SkylarkNestedSet) {
+    } else if (x instanceof Depset) {
       if (thread.getSemantics().incompatibleDepsetUnion()) {
         throw new EvalException(
             location,
@@ -721,7 +721,7 @@
                 + "recommendations. Use --incompatible_depset_union=false "
                 + "to temporarily disable this check.");
       }
-      return SkylarkNestedSet.of((SkylarkNestedSet) x, y, location);
+      return Depset.of((Depset) x, y, location);
     }
     throw unknownBinaryOperator(x, y, TokenKind.PIPE, location);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
index b8f4332..2a339fd 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java
@@ -981,7 +981,7 @@
             named = true,
             positional = false,
             type = Sequence.class,
-            generic1 = SkylarkNestedSet.class,
+            generic1 = Depset.class,
             noneable = true,
             doc = "A list of depsets whose elements will become indirect elements of the depset.",
             defaultValue = "None"),
@@ -1001,7 +1001,7 @@
       },
       useLocation = true,
       useStarlarkSemantics = true)
-  public SkylarkNestedSet depset(
+  public Depset depset(
       Object x,
       String orderString,
       Object direct,
@@ -1011,7 +1011,7 @@
       StarlarkSemantics semantics)
       throws EvalException {
     Order order;
-    SkylarkNestedSet result;
+    Depset result;
     try {
       order = Order.parse(orderString);
     } catch (IllegalArgumentException ex) {
@@ -1052,10 +1052,10 @@
     return result;
   }
 
-  private static SkylarkNestedSet depsetConstructor(
+  private static Depset depsetConstructor(
       Object direct, Order order, Object transitive, Location loc) throws EvalException {
 
-    if (direct instanceof SkylarkNestedSet) {
+    if (direct instanceof Depset) {
       throw new EvalException(
           loc,
           "parameter 'direct' must contain a list of elements, and may "
@@ -1063,12 +1063,11 @@
               + "by setting --incompatible_disable_depset_inputs=false");
     }
 
-    SkylarkNestedSet.Builder builder = SkylarkNestedSet.builder(order, loc);
+    Depset.Builder builder = Depset.builder(order, loc);
     for (Object directElement : listFromNoneable(direct, Object.class, "direct")) {
       builder.addDirect(directElement);
     }
-    for (SkylarkNestedSet transitiveSet :
-        listFromNoneable(transitive, SkylarkNestedSet.class, "transitive")) {
+    for (Depset transitiveSet : listFromNoneable(transitive, Depset.class, "transitive")) {
       builder.addTransitive(transitiveSet);
     }
     return builder.build();
@@ -1084,13 +1083,13 @@
     }
   }
 
-  private static SkylarkNestedSet legacyDepsetConstructor(
+  private static Depset legacyDepsetConstructor(
       Object items, Order order, Object direct, Object transitive, Location loc)
       throws EvalException {
 
     if (transitive == Starlark.NONE && direct == Starlark.NONE) {
       // Legacy behavior.
-      return SkylarkNestedSet.of(order, items, loc);
+      return Depset.of(order, items, loc);
     }
 
     if (direct != Starlark.NONE && !isEmptySkylarkList(items)) {
@@ -1108,18 +1107,18 @@
       directElements = ((Sequence<?>) items).getContents(Object.class, "items");
     }
 
-    Iterable<SkylarkNestedSet> transitiveList;
+    Iterable<Depset> transitiveList;
     if (transitive != Starlark.NONE) {
       SkylarkType.checkType(transitive, Sequence.class, "transitive");
-      transitiveList = ((Sequence<?>) transitive).getContents(SkylarkNestedSet.class, "transitive");
+      transitiveList = ((Sequence<?>) transitive).getContents(Depset.class, "transitive");
     } else {
       transitiveList = ImmutableList.of();
     }
-    SkylarkNestedSet.Builder builder = SkylarkNestedSet.builder(order, loc);
+    Depset.Builder builder = Depset.builder(order, loc);
     for (Object directElement : directElements) {
       builder.addDirect(directElement);
     }
-    for (SkylarkNestedSet transitiveSet : transitiveList) {
+    for (Depset transitiveSet : transitiveList) {
       builder.addTransitive(transitiveSet);
     }
     return builder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java
index fe907f3..b6d8f3f 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkType.java
@@ -167,8 +167,8 @@
   /** The TUPLE type, that contains all Tuple-s */
   @AutoCodec static final Simple TUPLE = Simple.forClass(Tuple.class);
 
-  /** The SET type, that contains all SkylarkNestedSets, and the generic combinator for them */
-  @AutoCodec static final Simple SET = Simple.forClass(SkylarkNestedSet.class);
+  /** The SET type, that contains all Depsets, and the generic combinator for them */
+  @AutoCodec static final Simple SET = Simple.forClass(Depset.class);
 
   // Common subclasses of SkylarkType
 
@@ -297,7 +297,7 @@
   static class Combination extends SkylarkType {
     // For the moment, we can only combine a Simple type with a Simple type,
     // and the first one has to be a Java generic class,
-    // and in practice actually one of Sequence or SkylarkNestedSet
+    // and in practice actually one of Sequence or Depset
     private final SkylarkType genericType; // actually always a Simple, for now.
     private final SkylarkType argType; // not always Simple
 
@@ -514,7 +514,7 @@
   }
 
   // TODO(adonovan): eliminate this function: a value may belong to many types.
-  // This function is used to infer the type to use for a SkylarkNestedSet from its first
+  // This function is used to infer the type to use for a Depset from its first
   // element, but this may be unsound in general (e.g. in the presence of sum types).
   static SkylarkType of(Object object) {
     return of(object.getClass());
@@ -522,7 +522,7 @@
 
   /** Returns the type for a Java class. */
   public static SkylarkType of(Class<?> type) {
-    if (SkylarkNestedSet.class.isAssignableFrom(type)) { // just an optimization
+    if (Depset.class.isAssignableFrom(type)) { // just an optimization
       return SET;
     } else if (BaseFunction.class.isAssignableFrom(type)) {
       return new SkylarkFunctionType("unknown", TOP);
@@ -598,8 +598,8 @@
   // Utility functions regarding types
 
   private static SkylarkType getGenericArgType(Object value) {
-    if (value instanceof SkylarkNestedSet) {
-      return ((SkylarkNestedSet) value).getContentType();
+    if (value instanceof Depset) {
+      return ((Depset) value).getContentType();
     } else {
       return TOP;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
index ea2153d..95e82bc 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkThread.java
@@ -423,11 +423,9 @@
         if (value.equals(otherValue)) {
           continue;
         }
-        if (value instanceof SkylarkNestedSet) {
-          if (otherValue instanceof SkylarkNestedSet
-              && ((SkylarkNestedSet) value)
-                  .toCollection()
-                  .equals(((SkylarkNestedSet) otherValue).toCollection())) {
+        if (value instanceof Depset) {
+          if (otherValue instanceof Depset
+              && ((Depset) value).toCollection().equals(((Depset) otherValue).toCollection())) {
             continue;
           }
         } else if (value instanceof Dict) {
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkCommandLineApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkCommandLineApi.java
index 8c11461..4131014 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkCommandLineApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkCommandLineApi.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.skydoc.fakebuildapi;
 
 import com.google.devtools.build.lib.skylarkbuildapi.SkylarkCommandLineApi;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 
 /**
  * Fake implementation of {@link SkylarkCommandLineApi}.
@@ -23,7 +23,7 @@
 public class FakeSkylarkCommandLineApi implements SkylarkCommandLineApi {
 
   @Override
-  public String joinPaths(String separator, SkylarkNestedSet files) {
+  public String joinPaths(String separator, Depset files) {
     return "";
   }
 }
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java
index 539f495..9b53b22 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidNativeLibsInfo.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidNativeLibsInfoApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * Fake implementation of {@link AndroidNativeLibsInfoApi}.
@@ -27,7 +27,7 @@
 public class FakeAndroidNativeLibsInfo implements AndroidNativeLibsInfoApi<FileApi> {
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getNativeLibsForStarlark() {
+  public Depset /*<FileApi>*/ getNativeLibsForStarlark() {
     return null;
   }
 
@@ -51,8 +51,7 @@
       implements AndroidNativeLibsInfoApiProvider {
 
     @Override
-    public AndroidNativeLibsInfoApi<?> createInfo(SkylarkNestedSet nativeLibs)
-        throws EvalException {
+    public AndroidNativeLibsInfoApi<?> createInfo(Depset nativeLibs) throws EvalException {
       return new FakeAndroidNativeLibsInfo();
     }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java
index 3e974a9..8725750 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/android/FakeAndroidResourcesInfo.java
@@ -21,9 +21,9 @@
 import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidResourcesInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.android.ValidatedAndroidDataApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Fake implementation of {@link AndroidResourcesInfoApi}. */
 public class FakeAndroidResourcesInfo
@@ -52,53 +52,52 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<FakeValidatedAndroidDataApi>*/
-      getTransitiveAndroidResourcesForStarlark() {
+  public Depset /*<FakeValidatedAndroidDataApi>*/ getTransitiveAndroidResourcesForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FakeValidatedAndroidDataApi>*/ getDirectAndroidResourcesForStarlark() {
+  public Depset /*<FakeValidatedAndroidDataApi>*/ getDirectAndroidResourcesForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getTransitiveResourcesForStarlark() {
+  public Depset /*<FileApi>*/ getTransitiveResourcesForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getTransitiveManifestsForStarlark() {
+  public Depset /*<FileApi>*/ getTransitiveManifestsForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getTransitiveAapt2RTxtForStarlark() {
+  public Depset /*<FileApi>*/ getTransitiveAapt2RTxtForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getTransitiveAapt2ValidationArtifactsForStarlark() {
+  public Depset /*<FileApi>*/ getTransitiveAapt2ValidationArtifactsForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getTransitiveSymbolsBinForStarlark() {
+  public Depset /*<FileApi>*/ getTransitiveSymbolsBinForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getTransitiveCompiledSymbolsForStarlark() {
+  public Depset /*<FileApi>*/ getTransitiveCompiledSymbolsForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getTransitiveStaticLibForStarlark() {
+  public Depset /*<FileApi>*/ getTransitiveStaticLibForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getTransitiveRTxtForStarlark() {
+  public Depset /*<FileApi>*/ getTransitiveRTxtForStarlark() {
     return null;
   }
 
@@ -127,15 +126,15 @@
         Label label,
         FakeAndroidManifestInfoApi manifest,
         FileApi rTxt,
-        SkylarkNestedSet transitiveAndroidResources,
-        SkylarkNestedSet directAndroidResources,
-        SkylarkNestedSet transitiveResources,
-        SkylarkNestedSet transitiveManifests,
-        SkylarkNestedSet transitiveAapt2RTxt,
-        SkylarkNestedSet transitiveSymbolsBin,
-        SkylarkNestedSet transitiveCompiledSymbols,
-        SkylarkNestedSet transitiveStaticLib,
-        SkylarkNestedSet transitiveRTxt,
+        Depset transitiveAndroidResources,
+        Depset directAndroidResources,
+        Depset transitiveResources,
+        Depset transitiveManifests,
+        Depset transitiveAapt2RTxt,
+        Depset transitiveSymbolsBin,
+        Depset transitiveCompiledSymbols,
+        Depset transitiveStaticLib,
+        Depset transitiveRTxt,
         Object transitiveAapt2ValidationArtifacts)
         throws EvalException {
       return new FakeAndroidResourcesInfo();
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
index 3363827..cb3033d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeAppleDynamicFrameworkInfo.java
@@ -19,19 +19,19 @@
 import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleDynamicFrameworkInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.apple.ObjcProviderApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Fake implementation of {@link AppleDynamicFrameworkInfoApi}. */
 public class FakeAppleDynamicFrameworkInfo implements AppleDynamicFrameworkInfoApi<FileApi> {
 
   @Override
-  public SkylarkNestedSet /*<String>*/ getDynamicFrameworkDirs() {
+  public Depset /*<String>*/ getDynamicFrameworkDirs() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getDynamicFrameworkFiles() {
+  public Depset /*<FileApi>*/ getDynamicFrameworkFiles() {
     return null;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
index d463ed2..8727e65 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple/FakeObjcProvider.java
@@ -17,8 +17,8 @@
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.apple.ObjcProviderApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /**
  * Fake implementation of {@link ObjcProviderApi}.
@@ -26,32 +26,32 @@
 public class FakeObjcProvider implements ObjcProviderApi<FileApi> {
 
   @Override
-  public SkylarkNestedSet /*<String>*/ defineForStarlark() {
+  public Depset /*<String>*/ defineForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ dynamicFrameworkFileForStarlark() {
+  public Depset /*<FileApi>*/ dynamicFrameworkFileForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ exportedDebugArtifacts() {
+  public Depset /*<FileApi>*/ exportedDebugArtifacts() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet frameworkSearchPathOnly() {
+  public Depset frameworkSearchPathOnly() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ forceLoadLibrary() {
+  public Depset /*<FileApi>*/ forceLoadLibrary() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ headerForStarlark() {
+  public Depset /*<FileApi>*/ headerForStarlark() {
     return null;
   }
 
@@ -61,67 +61,67 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ importedLibrary() {
+  public Depset /*<FileApi>*/ importedLibrary() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet include() {
+  public Depset include() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet includeSystem() {
+  public Depset includeSystem() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet iquote() {
+  public Depset iquote() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ j2objcLibrary() {
+  public Depset /*<FileApi>*/ j2objcLibrary() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ jreLibrary() {
+  public Depset /*<FileApi>*/ jreLibrary() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ library() {
+  public Depset /*<FileApi>*/ library() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ linkInputs() {
+  public Depset /*<FileApi>*/ linkInputs() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ linkedBinary() {
+  public Depset /*<FileApi>*/ linkedBinary() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ linkmapFile() {
+  public Depset /*<FileApi>*/ linkmapFile() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ linkopt() {
+  public Depset /*<String>*/ linkopt() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ mergeZip() {
+  public Depset /*<FileApi>*/ mergeZip() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ moduleMap() {
+  public Depset /*<FileApi>*/ moduleMap() {
     return null;
   }
 
@@ -131,32 +131,32 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ multiArchDynamicLibraries() {
+  public Depset /*<FileApi>*/ multiArchDynamicLibraries() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ multiArchLinkedArchives() {
+  public Depset /*<FileApi>*/ multiArchLinkedArchives() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ multiArchLinkedBinaries() {
+  public Depset /*<FileApi>*/ multiArchLinkedBinaries() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ sdkDylib() {
+  public Depset /*<String>*/ sdkDylib() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet sdkFramework() {
+  public Depset sdkFramework() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ sourceForStarlark() {
+  public Depset /*<FileApi>*/ sourceForStarlark() {
     return null;
   }
 
@@ -166,37 +166,37 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ staticFrameworkFileForStarlark() {
+  public Depset /*<FileApi>*/ staticFrameworkFileForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ umbrellaHeader() {
+  public Depset /*<FileApi>*/ umbrellaHeader() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet weakSdkFramework() {
+  public Depset weakSdkFramework() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ dynamicFrameworkNamesForStarlark() {
+  public Depset /*<String>*/ dynamicFrameworkNamesForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ dynamicFrameworkPathsForStarlark() {
+  public Depset /*<String>*/ dynamicFrameworkPathsForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ staticFrameworkNamesForStarlark() {
+  public Depset /*<String>*/ staticFrameworkNamesForStarlark() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<String>*/ staticFrameworkPathsForStarlark() {
+  public Depset /*<String>*/ staticFrameworkPathsForStarlark() {
     return null;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
index 9e03434..374f726 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
@@ -31,8 +31,8 @@
 import com.google.devtools.build.lib.skylarkbuildapi.go.GoConfigurationApi;
 import com.google.devtools.build.lib.skylarkbuildapi.go.GoContextInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.go.GoPackageInfoApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Tuple;
 
 /** Fake implementation of {@link GoWrapCcHelperApi}. */
@@ -112,7 +112,7 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getGopackageFilesForStarlark(
+  public Depset /*<FileApi>*/ getGopackageFilesForStarlark(
       SkylarkRuleContextApi skylarkRuleContext, FileApi skylarkGopkg) {
     return null;
   }
@@ -125,8 +125,7 @@
   }
 
   @Override
-  public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes(
-      SkylarkRuleContextApi skylarkRuleContext) {
+  public Depset skylarkCollectTransitiveSwigIncludes(SkylarkRuleContextApi skylarkRuleContext) {
     return null;
   }
 
@@ -149,7 +148,7 @@
 
   @Override
   public WrapCcIncludeProviderApi getWrapCcIncludeProvider(
-      SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet swigIncludes) {
+      SkylarkRuleContextApi skylarkRuleContext, Depset swigIncludes) {
     return null;
   }
 
@@ -159,7 +158,7 @@
       CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain,
       FeatureConfigurationApi featureConfiguration,
       CcCompilationContextApi wrapperCcCompilationContext,
-      SkylarkNestedSet swigIncludes,
+      Depset swigIncludes,
       FileApi swigSource,
       Sequence<?> subParameters,
       FileApi ccFile,
@@ -167,7 +166,7 @@
       Sequence<?> outputFiles,
       Object outDir,
       Object javaDir,
-      SkylarkNestedSet auxiliaryInputs,
+      Depset auxiliaryInputs,
       String swigAttributeName,
       Object zipTool) {}
 }
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
index 5f74293..2c9ffcb 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
@@ -25,8 +25,8 @@
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcHelperApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.WrapCcIncludeProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Fake implementation of {@link PyWrapCcHelperApi}. */
 public class FakePyWrapCcHelper
@@ -46,14 +46,14 @@
   }
 
   @Override
-  public SkylarkNestedSet getTransitivePythonSources(
+  public Depset getTransitivePythonSources(
       SkylarkRuleContextApi skylarkRuleContext, FileApi pyFile) {
     return null;
   }
 
   @Override
   public RunfilesApi getPythonRunfiles(
-      SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet filesToBuild) {
+      SkylarkRuleContextApi skylarkRuleContext, Depset filesToBuild) {
     return null;
   }
 
@@ -71,8 +71,7 @@
   }
 
   @Override
-  public SkylarkNestedSet skylarkCollectTransitiveSwigIncludes(
-      SkylarkRuleContextApi skylarkRuleContext) {
+  public Depset skylarkCollectTransitiveSwigIncludes(SkylarkRuleContextApi skylarkRuleContext) {
     return null;
   }
 
@@ -83,7 +82,7 @@
 
   @Override
   public WrapCcIncludeProviderApi getWrapCcIncludeProvider(
-      SkylarkRuleContextApi skylarkRuleContext, SkylarkNestedSet swigIncludes) {
+      SkylarkRuleContextApi skylarkRuleContext, Depset swigIncludes) {
     return null;
   }
 
@@ -93,7 +92,7 @@
       CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain,
       FeatureConfigurationApi featureConfiguration,
       CcCompilationContextApi wrapperCcCompilationContext,
-      SkylarkNestedSet swigIncludes,
+      Depset swigIncludes,
       FileApi swigSource,
       Sequence<?> subParameters,
       FileApi ccFile,
@@ -101,7 +100,7 @@
       Sequence<?> outputFiles,
       Object outDir,
       Object javaDir,
-      SkylarkNestedSet auxiliaryInputs,
+      Depset auxiliaryInputs,
       String swigAttributeName,
       Object zipTool) {}
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
index 3bdab61..0c611de 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCommon.java
@@ -23,9 +23,9 @@
 import com.google.devtools.build.lib.skylarkbuildapi.SkylarkRuleContextApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaCommonApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaToolchainSkylarkApiProviderApi;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
@@ -156,8 +156,7 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<FileApi>*/ getCompileTimeJavaDependencyArtifacts(
-      FakeJavaInfo javaInfo) {
+  public Depset /*<FileApi>*/ getCompileTimeJavaDependencyArtifacts(FakeJavaInfo javaInfo) {
     return null;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java
index 70f6f0e..bf16380 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaInfo.java
@@ -21,9 +21,9 @@
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaRuleOutputJarsProviderApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
 
 /**
@@ -32,22 +32,22 @@
 public class FakeJavaInfo implements JavaInfoApi<FileApi> {
 
   @Override
-  public SkylarkNestedSet /*<File>*/ getTransitiveRuntimeJars() {
+  public Depset /*<File>*/ getTransitiveRuntimeJars() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet getTransitiveCompileTimeJars() {
+  public Depset getTransitiveCompileTimeJars() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet getCompileTimeJars() {
+  public Depset getCompileTimeJars() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet getFullCompileTimeJars() {
+  public Depset getFullCompileTimeJars() {
     return null;
   }
 
@@ -77,22 +77,22 @@
   }
 
   @Override
-  public SkylarkNestedSet /*<File>*/ getTransitiveDeps() {
+  public Depset /*<File>*/ getTransitiveDeps() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<File>*/ getTransitiveRuntimeDeps() {
+  public Depset /*<File>*/ getTransitiveRuntimeDeps() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<File>*/ getTransitiveSourceJars() {
+  public Depset /*<File>*/ getTransitiveSourceJars() {
     return null;
   }
 
   @Override
-  public SkylarkNestedSet /*<Label>*/ getTransitiveExports() {
+  public Depset /*<Label>*/ getTransitiveExports() {
     return null;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java
index f9c9219..55672b8 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaRuntimeInfoApi.java
@@ -17,8 +17,8 @@
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaRuntimeInfoApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 final class FakeJavaRuntimeInfoApi implements JavaRuntimeInfoApi {
 
@@ -43,7 +43,7 @@
   }
 
   @Override
-  public SkylarkNestedSet skylarkJavaBaseInputs() {
+  public Depset skylarkJavaBaseInputs() {
     return null;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainSkylarkApiProviderApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainSkylarkApiProviderApi.java
index 3f841f6..284b9e77 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainSkylarkApiProviderApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaToolchainSkylarkApiProviderApi.java
@@ -18,9 +18,9 @@
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaToolchainSkylarkApiProviderApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 final class FakeJavaToolchainSkylarkApiProviderApi implements JavaToolchainSkylarkApiProviderApi {
 
@@ -45,7 +45,7 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkBootclasspath() {
+  public Depset getSkylarkBootclasspath() {
     return null;
   }
 
@@ -55,7 +55,7 @@
   }
 
   @Override
-  public SkylarkNestedSet getSkylarkTools() {
+  public Depset getSkylarkTools() {
     return null;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java
index b495e04..aa93b32 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyInfo.java
@@ -18,14 +18,14 @@
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.python.PyInfoApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Fake implementation of {@link PyInfoApi}. */
 public class FakePyInfo implements PyInfoApi<FileApi> {
 
   @Override
-  public SkylarkNestedSet getTransitiveSources() {
+  public Depset getTransitiveSources() {
     return null;
   }
 
@@ -35,7 +35,7 @@
   }
 
   @Override
-  public SkylarkNestedSet getImports() {
+  public Depset getImports() {
     return null;
   }
 
@@ -57,7 +57,7 @@
 
     @Override
     public PyInfoApi<?> constructor(
-        SkylarkNestedSet transitiveSources,
+        Depset transitiveSources,
         boolean usesSharedLibraries,
         Object importsUncast,
         boolean hasPy2OnlySources,
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java
index 7ba31e7..8e7a2ba 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/python/FakePyRuntimeInfo.java
@@ -18,8 +18,8 @@
 import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.python.PyRuntimeInfoApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 
 /** Fake implementation of {@link PyRuntimeInfoApi}. */
 public class FakePyRuntimeInfo implements PyRuntimeInfoApi<FileApi> {
@@ -35,7 +35,7 @@
   }
 
   @Override
-  public SkylarkNestedSet getFilesForStarlark() {
+  public Depset getFilesForStarlark() {
     return null;
   }
 
diff --git a/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
index 1dc4b1f..2e9fe3d 100644
--- a/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
+++ b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
@@ -27,9 +27,9 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkGlobalLibrary;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.lib.util.Classpath;
@@ -224,7 +224,7 @@
   private static class MockClassWithContainerReturnValues implements SkylarkValue {
 
     @SkylarkCallable(name = "depset", doc = "depset")
-    public SkylarkNestedSet /*<Integer>*/ getNestedSet() {
+    public Depset /*<Integer>*/ getNestedSet() {
       return null;
     }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/TypeTest.java b/src/test/java/com/google/devtools/build/lib/packages/TypeTest.java
index 120e644..12b9468 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/TypeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/TypeTest.java
@@ -23,7 +23,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.syntax.Tuple;
 import com.google.devtools.build.lib.testutil.MoreAsserts;
@@ -277,9 +277,8 @@
 
   @Test
   public void testListDepsetConversion() throws Exception {
-    Object input = SkylarkNestedSet.of(
-        String.class,
-        NestedSetBuilder.create(Order.STABLE_ORDER, "a", "b", "c"));
+    Object input =
+        Depset.of(String.class, NestedSetBuilder.create(Order.STABLE_ORDER, "a", "b", "c"));
     Type.STRING_LIST.convert(input, null);
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
index 9781f68..9de3830 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
@@ -50,11 +50,11 @@
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.VariableWithValue;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.WithFeatureSet;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.StringValueParser;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.testutil.Scratch;
@@ -117,7 +117,7 @@
         ");");
 
     ConfiguredTarget r = getConfiguredTarget("//a:r");
-    SkylarkNestedSet allFiles = (SkylarkNestedSet) getMyInfoFromTarget(r).getValue("all_files");
+    Depset allFiles = (Depset) getMyInfoFromTarget(r).getValue("all_files");
     RuleContext ruleContext = getRuleContext(r);
     CcToolchainProvider toolchain =
         CppHelper.getToolchain(
@@ -161,8 +161,8 @@
         new SkylarkProvider.SkylarkKey(
             Label.create(r.getLabel().getPackageIdentifier(), "rule.bzl"), "CruleInfo");
     SkylarkInfo cruleInfo = (SkylarkInfo) r.get(key);
-    SkylarkNestedSet staticRuntimeLib = (SkylarkNestedSet) cruleInfo.getValue("static");
-    SkylarkNestedSet dynamicRuntimeLib = (SkylarkNestedSet) cruleInfo.getValue("dynamic");
+    Depset staticRuntimeLib = (Depset) cruleInfo.getValue("static");
+    Depset dynamicRuntimeLib = (Depset) cruleInfo.getValue("dynamic");
 
     assertThat(staticRuntimeLib.getSet(Artifact.class).toList()).isEmpty();
     assertThat(dynamicRuntimeLib.getSet(Artifact.class).toList()).isEmpty();
@@ -176,8 +176,8 @@
     invalidatePackages();
     r = getConfiguredTarget("//a:r");
     cruleInfo = (SkylarkInfo) r.get(key);
-    staticRuntimeLib = (SkylarkNestedSet) cruleInfo.getValue("static");
-    dynamicRuntimeLib = (SkylarkNestedSet) cruleInfo.getValue("dynamic");
+    staticRuntimeLib = (Depset) cruleInfo.getValue("static");
+    dynamicRuntimeLib = (Depset) cruleInfo.getValue("dynamic");
 
     RuleContext ruleContext = getRuleContext(r);
     CcToolchainProvider toolchain =
@@ -1119,7 +1119,7 @@
     StructImpl myInfo = getMyInfoFromTarget(getConfiguredTarget("//a:r"));
 
     List<Artifact> mergedHeaders =
-        ((SkylarkNestedSet) myInfo.getValue("merged_headers")).getSet(Artifact.class).toList();
+        ((Depset) myInfo.getValue("merged_headers")).getSet(Artifact.class).toList();
     assertThat(
             mergedHeaders.stream()
                 .map(Artifact::getFilename)
@@ -1127,28 +1127,24 @@
         .containsAtLeast("header.h", "dep1.h", "dep2.h");
 
     List<String> mergedDefines =
-        ((SkylarkNestedSet) myInfo.getValue("merged_defines")).getSet(String.class).toList();
+        ((Depset) myInfo.getValue("merged_defines")).getSet(String.class).toList();
     assertThat(mergedDefines).containsAtLeast("MYDEFINE", "DEP1", "DEP2");
     assertThat(mergedDefines).doesNotContain("LOCALDEP1");
 
     List<String> mergedSystemIncludes =
-        ((SkylarkNestedSet) myInfo.getValue("merged_system_includes"))
-            .getSet(String.class)
-            .toList();
+        ((Depset) myInfo.getValue("merged_system_includes")).getSet(String.class).toList();
     assertThat(mergedSystemIncludes).containsAtLeast("foo/bar", "a/dep1/baz", "a/dep2/qux");
 
     List<String> mergedIncludes =
-        ((SkylarkNestedSet) myInfo.getValue("merged_includes")).getSet(String.class).toList();
+        ((Depset) myInfo.getValue("merged_includes")).getSet(String.class).toList();
     assertThat(mergedIncludes).contains("baz/qux");
 
     List<String> mergedQuoteIncludes =
-        ((SkylarkNestedSet) myInfo.getValue("merged_quote_includes")).getSet(String.class).toList();
+        ((Depset) myInfo.getValue("merged_quote_includes")).getSet(String.class).toList();
     assertThat(mergedQuoteIncludes).contains("quux/abc");
 
     List<String> mergedFrameworkIncludes =
-        ((SkylarkNestedSet) myInfo.getValue("merged_framework_includes"))
-            .getSet(String.class)
-            .toList();
+        ((Depset) myInfo.getValue("merged_framework_includes")).getSet(String.class).toList();
     assertThat(mergedFrameworkIncludes).contains("fuux/fgh");
   }
 
@@ -1297,7 +1293,7 @@
     ConfiguredTarget a = getConfiguredTarget("//a:a");
     StructImpl info = ((StructImpl) getMyInfoFromTarget(a).getValue("info"));
 
-    SkylarkNestedSet librariesToLink = info.getValue("libraries_to_link", SkylarkNestedSet.class);
+    Depset librariesToLink = info.getValue("libraries_to_link", Depset.class);
     assertThat(
             librariesToLink.toCollection(LibraryToLink.class).stream()
                 .filter(x -> x.getStaticLibrary() != null)
@@ -1339,15 +1335,14 @@
         (Sequence<String>) info.getValue("user_link_flags", Sequence.class);
     assertThat(userLinkFlags.getImmutableList())
         .containsExactly("-la", "-lc2", "-DEP2_LINKOPT", "-lc1", "-lc2", "-DEP1_LINKOPT");
-    SkylarkNestedSet additionalInputs = info.getValue("additional_inputs", SkylarkNestedSet.class);
+    Depset additionalInputs = info.getValue("additional_inputs", Depset.class);
     assertThat(
             additionalInputs.toCollection(Artifact.class).stream()
                 .map(x -> x.getFilename())
                 .collect(ImmutableList.toImmutableList()))
         .containsExactly("b.lds", "d.lds");
     Collection<LibraryToLink> librariesToLink =
-        info.getValue("libraries_to_link", SkylarkNestedSet.class)
-            .toCollection(LibraryToLink.class);
+        info.getValue("libraries_to_link", Depset.class).toCollection(LibraryToLink.class);
     assertThat(
             librariesToLink.stream()
                 .filter(x -> x.getStaticLibrary() != null)
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
index 087a09b..9d102cf 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
@@ -32,8 +32,8 @@
 import com.google.devtools.build.lib.packages.SkylarkProvider.SkylarkKey;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.testutil.TestConstants;
 import com.google.devtools.build.lib.util.FileType;
 import java.util.ArrayList;
@@ -315,12 +315,10 @@
                 new SkylarkKey(
                     Label.parseAbsolute("//java/test:extension.bzl", ImmutableMap.of()), "result"));
 
-    SkylarkNestedSet transitiveRuntimeJars =
-        ((SkylarkNestedSet) info.getValue("transitive_runtime_jars"));
-    SkylarkNestedSet transitiveCompileTimeJars =
-        ((SkylarkNestedSet) info.getValue("transitive_compile_time_jars"));
-    SkylarkNestedSet compileJars = ((SkylarkNestedSet) info.getValue("compile_jars"));
-    SkylarkNestedSet fullCompileJars = ((SkylarkNestedSet) info.getValue("full_compile_jars"));
+    Depset transitiveRuntimeJars = ((Depset) info.getValue("transitive_runtime_jars"));
+    Depset transitiveCompileTimeJars = ((Depset) info.getValue("transitive_compile_time_jars"));
+    Depset compileJars = ((Depset) info.getValue("compile_jars"));
+    Depset fullCompileJars = ((Depset) info.getValue("full_compile_jars"));
     @SuppressWarnings("unchecked")
     Sequence<Artifact> sourceJars = ((Sequence<Artifact>) info.getValue("source_jars"));
     JavaRuleOutputJarsProvider outputs = ((JavaRuleOutputJarsProvider) info.getValue("outputs"));
@@ -1069,16 +1067,16 @@
         .containsExactly("com.google.process.stuff");
     assertThat(
             Iterables.transform(
-                ((SkylarkNestedSet) info.getValue("processor_classpath")).toCollection(),
+                ((Depset) info.getValue("processor_classpath")).toCollection(),
                 o -> ((Artifact) o).getFilename()))
         .containsExactly("libplugin.jar", "libplugin_dep.jar");
-    assertThat(((SkylarkNestedSet) info.getValue("transitive_class_jars")).toCollection())
+    assertThat(((Depset) info.getValue("transitive_class_jars")).toCollection())
         .hasSize(3); // from to_be_processed, dep, and export
-    assertThat(((SkylarkNestedSet) info.getValue("transitive_class_jars")).toCollection())
+    assertThat(((Depset) info.getValue("transitive_class_jars")).toCollection())
         .contains(info.getValue("class_jar"));
-    assertThat(((SkylarkNestedSet) info.getValue("transitive_source_jars")).toCollection())
+    assertThat(((Depset) info.getValue("transitive_source_jars")).toCollection())
         .hasSize(3); // from to_be_processed, dep, and export
-    assertThat(((SkylarkNestedSet) info.getValue("transitive_source_jars")).toCollection())
+    assertThat(((Depset) info.getValue("transitive_source_jars")).toCollection())
         .contains(info.getValue("source_jar"));
   }
 
@@ -1123,11 +1121,9 @@
                 new SkylarkKey(
                     Label.parseAbsolute("//java/test:extension.bzl", ImmutableMap.of()), "result"));
 
-    SkylarkNestedSet rawMyCompileJars = (SkylarkNestedSet) (info.getValue("compile_jars"));
-    SkylarkNestedSet rawMyTransitiveRuntimeJars =
-        (SkylarkNestedSet) (info.getValue("transitive_runtime_jars"));
-    SkylarkNestedSet rawMyTransitiveCompileTimeJars =
-        (SkylarkNestedSet) (info.getValue("transitive_compile_time_jars"));
+    Depset rawMyCompileJars = (Depset) info.getValue("compile_jars");
+    Depset rawMyTransitiveRuntimeJars = (Depset) info.getValue("transitive_runtime_jars");
+    Depset rawMyTransitiveCompileTimeJars = (Depset) info.getValue("transitive_compile_time_jars");
 
     NestedSet<Artifact> myCompileJars = rawMyCompileJars.getSet(Artifact.class);
     NestedSet<Artifact> myTransitiveRuntimeJars = rawMyTransitiveRuntimeJars.getSet(Artifact.class);
@@ -1379,7 +1375,7 @@
                 new SkylarkKey(
                     Label.parseAbsolute("//foo:extension.bzl", ImmutableMap.of()), "result"));
 
-    SkylarkNestedSet sourceJars = (SkylarkNestedSet) info.getValue("property");
+    Depset sourceJars = (Depset) info.getValue("property");
 
     assertThat(prettyArtifactNames(sourceJars.getSet(Artifact.class)))
         .containsExactly(
@@ -1412,7 +1408,7 @@
                 new SkylarkKey(
                     Label.parseAbsolute("//foo:extension.bzl", ImmutableMap.of()), "result"));
 
-    SkylarkNestedSet sourceJars = (SkylarkNestedSet) info.getValue("property");
+    Depset sourceJars = (Depset) info.getValue("property");
 
     assertThat(prettyArtifactNames(sourceJars.getSet(Artifact.class)))
         .containsExactly(
@@ -1445,7 +1441,7 @@
                 new SkylarkKey(
                     Label.parseAbsolute("//foo:extension.bzl", ImmutableMap.of()), "result"));
 
-    SkylarkNestedSet sourceJars = (SkylarkNestedSet) info.getValue("property");
+    Depset sourceJars = (Depset) info.getValue("property");
 
     assertThat(prettyArtifactNames(sourceJars.getSet(Artifact.class)))
         .containsExactly(
@@ -1478,7 +1474,7 @@
                 new SkylarkKey(
                     Label.parseAbsolute("//foo:extension.bzl", ImmutableMap.of()), "result"));
 
-    SkylarkNestedSet exports = (SkylarkNestedSet) (info.getValue("property"));
+    Depset exports = (Depset) info.getValue("property");
 
     assertThat(exports.getSet(Label.class))
         .containsExactly(Label.parseAbsolute("//foo:my_java_lib_b", ImmutableMap.of()));
@@ -2275,7 +2271,7 @@
     useConfiguration(
         "--javabase=//a:jvm", "--extra_toolchains=//a:all", "--platforms=//a:platform");
     ConfiguredTarget ct = getConfiguredTarget("//a:r");
-    SkylarkNestedSet files = (SkylarkNestedSet) ct.get("files");
+    Depset files = (Depset) ct.get("files");
     assertThat(prettyArtifactNames(files.toCollection(Artifact.class))).containsExactly("a/a.txt");
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java
index b612509..197af1d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java
@@ -25,7 +25,7 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Root;
@@ -115,8 +115,7 @@
   public void directFieldsAddFromSkylark() throws Exception {
     ImmutableList<Artifact> artifacts =
         ImmutableList.of(createArtifact("/foo"), createArtifact("/bar"));
-    SkylarkNestedSet set =
-        SkylarkNestedSet.of(Artifact.class, NestedSetBuilder.wrap(Order.STABLE_ORDER, artifacts));
+    Depset set = Depset.of(Artifact.class, NestedSetBuilder.wrap(Order.STABLE_ORDER, artifacts));
     ObjcProvider.Builder builder = objcProviderBuilder();
     builder.addElementsFromSkylark(ObjcProvider.SOURCE, set);
     builder.addElementsFromSkylark(ObjcProvider.HEADER, set);
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
index a487583..8765086 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
@@ -30,8 +30,8 @@
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.rules.apple.AppleToolchain;
 import com.google.devtools.build.lib.rules.apple.DottedVersion;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkSemantics;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.List;
@@ -96,8 +96,8 @@
 
     ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
     StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
-    SkylarkNestedSet skylarkLibraries = (SkylarkNestedSet) myInfo.getValue("found_libs");
-    SkylarkNestedSet skylarkHdrs = (SkylarkNestedSet) myInfo.getValue("found_hdrs");
+    Depset skylarkLibraries = (Depset) myInfo.getValue("found_libs");
+    Depset skylarkHdrs = (Depset) myInfo.getValue("found_hdrs");
 
     assertThat(ActionsTestUtil.baseArtifactNames(skylarkLibraries.getSet(Artifact.class)))
         .contains("liblib.a");
@@ -137,7 +137,7 @@
 
     ConfiguredTarget skylarkTarget = getConfiguredTarget("//test:test");
     StructImpl myInfo = getMyInfoFromTarget(skylarkTarget);
-    SkylarkNestedSet defineSet = (SkylarkNestedSet) myInfo.getValue("define");
+    Depset defineSet = (Depset) myInfo.getValue("define");
 
     assertThat(defineSet.getSet(String.class)).containsExactly("mock_define");
   }
@@ -1089,8 +1089,7 @@
         "   srcs = ['a.m'],",
         ")");
     ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
-    SkylarkNestedSet emptyValue =
-        (SkylarkNestedSet) getMyInfoFromTarget(skylarkTarget).getValue("empty_value");
+    Depset emptyValue = (Depset) getMyInfoFromTarget(skylarkTarget).getValue("empty_value");
     assertThat(emptyValue.toCollection()).isEmpty();
   }
 
@@ -1127,8 +1126,7 @@
 
     ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target");
 
-    SkylarkNestedSet sdkFrameworks =
-        (SkylarkNestedSet) getMyInfoFromTarget(skylarkTarget).getValue("sdk_frameworks");
+    Depset sdkFrameworks = (Depset) getMyInfoFromTarget(skylarkTarget).getValue("sdk_frameworks");
     assertThat(sdkFrameworks.toCollection()).containsAtLeast("Accelerate", "GLKit");
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/python/PyStructUtilsTest.java b/src/test/java/com/google/devtools/build/lib/rules/python/PyStructUtilsTest.java
index 8b141e8..c7c6aaa 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/python/PyStructUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/python/PyStructUtilsTest.java
@@ -26,8 +26,8 @@
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.packages.StructProvider;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.testutil.FoundationTestCase;
 import com.google.devtools.build.lib.testutil.MoreAsserts.ThrowingRunnable;
 import com.google.devtools.build.lib.vfs.Root;
@@ -64,11 +64,11 @@
     Map<String, Object> fields = new LinkedHashMap<>();
     fields.put(
         PyStructUtils.TRANSITIVE_SOURCES,
-        SkylarkNestedSet.of(Artifact.class, NestedSetBuilder.emptySet(Order.COMPILE_ORDER)));
+        Depset.of(Artifact.class, NestedSetBuilder.emptySet(Order.COMPILE_ORDER)));
     fields.put(PyStructUtils.USES_SHARED_LIBRARIES, false);
     fields.put(
         PyStructUtils.IMPORTS,
-        SkylarkNestedSet.of(String.class, NestedSetBuilder.emptySet(Order.COMPILE_ORDER)));
+        Depset.of(String.class, NestedSetBuilder.emptySet(Order.COMPILE_ORDER)));
     fields.put(PyStructUtils.HAS_PY2_ONLY_SOURCES, false);
     fields.put(PyStructUtils.HAS_PY3_ONLY_SOURCES, false);
     fields.putAll(overrides);
@@ -105,8 +105,7 @@
     NestedSet<Artifact> sources = NestedSetBuilder.create(Order.COMPILE_ORDER, dummyArtifact);
     StructImpl info =
         makeStruct(
-            ImmutableMap.of(
-                PyStructUtils.TRANSITIVE_SOURCES, SkylarkNestedSet.of(Artifact.class, sources)));
+            ImmutableMap.of(PyStructUtils.TRANSITIVE_SOURCES, Depset.of(Artifact.class, sources)));
     assertThat(PyStructUtils.getTransitiveSources(info)).isSameInstanceAs(sources);
   }
 
@@ -129,8 +128,7 @@
     NestedSet<Artifact> sources = NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
     StructImpl info =
         makeStruct(
-            ImmutableMap.of(
-                PyStructUtils.TRANSITIVE_SOURCES, SkylarkNestedSet.of(Artifact.class, sources)));
+            ImmutableMap.of(PyStructUtils.TRANSITIVE_SOURCES, Depset.of(Artifact.class, sources)));
     assertThrowsEvalExceptionContaining(
         () -> PyStructUtils.getTransitiveSources(info),
         "Incompatible depset order for 'transitive_sources': expected 'default' or 'postorder', "
@@ -160,8 +158,7 @@
   public void getImports_Good() throws Exception {
     NestedSet<String> imports = NestedSetBuilder.create(Order.COMPILE_ORDER, "abc");
     StructImpl info =
-        makeStruct(
-            ImmutableMap.of(PyStructUtils.IMPORTS, SkylarkNestedSet.of(String.class, imports)));
+        makeStruct(ImmutableMap.of(PyStructUtils.IMPORTS, Depset.of(String.class, imports)));
     assertThat(PyStructUtils.getImports(info)).isSameInstanceAs(imports);
   }
 
@@ -231,12 +228,12 @@
     // Assert using struct operations, not PyStructUtils accessors, which aren't necessarily trusted
     // to be correct.
     assertHasOrderAndContainsExactly(
-        ((SkylarkNestedSet) info.getValue(PyStructUtils.TRANSITIVE_SOURCES)).getSet(Artifact.class),
+        ((Depset) info.getValue(PyStructUtils.TRANSITIVE_SOURCES)).getSet(Artifact.class),
         Order.COMPILE_ORDER,
         dummyArtifact);
     assertThat((Boolean) info.getValue(PyStructUtils.USES_SHARED_LIBRARIES)).isTrue();
     assertHasOrderAndContainsExactly(
-        ((SkylarkNestedSet) info.getValue(PyStructUtils.IMPORTS)).getSet(String.class),
+        ((Depset) info.getValue(PyStructUtils.IMPORTS)).getSet(String.class),
         Order.COMPILE_ORDER,
         "abc");
     assertThat((Boolean) info.getValue(PyStructUtils.HAS_PY2_ONLY_SOURCES)).isTrue();
@@ -253,8 +250,7 @@
     // to be correct.
     assertThat((Boolean) info.getValue(PyStructUtils.USES_SHARED_LIBRARIES)).isFalse();
     assertHasOrderAndContainsExactly(
-        ((SkylarkNestedSet) info.getValue(PyStructUtils.IMPORTS)).getSet(String.class),
-        Order.COMPILE_ORDER);
+        ((Depset) info.getValue(PyStructUtils.IMPORTS)).getSet(String.class), Order.COMPILE_ORDER);
     assertThat((Boolean) info.getValue(PyStructUtils.HAS_PY2_ONLY_SOURCES)).isFalse();
     assertThat((Boolean) info.getValue(PyStructUtils.HAS_PY3_ONLY_SOURCES)).isFalse();
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java b/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
index 783b58b..c68f367 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/trimming/TrimmableTestConfigurationFragments.java
@@ -61,9 +61,9 @@
 import com.google.devtools.build.lib.rules.repository.WorkspaceBaseRule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.testutil.Scratch;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.common.options.Option;
@@ -679,8 +679,8 @@
           ToolchainInfo toolchainInfo = toolchainContext.forToolchainType(toolchainType);
           try {
             filesToBuild.addTransitive(
-                ((SkylarkNestedSet) toolchainInfo.getValue("files")).getSet(Artifact.class));
-          } catch (EvalException | SkylarkNestedSet.TypeException ex) {
+                ((Depset) toolchainInfo.getValue("files")).getSet(Artifact.class));
+          } catch (EvalException | Depset.TypeException ex) {
             throw new AssertionError(ex);
           }
         }
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java
index 5314287..12f75ae 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java
@@ -45,8 +45,8 @@
 import com.google.devtools.build.lib.rules.java.JavaConfiguration;
 import com.google.devtools.build.lib.rules.objc.ObjcProtoProvider;
 import com.google.devtools.build.lib.skyframe.AspectValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import java.util.Arrays;
 import org.junit.Before;
@@ -292,18 +292,18 @@
     ConfiguredAspect configuredAspect = aspectValue.getConfiguredAspect();
     assertThat(configuredAspect).isNotNull();
     Object names = configuredAspect.get("target_labels");
-    assertThat(names).isInstanceOf(SkylarkNestedSet.class);
+    assertThat(names).isInstanceOf(Depset.class);
     assertThat(
             transform(
-                ((SkylarkNestedSet) names).toCollection(),
+                ((Depset) names).toCollection(),
                 o -> {
                   assertThat(o).isInstanceOf(Label.class);
                   return o.toString();
                 }))
         .containsExactly("//test:xxx", "//test:yyy");
     Object ruleKinds = configuredAspect.get("rule_kinds");
-    assertThat(ruleKinds).isInstanceOf(SkylarkNestedSet.class);
-    assertThat(((SkylarkNestedSet) ruleKinds).toCollection()).containsExactly("java_library");
+    assertThat(ruleKinds).isInstanceOf(Depset.class);
+    assertThat(((Depset) ruleKinds).toCollection()).containsExactly("java_library");
   }
 
   @Test
@@ -349,12 +349,14 @@
     ConfiguredAspect configuredAspect = aspectValue.getConfiguredAspect();
     assertThat(configuredAspect).isNotNull();
     Object nameSet = configuredAspect.get("target_labels");
-    ImmutableList<String> names = ImmutableList.copyOf(transform(
-        ((SkylarkNestedSet) nameSet).toCollection(),
-        o -> {
-          assertThat(o).isInstanceOf(Label.class);
-          return ((Label) o).getName();
-        }));
+    ImmutableList<String> names =
+        ImmutableList.copyOf(
+            transform(
+                ((Depset) nameSet).toCollection(),
+                o -> {
+                  assertThat(o).isInstanceOf(Label.class);
+                  return ((Label) o).getName();
+                }));
 
     assertThat(names).containsAtLeast("xxx", "yyy");
     // Third is the C++ toolchain; its name changes between Blaze and Bazel.
@@ -594,10 +596,10 @@
     assertThat(getLabelsToBuild(analysisResult)).containsExactly("//test:xxx");
     ConfiguredTarget target = analysisResult.getTargetsToBuild().iterator().next();
     Object names = target.get("rule_deps");
-    assertThat(names).isInstanceOf(SkylarkNestedSet.class);
+    assertThat(names).isInstanceOf(Depset.class);
     assertThat(
             transform(
-                ((SkylarkNestedSet) names).toCollection(),
+                ((Depset) names).toCollection(),
                 o -> {
                   assertThat(o).isInstanceOf(Label.class);
                   return o.toString();
@@ -1640,7 +1642,7 @@
   private void buildTargetAndCheckRuleInfo(String... expectedLabels) throws Exception {
     AnalysisResult result = update(ImmutableList.<String>of(), "//test:r2");
     ConfiguredTarget configuredTarget = result.getTargetsToBuild().iterator().next();
-    SkylarkNestedSet ruleInfoValue = (SkylarkNestedSet) configuredTarget.get("rule_info");
+    Depset ruleInfoValue = (Depset) configuredTarget.get("rule_info");
     assertThat(ruleInfoValue.getSet(String.class))
         .containsExactlyElementsIn(Arrays.asList(expectedLabels));
   }
@@ -1712,8 +1714,7 @@
         "main_rule(name = 'main', deps = [':rbin', ':rgen'])");
     AnalysisResult analysisResult = update(ImmutableList.<String>of(), "//foo:main");
     ConfiguredTarget target = analysisResult.getTargetsToBuild().iterator().next();
-    NestedSet<Artifact> aspectFiles =
-        ((SkylarkNestedSet) target.get("aspect_files")).getSet(Artifact.class);
+    NestedSet<Artifact> aspectFiles = ((Depset) target.get("aspect_files")).getSet(Artifact.class);
     assertThat(transform(aspectFiles, Artifact::getFilename))
         .containsExactly("aspect-output-rbin", "aspect-output-rgen");
     for (Artifact aspectFile : aspectFiles) {
@@ -1900,10 +1901,10 @@
     ConfiguredAspect configuredAspect = aspectValue.getConfiguredAspect();
     assertThat(configuredAspect).isNotNull();
     Object names = configuredAspect.get("target_labels");
-    assertThat(names).isInstanceOf(SkylarkNestedSet.class);
+    assertThat(names).isInstanceOf(Depset.class);
     assertThat(
             transform(
-                ((SkylarkNestedSet) names).toCollection(),
+                ((Depset) names).toCollection(),
                 o -> {
                   assertThat(o).isInstanceOf(Label.class);
                   return ((Label) o).getName();
@@ -2582,7 +2583,7 @@
     SkylarkKey pCollector =
         new SkylarkKey(Label.parseAbsolute("//test:aspect.bzl", ImmutableMap.of()), "PCollector");
     StructImpl collector = (StructImpl) configuredAspect.get(pCollector);
-    assertThat(((SkylarkNestedSet) collector.getValue("visited")).toCollection())
+    assertThat(((Depset) collector.getValue("visited")).toCollection())
         .containsExactly(
             Label.parseAbsolute("//test:referenced_from_aspect_only", ImmutableMap.of()),
             Label.parseAbsolute("//test:bar", ImmutableMap.of()),
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
index 433b989..91c8041 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
@@ -55,8 +55,8 @@
 import com.google.devtools.build.lib.skyframe.PackageFunction;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
 import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -228,7 +228,7 @@
         OutputGroupInfo.get(getConfiguredTarget("//test/skylark:lib"))
             .getOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL);
     ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
-    SkylarkNestedSet result = (SkylarkNestedSet) getMyInfoFromTarget(myTarget).getValue("result");
+    Depset result = (Depset) getMyInfoFromTarget(myTarget).getValue("result");
     assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
     assertThat(OutputGroupInfo.get(myTarget).getOutputGroup("my_group"))
         .containsExactlyElementsIn(hiddenTopLevelArtifacts);
@@ -254,7 +254,7 @@
         OutputGroupInfo.get(getConfiguredTarget("//test/skylark:lib"))
             .getOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL);
     ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
-    SkylarkNestedSet result = (SkylarkNestedSet) getMyInfoFromTarget(myTarget).getValue("result");
+    Depset result = (Depset) getMyInfoFromTarget(myTarget).getValue("result");
     assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
     assertThat(OutputGroupInfo.get(myTarget).getOutputGroup("my_group"))
         .containsExactlyElementsIn(hiddenTopLevelArtifacts);
@@ -288,7 +288,7 @@
             .getOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL);
     ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
     StructImpl myInfo = getMyInfoFromTarget(myTarget);
-    SkylarkNestedSet result = (SkylarkNestedSet) myInfo.getValue("result");
+    Depset result = (Depset) myInfo.getValue("result");
     assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
     assertThat(OutputGroupInfo.get(myTarget).getOutputGroup("my_group"))
         .containsExactlyElementsIn(hiddenTopLevelArtifacts);
@@ -322,7 +322,7 @@
         OutputGroupInfo.get(getConfiguredTarget("//test/skylark:lib"))
             .getOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL);
     ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
-    SkylarkNestedSet result = (SkylarkNestedSet) getMyInfoFromTarget(myTarget).getValue("result");
+    Depset result = (Depset) getMyInfoFromTarget(myTarget).getValue("result");
     assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
     assertThat(OutputGroupInfo.get(myTarget).getOutputGroup("my_group"))
         .containsExactlyElementsIn(hiddenTopLevelArtifacts);
@@ -351,7 +351,7 @@
         OutputGroupInfo.get(getConfiguredTarget("//test/skylark:lib"))
             .getOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL);
     ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
-    SkylarkNestedSet result = (SkylarkNestedSet) getMyInfoFromTarget(myTarget).getValue("result");
+    Depset result = (Depset) getMyInfoFromTarget(myTarget).getValue("result");
     assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
     assertThat(OutputGroupInfo.get(myTarget).getOutputGroup("my_group"))
         .containsExactlyElementsIn(hiddenTopLevelArtifacts);
@@ -380,7 +380,7 @@
         OutputGroupInfo.get(getConfiguredTarget("//test/skylark:lib"))
             .getOutputGroup(OutputGroupInfo.HIDDEN_TOP_LEVEL);
     ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
-    SkylarkNestedSet result = (SkylarkNestedSet) getMyInfoFromTarget(myTarget).getValue("result");
+    Depset result = (Depset) getMyInfoFromTarget(myTarget).getValue("result");
     assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
     assertThat(OutputGroupInfo.get(myTarget).getOutputGroup("my_group"))
         .containsExactlyElementsIn(hiddenTopLevelArtifacts);
@@ -834,7 +834,7 @@
 
     assertThat(
             ActionsTestUtil.baseArtifactNames(
-                ((SkylarkNestedSet) getMyInfoFromTarget(target).getValue("provider_key"))
+                ((Depset) getMyInfoFromTarget(target).getValue("provider_key"))
                     .getSet(Artifact.class)))
         .containsExactly("a.txt");
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index ad00cd9..9d650c2 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -47,12 +47,12 @@
 import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction;
 import com.google.devtools.build.lib.skylark.util.SkylarkTestCase;
 import com.google.devtools.build.lib.syntax.ClassObject;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.ParserInput;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.StarlarkFile;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.syntax.SyntaxError;
@@ -1260,7 +1260,7 @@
   @Test
   public void testNsetGoodCompositeItem() throws Exception {
     exec("def func():", "  return depset([struct(a='a')])", "s = func()");
-    Collection<?> result = ((SkylarkNestedSet) lookup("s")).toCollection();
+    Collection<?> result = ((Depset) lookup("s")).toCollection();
     assertThat(result).hasSize(1);
     assertThat(result.iterator().next()).isInstanceOf(StructImpl.class);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
index fb134dd..83b6949 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
@@ -47,10 +47,10 @@
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
 import com.google.devtools.build.lib.rules.python.PyProviderUtils;
 import com.google.devtools.build.lib.skylark.util.SkylarkTestCase;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.Dict;
 import com.google.devtools.build.lib.syntax.Mutability;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
@@ -1924,8 +1924,8 @@
     update("action1", eval("ruleContext.attr.dep[Actions].by_file[file1]"));
     update("action2", eval("ruleContext.attr.dep[Actions].by_file[file2]"));
 
-    assertThat(eval("action1.inputs")).isInstanceOf(SkylarkNestedSet.class);
-    assertThat(eval("action1.outputs")).isInstanceOf(SkylarkNestedSet.class);
+    assertThat(eval("action1.inputs")).isInstanceOf(Depset.class);
+    assertThat(eval("action1.outputs")).isInstanceOf(Depset.class);
 
     assertThat(eval("action1.argv")).isEqualTo(Starlark.NONE);
     assertThat(eval("action2.content")).isEqualTo(Starlark.NONE);
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
index 83d6fec..e6615d0 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
@@ -58,11 +58,11 @@
 import com.google.devtools.build.lib.skylarkinterface.Param;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkGlobalLibrary;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.Printer;
 import com.google.devtools.build.lib.syntax.Sequence;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.syntax.Starlark;
 import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.syntax.StarlarkThread;
@@ -750,7 +750,7 @@
         "    executable = 'dummy',",
         ")");
     assertArtifactFilenames(
-        ((SkylarkNestedSet) lookup("inputs")).getSet(Artifact.class),
+        ((Depset) lookup("inputs")).getSet(Artifact.class),
         "mytool.sh",
         "mytool",
         "foo_Smytool" + OsUtils.executableExtension() + "-runfiles",
@@ -992,7 +992,7 @@
   public void testFilesForRuleConfiguredTarget() throws Exception {
     setRuleContext(createRuleContext("//foo:foo"));
     Object result = eval("ruleContext.attr.srcs[0].files");
-    assertThat(ActionsTestUtil.baseNamesOf(((SkylarkNestedSet) result).getSet(Artifact.class)))
+    assertThat(ActionsTestUtil.baseNamesOf(((Depset) result).getSet(Artifact.class)))
         .isEqualTo("a.txt");
   }
 
@@ -1072,7 +1072,7 @@
         .containsExactly(
             "File:[/workspace[source]]test/run.file", "File:[/workspace[source]]test/run2.file");
 
-    assertThat(myInfo.getValue("rule_files")).isInstanceOf(SkylarkNestedSet.class);
+    assertThat(myInfo.getValue("rule_files")).isInstanceOf(Depset.class);
     assertThat(myInfo.getValue("rule_files_to_run")).isInstanceOf(FilesToRunProvider.class);
     assertThat(myInfo.getValue("rule_file_executable")).isEqualTo(Starlark.NONE);
   }
@@ -1152,7 +1152,7 @@
         .containsExactly(
             "File:[/workspace[source]]test/run.file", "File:[/workspace[source]]test/run2.file");
 
-    assertThat(myInfo.getValue("rule_files")).isInstanceOf(SkylarkNestedSet.class);
+    assertThat(myInfo.getValue("rule_files")).isInstanceOf(Depset.class);
     assertThat(myInfo.getValue("rule_files_to_run")).isInstanceOf(FilesToRunProvider.class);
   }
 
@@ -1243,7 +1243,7 @@
                 String::valueOf))
         .isEmpty();
 
-    assertThat(myInfo.getValue("file_files")).isInstanceOf(SkylarkNestedSet.class);
+    assertThat(myInfo.getValue("file_files")).isInstanceOf(Depset.class);
     assertThat(myInfo.getValue("file_files_to_run")).isInstanceOf(FilesToRunProvider.class);
   }
 
@@ -1796,7 +1796,7 @@
   public void testFilesForFileConfiguredTarget() throws Exception {
     setRuleContext(createRuleContext("//foo:bar"));
     Object result = eval("ruleContext.attr.srcs[0].files");
-    assertThat(ActionsTestUtil.baseNamesOf(((SkylarkNestedSet) result).getSet(Artifact.class)))
+    assertThat(ActionsTestUtil.baseNamesOf(((Depset) result).getSet(Artifact.class)))
         .isEqualTo("libjl.jar");
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerializationTest.java b/src/test/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerializationTest.java
index 4570ccb..74707f3 100644
--- a/src/test/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerializationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylarkdebug/server/DebuggerSerializationTest.java
@@ -26,9 +26,9 @@
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
+import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.EvalUtils;
 import com.google.devtools.build.lib.syntax.Printer;
-import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -61,8 +61,7 @@
   @Test
   public void testSimpleNestedSet() {
     Set<String> children = ImmutableSet.of("a", "b");
-    SkylarkNestedSet set =
-        SkylarkNestedSet.of(Object.class, NestedSetBuilder.stableOrder().addAll(children).build());
+    Depset set = Depset.of(Object.class, NestedSetBuilder.stableOrder().addAll(children).build());
 
     Value value = getValueProto("name", set);
 
@@ -89,8 +88,8 @@
     NestedSet<String> innerNestedSet =
         NestedSetBuilder.<String>stableOrder().add("inner1").add("inner2").build();
     ImmutableSet<String> directChildren = ImmutableSet.of("a", "b");
-    SkylarkNestedSet outerSet =
-        SkylarkNestedSet.of(
+    Depset outerSet =
+        Depset.of(
             String.class,
             NestedSetBuilder.<String>linkOrder()
                 .addAll(directChildren)
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkNestedSetTest.java b/src/test/java/com/google/devtools/build/lib/syntax/DepsetTest.java
similarity index 88%
rename from src/test/java/com/google/devtools/build/lib/syntax/SkylarkNestedSetTest.java
rename to src/test/java/com/google/devtools/build/lib/syntax/DepsetTest.java
index ea49524..1047dbd 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkNestedSetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/DepsetTest.java
@@ -28,16 +28,14 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-/**
- * Tests for SkylarkNestedSet.
- */
+/** Tests for Depset. */
 @RunWith(JUnit4.class)
-public class SkylarkNestedSetTest extends EvaluationTestCase {
+public class DepsetTest extends EvaluationTestCase {
 
   @Test
   public void testConstructor() throws Exception {
     exec("s = depset(order='default')");
-    assertThat(lookup("s")).isInstanceOf(SkylarkNestedSet.class);
+    assertThat(lookup("s")).isInstanceOf(Depset.class);
   }
 
   @Test
@@ -72,7 +70,7 @@
     exec("s = depset(['a', 'b'])");
     assertThat(get("s").getSet(String.class)).containsExactly("a", "b").inOrder();
     assertThat(get("s").getSet(Object.class)).containsExactly("a", "b").inOrder();
-    assertThrows(SkylarkNestedSet.TypeException.class, () -> get("s").getSet(Integer.class));
+    assertThrows(Depset.TypeException.class, () -> get("s").getSet(Integer.class));
   }
 
   @Test
@@ -80,7 +78,7 @@
     exec("s = depset(direct = ['a', 'b'])");
     assertThat(get("s").getSet(String.class)).containsExactly("a", "b").inOrder();
     assertThat(get("s").getSet(Object.class)).containsExactly("a", "b").inOrder();
-    assertThrows(SkylarkNestedSet.TypeException.class, () -> get("s").getSet(Integer.class));
+    assertThrows(Depset.TypeException.class, () -> get("s").getSet(Integer.class));
   }
 
   @Test
@@ -88,7 +86,7 @@
     exec("s = depset(items = ['a', 'b'])");
     assertThat(get("s").getSet(String.class)).containsExactly("a", "b").inOrder();
     assertThat(get("s").getSet(Object.class)).containsExactly("a", "b").inOrder();
-    assertThrows(SkylarkNestedSet.TypeException.class, () -> get("s").getSet(Integer.class));
+    assertThrows(Depset.TypeException.class, () -> get("s").getSet(Integer.class));
   }
 
 
@@ -98,7 +96,7 @@
     assertThat(get("s").toCollection(String.class)).containsExactly("a", "b").inOrder();
     assertThat(get("s").toCollection(Object.class)).containsExactly("a", "b").inOrder();
     assertThat(get("s").toCollection()).containsExactly("a", "b").inOrder();
-    assertThrows(SkylarkNestedSet.TypeException.class, () -> get("s").toCollection(Integer.class));
+    assertThrows(Depset.TypeException.class, () -> get("s").toCollection(Integer.class));
   }
 
   @Test
@@ -107,7 +105,7 @@
     assertThat(get("s").toCollection(String.class)).containsExactly("a", "b").inOrder();
     assertThat(get("s").toCollection(Object.class)).containsExactly("a", "b").inOrder();
     assertThat(get("s").toCollection()).containsExactly("a", "b").inOrder();
-    assertThrows(SkylarkNestedSet.TypeException.class, () -> get("s").toCollection(Integer.class));
+    assertThrows(Depset.TypeException.class, () -> get("s").toCollection(Integer.class));
   }
 
   @Test
@@ -116,7 +114,7 @@
     assertThat(get("s").toCollection(String.class)).containsExactly("a", "b").inOrder();
     assertThat(get("s").toCollection(Object.class)).containsExactly("a", "b").inOrder();
     assertThat(get("s").toCollection()).containsExactly("a", "b").inOrder();
-    assertThrows(SkylarkNestedSet.TypeException.class, () -> get("s").toCollection(Integer.class));
+    assertThrows(Depset.TypeException.class, () -> get("s").toCollection(Integer.class));
   }
 
   @Test
@@ -316,7 +314,7 @@
 
   private void assertContainsInOrder(String statement, Object... expectedElements)
       throws Exception {
-    assertThat(((SkylarkNestedSet) eval(statement)).toCollection())
+    assertThat(((Depset) eval(statement)).toCollection())
         .containsExactly(expectedElements)
         .inOrder();
   }
@@ -369,7 +367,7 @@
         "  s2 = s1.union(['b'])",
         "  return s1",
         "s = func()");
-    assertThat(((SkylarkNestedSet) lookup("s")).toCollection()).isEqualTo(ImmutableList.of("a"));
+    assertThat(((Depset) lookup("s")).toCollection()).isEqualTo(ImmutableList.of("a"));
   }
 
   @Test
@@ -381,7 +379,7 @@
         "  t += ['a']",
         "  return t",
         "s = func()");
-    assertThat(get("s")).isInstanceOf(SkylarkNestedSet.class);
+    assertThat(get("s")).isInstanceOf(Depset.class);
     assertThat(get("s").toCollection()).containsExactly("a");
   }
 
@@ -473,9 +471,8 @@
     assertThat(lookup("x")).isEqualTo("depset([2, 4, 6, 3, 5], order = \"topological\")");
   }
 
-  @SuppressWarnings("unchecked")
-  private SkylarkNestedSet get(String varname) throws Exception {
-    return (SkylarkNestedSet) lookup(varname);
+  private Depset get(String varname) throws Exception {
+    return (Depset) lookup(varname);
   }
 
   @Test
@@ -496,15 +493,15 @@
     //  (b) at least one order is "default"
 
     for (Order first : Order.values()) {
-      SkylarkNestedSet s1 = SkylarkNestedSet.of(first, Tuple.of("1", "11"), null);
+      Depset s1 = Depset.of(first, Tuple.of("1", "11"), null);
 
       for (Order second : Order.values()) {
-        SkylarkNestedSet s2 = SkylarkNestedSet.of(second, Tuple.of("2", "22"), null);
+        Depset s2 = Depset.of(second, Tuple.of("2", "22"), null);
 
         boolean compatible = true;
 
         try {
-          SkylarkNestedSet.of(s1, s2, null);
+          Depset.of(s1, s2, null);
         } catch (Exception ex) {
           compatible = false;
         }
@@ -527,10 +524,10 @@
     MergeStrategy strategy =
         new MergeStrategy() {
           @Override
-          public SkylarkNestedSet merge(SkylarkNestedSet[] sets) throws Exception {
-            SkylarkNestedSet union = SkylarkNestedSet.of(sets[0], sets[1], null);
-            union = SkylarkNestedSet.of(union, sets[2], null);
-            union = SkylarkNestedSet.of(union, sets[3], null);
+          public Depset merge(Depset[] sets) throws Exception {
+            Depset union = Depset.of(sets[0], sets[1], null);
+            union = Depset.of(union, sets[2], null);
+            union = Depset.of(union, sets[3], null);
 
             return union;
           }
@@ -548,10 +545,10 @@
     MergeStrategy strategy =
         new MergeStrategy() {
           @Override
-          public SkylarkNestedSet merge(SkylarkNestedSet[] sets) throws Exception {
-            SkylarkNestedSet leftUnion = SkylarkNestedSet.of(sets[0], sets[1], null);
-            SkylarkNestedSet rightUnion = SkylarkNestedSet.of(sets[2], sets[3], null);
-            SkylarkNestedSet union = SkylarkNestedSet.of(leftUnion, rightUnion, null);
+          public Depset merge(Depset[] sets) throws Exception {
+            Depset leftUnion = Depset.of(sets[0], sets[1], null);
+            Depset rightUnion = Depset.of(sets[2], sets[3], null);
+            Depset union = Depset.of(leftUnion, rightUnion, null);
 
             return union;
           }
@@ -569,10 +566,10 @@
     MergeStrategy strategy =
         new MergeStrategy() {
           @Override
-          public SkylarkNestedSet merge(SkylarkNestedSet[] sets) throws Exception {
-            SkylarkNestedSet union = SkylarkNestedSet.of(sets[2], sets[3], null);
-            union = SkylarkNestedSet.of(sets[1], union, null);
-            union = SkylarkNestedSet.of(sets[0], union, null);
+          public Depset merge(Depset[] sets) throws Exception {
+            Depset union = Depset.of(sets[2], sets[3], null);
+            union = Depset.of(sets[1], union, null);
+            union = Depset.of(sets[0], union, null);
 
             return union;
           }
@@ -598,14 +595,14 @@
   }
 
   private interface MergeStrategy {
-    SkylarkNestedSet merge(SkylarkNestedSet[] sets) throws Exception;
+    Depset merge(Depset[] sets) throws Exception;
   }
 
   private void runComplexOrderTest(
       MergeStrategy strategy, List<String> preOrder, List<String> postOrder) throws Exception {
     Map<Order, List<String>> expected = createExpectedMap(preOrder, postOrder);
     for (Order order : Order.values()) {
-      SkylarkNestedSet union = strategy.merge(makeFourSets(order));
+      Depset union = strategy.merge(makeFourSets(order));
       assertThat(union.toCollection()).containsExactlyElementsIn(expected.get(order)).inOrder();
     }
   }
@@ -625,12 +622,12 @@
     return order == Order.STABLE_ORDER || order == Order.COMPILE_ORDER;
   }
 
-  private SkylarkNestedSet[] makeFourSets(Order order) throws Exception {
-    return new SkylarkNestedSet[] {
-      SkylarkNestedSet.of(order, Tuple.of("1", "11"), null),
-      SkylarkNestedSet.of(order, Tuple.of("2", "22"), null),
-      SkylarkNestedSet.of(order, Tuple.of("3", "33"), null),
-      SkylarkNestedSet.of(order, Tuple.of("4", "44"), null)
+  private Depset[] makeFourSets(Order order) throws Exception {
+    return new Depset[] {
+      Depset.of(order, Tuple.of("1", "11"), null),
+      Depset.of(order, Tuple.of("2", "22"), null),
+      Depset.of(order, Tuple.of("3", "33"), null),
+      Depset.of(order, Tuple.of("4", "44"), null)
     };
   }
 }
