Add toList() calls for iteration over NestedSet (part 1)

This is in preparation for making NestedSet *not* implement Iterable anymore.

Change-Id: Ic60d9683eb7f32f9edd0653956d3407fcdef8d6b

Closes #10412.

Change-Id: Ic60d9683eb7f32f9edd0653956d3407fcdef8d6b
PiperOrigin-RevId: 285718807
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PrerequisiteArtifacts.java b/src/main/java/com/google/devtools/build/lib/analysis/PrerequisiteArtifacts.java
index 9d62428..9289a18 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/PrerequisiteArtifacts.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/PrerequisiteArtifacts.java
@@ -17,7 +17,6 @@
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -59,7 +58,7 @@
     }
     Set<Artifact> result = new LinkedHashSet<>();
     for (FileProvider target : prerequisites) {
-      Iterables.addAll(result, target.getFilesToBuild());
+      result.addAll(target.getFilesToBuild().toList());
     }
     return new PrerequisiteArtifacts(ruleContext, attributeName, ImmutableList.copyOf(result));
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 0810a03..a2b2ca0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -1548,7 +1548,7 @@
   public static boolean isVisible(Label label, TransitiveInfoCollection prerequisite) {
     // Check visibility attribute
     for (PackageGroupContents specification :
-        prerequisite.getProvider(VisibilityProvider.class).getVisibility()) {
+        prerequisite.getProvider(VisibilityProvider.class).getVisibility().toList()) {
       if (specification.containsPackage(label.getPackageIdentifier())) {
         return true;
       }
@@ -2018,15 +2018,15 @@
       // If we performed this check when allowedFileTypes == NO_FILE this would
       // always throw an error in those cases
       if (allowedFileTypes != FileTypeSet.NO_FILE) {
-        Iterable<Artifact> artifacts =
+        NestedSet<Artifact> artifacts =
             prerequisite.getConfiguredTarget().getProvider(FileProvider.class).getFilesToBuild();
-        if (attribute.isSingleArtifact() && Iterables.size(artifacts) != 1) {
+        if (attribute.isSingleArtifact() && !artifacts.isSingleton()) {
           attributeError(
               attribute.getName(),
               "'" + prerequisite.getTarget().getLabel() + "' must produce a single file");
           return;
         }
-        for (Artifact sourceArtifact : artifacts) {
+        for (Artifact sourceArtifact : artifacts.toList()) {
           if (allowedFileTypes.apply(sourceArtifact.getFilename())) {
             return;
           }
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 b2af011..b8cea4a 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
@@ -649,9 +649,9 @@
     NestedSetBuilder<Artifact> allArtifacts = NestedSetBuilder.stableOrder();
     allArtifacts
         .addTransitive(unconditionalArtifacts)
-        .addAll(Iterables.transform(symlinks, TO_ARTIFACT))
-        .addAll(Iterables.transform(rootSymlinks, TO_ARTIFACT));
-    for (PruningManifest manifest : getPruningManifests()) {
+        .addAll(Iterables.transform(symlinks.toList(), TO_ARTIFACT))
+        .addAll(Iterables.transform(rootSymlinks.toList(), TO_ARTIFACT));
+    for (PruningManifest manifest : getPruningManifests().toList()) {
       allArtifacts.addTransitive(manifest.getCandidateRunfiles());
     }
     return allArtifacts.build();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
index a5a81f4..4d9f809 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/SourceManifestAction.java
@@ -155,7 +155,7 @@
    */
   public static NestedSet<Artifact> getDependencies(Runfiles runfiles) {
     NestedSetBuilder<Artifact> builder = NestedSetBuilder.stableOrder();
-    for (Runfiles.PruningManifest manifest : runfiles.getPruningManifests()) {
+    for (Runfiles.PruningManifest manifest : runfiles.getPruningManifests().toList()) {
       builder.add(manifest.getManifestFile());
     }
     return builder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWritePathsFileAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWritePathsFileAction.java
index 3387e81..0470b5c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWritePathsFileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/LazyWritePathsFileAction.java
@@ -76,7 +76,7 @@
 
   private String getContents() {
     StringBuilder stringBuilder = new StringBuilder();
-    for (Artifact file : files) {
+    for (Artifact file : files.toList()) {
       if (file.isSourceArtifact() || includeDerivedArtifacts) {
         stringBuilder.append(file.getRootRelativePathString());
         stringBuilder.append("\n");
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
index ed1fd24..346308c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
@@ -643,7 +643,7 @@
     // words, the removed environment is no good, but some subset of it may be.
     for (EnvironmentWithGroup depEnv :
         depEnvironments.getRefinedEnvironments().getGroupedEnvironments()) {
-      for (Label fulfiller : depEnv.group().getFulfillers(depEnv.environment())) {
+      for (Label fulfiller : depEnv.group().getFulfillers(depEnv.environment()).toList()) {
         if (prunedEnvironmentsFromThisDep.contains(fulfiller)) {
           refinedEnvironmentsSoFar.add(depEnv);
         }
@@ -792,7 +792,7 @@
         // If the actual environments include members from the expected environment's group, we
         // need to either find the environment itself or another one that transitively fulfills it.
         if (actualEnvironmentLabels.contains(environment)
-            || intersect(actualEnvironmentLabels, group.getFulfillers(environment))) {
+            || intersect(actualEnvironmentLabels, group.getFulfillers(environment).toList())) {
           isSatisfied = true;
         }
       } else {
@@ -800,7 +800,7 @@
         // the group's defaults are implicitly included. So we need to check those defaults for
         // either the expected environment or another environment that transitively fulfills it.
         if (group.isDefault(environment)
-            || intersect(group.getFulfillers(environment), group.getDefaults())) {
+            || intersect(group.getFulfillers(environment).toList(), group.getDefaults())) {
           isSatisfied = true;
         }
       }
@@ -816,7 +816,8 @@
       if (!expectedEnvironments.getGroups().contains(group)) {
         for (Label expectedDefault : group.getDefaults()) {
           if (!actualEnvironmentLabels.contains(expectedDefault)
-              && !intersect(actualEnvironmentLabels, group.getFulfillers(expectedDefault))) {
+              && !intersect(
+                  actualEnvironmentLabels, group.getFulfillers(expectedDefault).toList())) {
             missingEnvironments.add(expectedDefault);
           }
         }
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 ee0309c..4c72629 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
@@ -502,7 +502,7 @@
     } else {
       NestedSet<Artifact> inputSet = ((Depset) inputs).getSetFromParam(Artifact.class, "inputs");
       builder.addTransitiveInputs(inputSet);
-      inputArtifacts = inputSet;
+      inputArtifacts = inputSet.toList();
     }
 
     List<Artifact> outputArtifacts = outputs.getContents(Artifact.class, "outputs");
@@ -536,7 +536,7 @@
       if (toolsUnchecked instanceof Sequence) {
         toolsIterable = ((Sequence<?>) toolsUnchecked).getContents(Object.class, "tools");
       } else {
-        toolsIterable = ((Depset) toolsUnchecked).getSet();
+        toolsIterable = ((Depset) toolsUnchecked).getSet().toList();
       }
       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 9872741..ffc11be 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
@@ -28,6 +28,6 @@
     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.
-    return Artifact.joinExecPaths(separator, artifacts);
+    return Artifact.joinExecPaths(separator, artifacts.toList());
   }
 }
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 8d9ba30..1caa9a1 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
@@ -1066,7 +1066,7 @@
     // TODO(lberki): This flattens a NestedSet.
     // However, we can't turn this into a Depset because it's an incompatible change to
     // Skylark.
-    Iterables.addAll(inputs, helper.getResolvedTools());
+    inputs.addAll(helper.getResolvedTools().toList());
 
     ImmutableMap<String, String> executionRequirements =
         ImmutableMap.copyOf(
@@ -1174,7 +1174,7 @@
     for (TransitiveInfoCollection current : knownLabels) {
       builder.put(
           AliasProvider.getDependencyLabel(current),
-          ImmutableList.copyOf(current.getProvider(FileProvider.class).getFilesToBuild()));
+          current.getProvider(FileProvider.class).getFilesToBuild().toList());
     }
 
     return builder.build();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java
index 0c7af11..95244b4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/BaselineCoverageAction.java
@@ -66,7 +66,7 @@
 
   private Iterable<String> getInstrumentedFilePathStrings() {
     List<String> result = new ArrayList<>();
-    for (Artifact instrumentedFile : instrumentedFiles) {
+    for (Artifact instrumentedFile : instrumentedFiles.toList()) {
       result.add(instrumentedFile.getExecPathString());
     }
     return result;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFileManifestAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFileManifestAction.java
index 69ab77f..b242c16 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFileManifestAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFileManifestAction.java
@@ -70,7 +70,7 @@
       public void writeOutputFile(OutputStream out) throws IOException {
         // Sort the exec paths before writing them out.
         String[] fileNames =
-            Iterables.toArray(Iterables.transform(files, TO_EXEC_PATH), String.class);
+            Iterables.toArray(Iterables.transform(files.toList(), TO_EXEC_PATH), String.class);
         Arrays.sort(fileNames);
         try (Writer writer = new OutputStreamWriter(out, ISO_8859_1)) {
           for (String name : fileNames) {
@@ -86,7 +86,7 @@
   protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) {
     fp.addString(GUID);
     // Not sorting here is probably cheaper, though it might lead to unnecessary re-execution.
-    fp.addStrings(Iterables.transform(files, TO_EXEC_PATH));
+    fp.addStrings(Iterables.transform(files.toList(), TO_EXEC_PATH));
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesCollector.java b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesCollector.java
index 4bd6348..98348c1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesCollector.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/InstrumentedFilesCollector.java
@@ -166,7 +166,7 @@
         if (!spec.splitLists && dep.get(InstrumentedFilesInfo.SKYLARK_CONSTRUCTOR) != null) {
           continue;
         }
-        for (Artifact artifact : dep.getProvider(FileProvider.class).getFilesToBuild()) {
+        for (Artifact artifact : dep.getProvider(FileProvider.class).getFilesToBuild().toList()) {
           if (artifact.isSourceArtifact() &&
               spec.instrumentedFileTypes.matches(artifact.getFilename())) {
             localSourcesBuilder.add(artifact);