Remove remaining calls to `getOrderedValuesAndExceptions` and tests.

After this, all that remains is unused implementations.

PiperOrigin-RevId: 485928424
Change-Id: Idfa158fc1dfed3d13f1b23b55d23867b5db5b956
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
index e7d8956..a5d0d95 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
@@ -24,7 +24,7 @@
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import javax.annotation.Nullable;
 
 /**
@@ -104,15 +104,16 @@
     } else {
       packageAndMaybeConfiguration = ImmutableSet.of(packageKey, configurationKeyMaybe);
     }
-    SkyframeIterableResult packageAndMaybeConfigurationValues =
-        env.getOrderedValuesAndExceptions(packageAndMaybeConfiguration);
+    SkyframeLookupResult packageAndMaybeConfigurationValues =
+        env.getValuesAndExceptions(packageAndMaybeConfiguration);
     // Don't test env.valuesMissing(), because values may already be missing from the caller.
-    PackageValue packageValue = (PackageValue) packageAndMaybeConfigurationValues.next();
+    PackageValue packageValue = (PackageValue) packageAndMaybeConfigurationValues.get(packageKey);
     if (packageValue == null) {
       return null;
     }
     if (configurationKeyMaybe != null) {
-      configuration = (BuildConfigurationValue) packageAndMaybeConfigurationValues.next();
+      configuration =
+          (BuildConfigurationValue) packageAndMaybeConfigurationValues.get(configurationKeyMaybe);
       if (configuration == null) {
         return null;
       }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConstraintValueLookupUtil.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConstraintValueLookupUtil.java
index a295a7c..dbe9325 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConstraintValueLookupUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConstraintValueLookupUtil.java
@@ -24,6 +24,7 @@
 import com.google.devtools.build.lib.server.FailureDetails.Toolchain.Code;
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
 import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.ArrayList;
 import java.util.List;
 import javax.annotation.Nullable;
@@ -36,7 +37,7 @@
       Iterable<ConfiguredTargetKey> constraintValueKeys, Environment env)
       throws InterruptedException, InvalidConstraintValueException {
 
-    SkyframeIterableResult values = env.getOrderedValuesAndExceptions(constraintValueKeys);
+    SkyframeLookupResult values = env.getValuesAndExceptions(constraintValueKeys);
     boolean valuesMissing = env.valuesMissing();
     List<ConstraintValueInfo> constraintValues = valuesMissing ? null : new ArrayList<>();
     for (ConfiguredTargetKey key : constraintValueKeys) {
@@ -59,13 +60,12 @@
    */
   @Nullable
   private static ConstraintValueInfo findConstraintValueInfo(
-      ConfiguredTargetKey key, SkyframeIterableResult values)
-      throws InvalidConstraintValueException {
-
+      ConfiguredTargetKey key, SkyframeLookupResult values) throws InvalidConstraintValueException {
     try {
       ConfiguredTargetValue ctv =
           (ConfiguredTargetValue)
-              values.nextOrThrow(
+              values.getOrThrow(
+                  key,
                   ConfiguredValueCreationException.class,
                   NoSuchThingException.class,
                   ActionConflictException.class);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
index 4852dcd..8ede80d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
@@ -36,7 +36,7 @@
 import com.google.devtools.build.lib.vfs.RootedPath;
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
 import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -199,23 +199,23 @@
         ImmutableSet.copyOf(
             Iterables.filter(ignoredSubdirectories, path -> path.startsWith(directory)));
 
-    SkyframeIterableResult recursivePackageValues =
-        env.getOrderedValuesAndExceptions(
-            Iterables.transform(
-                roots,
-                r ->
-                    RecursivePkgValue.key(
-                        repository,
-                        RootedPath.toRootedPath(r, directory),
-                        filteredIgnoredSubdirectories)));
+    Iterable<RecursivePkgValue.Key> recursivePackageKeys =
+        Iterables.transform(
+            roots,
+            r ->
+                RecursivePkgValue.key(
+                    repository,
+                    RootedPath.toRootedPath(r, directory),
+                    filteredIgnoredSubdirectories));
+    SkyframeLookupResult recursivePackageValues = env.getValuesAndExceptions(recursivePackageKeys);
     NoSuchPackageException firstNspe = null;
-    while (recursivePackageValues.hasNext()) {
+    for (RecursivePkgValue.Key key : recursivePackageKeys) {
       RecursivePkgValue lookup;
       try {
         lookup =
             (RecursivePkgValue)
-                recursivePackageValues.nextOrThrow(
-                    NoSuchPackageException.class, ProcessPackageDirectoryException.class);
+                recursivePackageValues.getOrThrow(
+                    key, NoSuchPackageException.class, ProcessPackageDirectoryException.class);
       } catch (NoSuchPackageException e) {
         // NoSuchPackageException can happen during error bubbling in a no-keep-going build.
         if (firstNspe == null) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index a8e4ee4..fbed054 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -77,7 +77,6 @@
 import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
 import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
 import java.io.IOException;
@@ -286,10 +285,10 @@
       throws InternalInconsistentFilesystemException, FileSymlinkException, InterruptedException {
     checkState(Iterables.all(depKeys, SkyFunctions.isSkyFunction(SkyFunctions.GLOB)), depKeys);
     FileSymlinkException arbitraryFse = null;
-    SkyframeIterableResult skyframeIterableResult = env.getOrderedValuesAndExceptions(depKeys);
-    while (skyframeIterableResult.hasNext()) {
+    SkyframeLookupResult result = env.getValuesAndExceptions(depKeys);
+    for (SkyKey key : depKeys) {
       try {
-        skyframeIterableResult.nextOrThrow(IOException.class, BuildFileNotFoundException.class);
+        result.getOrThrow(key, IOException.class, BuildFileNotFoundException.class);
       } catch (InconsistentFilesystemException e) {
         throw new InternalInconsistentFilesystemException(packageIdentifier, e);
       } catch (FileSymlinkException e) {
@@ -725,11 +724,12 @@
       Environment env, List<BzlLoadValue.Key> keys)
       throws InterruptedException, BzlLoadFailedException {
     List<BzlLoadValue> bzlLoads = Lists.newArrayListWithExpectedSize(keys.size());
-    SkyframeIterableResult starlarkLookupResults = env.getOrderedValuesAndExceptions(keys);
-    for (int i = 0; i < keys.size(); i++) {
+    SkyframeLookupResult starlarkLookupResults = env.getValuesAndExceptions(keys);
+    for (BzlLoadValue.Key key : keys) {
       // TODO(adonovan): if get fails, report the source location
       // in the corresponding programLoads[i] (see caller).
-      bzlLoads.add((BzlLoadValue) starlarkLookupResults.nextOrThrow(BzlLoadFailedException.class));
+      bzlLoads.add(
+          (BzlLoadValue) starlarkLookupResults.getOrThrow(key, BzlLoadFailedException.class));
     }
     return env.valuesMissing() ? null : bzlLoads;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PlatformLookupUtil.java b/src/main/java/com/google/devtools/build/lib/skyframe/PlatformLookupUtil.java
index 8cf6d10..429a3bb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PlatformLookupUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PlatformLookupUtil.java
@@ -35,6 +35,7 @@
 import com.google.devtools.build.lib.server.FailureDetails.Toolchain.Code;
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
 import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.HashMap;
 import java.util.Map;
 import javax.annotation.Nullable;
@@ -51,7 +52,7 @@
       return null;
     }
 
-    SkyframeIterableResult values = env.getOrderedValuesAndExceptions(platformKeys);
+    SkyframeLookupResult values = env.getValuesAndExceptions(platformKeys);
     boolean valuesMissing = env.valuesMissing();
     Map<ConfiguredTargetKey, PlatformInfo> platforms = valuesMissing ? null : new HashMap<>();
     for (ConfiguredTargetKey key : platformKeys) {
@@ -80,12 +81,13 @@
             .map(PackageValue::key)
             .collect(toImmutableSet());
 
-    SkyframeIterableResult values = env.getOrderedValuesAndExceptions(packageKeys);
+    SkyframeLookupResult values = env.getValuesAndExceptions(packageKeys);
     boolean valuesMissing = env.valuesMissing();
     Map<PackageIdentifier, Package> packages = valuesMissing ? null : new HashMap<>();
-    while (values.hasNext()) {
+    for (PackageValue.Key packageKey : packageKeys) {
       try {
-        PackageValue packageValue = (PackageValue) values.nextOrThrow(NoSuchPackageException.class);
+        PackageValue packageValue =
+            (PackageValue) values.getOrThrow(packageKey, NoSuchPackageException.class);
         if (!valuesMissing && packageValue != null) {
           packages.put(packageValue.getPackage().getPackageIdentifier(), packageValue.getPackage());
         }
@@ -125,13 +127,13 @@
    * InvalidPlatformException} is thrown.
    */
   @Nullable
-  private static PlatformInfo findPlatformInfo(
-      ConfiguredTargetKey key, SkyframeIterableResult values) throws InvalidPlatformException {
-
+  private static PlatformInfo findPlatformInfo(ConfiguredTargetKey key, SkyframeLookupResult values)
+      throws InvalidPlatformException {
     try {
       ConfiguredTargetValue ctv =
           (ConfiguredTargetValue)
-              values.nextOrThrow(
+              values.getOrThrow(
+                  key,
                   ConfiguredValueCreationException.class,
                   NoSuchThingException.class,
                   ActionConflictException.class);
@@ -191,10 +193,6 @@
       super(formatError(label, DEFAULT_ERROR), e);
     }
 
-    InvalidPlatformException(Label label, String error) {
-      super(formatError(label, error));
-    }
-
     @Override
     protected Code getDetailedCode() {
       return Code.INVALID_PLATFORM_VALUE;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java
index e2e158a..f240475 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java
@@ -34,7 +34,7 @@
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import javax.annotation.Nullable;
 
 /**
@@ -103,7 +103,7 @@
     RepositoryMapping mainRepoMapping = repositoryMappingValue.getRepositoryMapping();
     ImmutableList<SkyKey> skyKeys = getSkyKeys(skyKey, eventHandler, mainRepoMapping);
 
-    SkyframeIterableResult tokensByKey = env.getOrderedValuesAndExceptions(skyKeys);
+    SkyframeLookupResult tokensByKey = env.getValuesAndExceptions(skyKeys);
     if (env.valuesMissing()) {
       return null;
     }
@@ -111,7 +111,8 @@
     for (SkyKey key : skyKeys) {
       try {
         SkyValue value =
-            tokensByKey.nextOrThrow(
+            tokensByKey.getOrThrow(
+                key,
                 TargetParsingException.class,
                 ProcessPackageDirectoryException.class,
                 InconsistentFilesystemException.class);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
index 45c09b1..6700411 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
@@ -27,7 +27,7 @@
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import com.google.errorprone.annotations.ForOverride;
 import java.util.Map;
 import javax.annotation.Nullable;
@@ -145,7 +145,7 @@
     Iterable<SkyKey> childDeps = processPackageDirectoryResult.getChildDeps();
     ConsumerT consumer = getInitialConsumer();
 
-    SkyframeIterableResult dependentSkyValues;
+    SkyframeLookupResult dependentSkyValues;
     if (processPackageDirectoryResult.packageExists()) {
       PathFragment rootRelativePath = recursivePkgKey.getRootedPath().getRootRelativePath();
       SkyKey packageErrorMessageKey =
@@ -155,13 +155,13 @@
       // NoSuchPackageException. Since we don't catch such an exception here, this SkyFunction will
       // return immediately with a missing value, and the NoSuchPackageException will propagate up.
       dependentSkyValues =
-          env.getOrderedValuesAndExceptions(
+          env.getValuesAndExceptions(
               Iterables.concat(ImmutableList.of(packageErrorMessageKey), childDeps));
       if (env.valuesMissing()) {
         return null;
       }
       PackageErrorMessageValue pkgErrorMessageValue =
-          (PackageErrorMessageValue) dependentSkyValues.next();
+          (PackageErrorMessageValue) dependentSkyValues.get(packageErrorMessageKey);
       if (pkgErrorMessageValue == null) {
         return null;
       }
@@ -185,15 +185,15 @@
           throw new IllegalStateException(pkgErrorMessageValue.getResult().toString());
       }
     } else {
-      dependentSkyValues = env.getOrderedValuesAndExceptions(childDeps);
+      dependentSkyValues = env.getValuesAndExceptions(childDeps);
       if (env.valuesMissing()) {
-      return null;
-    }
+        return null;
+      }
     }
     ImmutableMap.Builder<SkyKey, SkyValue> subdirectorySkyValuesFromDeps =
         ImmutableMap.builderWithExpectedSize(Iterables.size(childDeps));
     for (SkyKey skyKey : childDeps) {
-      SkyValue skyValue = dependentSkyValues.next();
+      SkyValue skyValue = dependentSkyValues.get(skyKey);
       if (skyValue == null) {
         return null;
       }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
index de37dd5..180df4a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
@@ -57,7 +57,7 @@
 import com.google.devtools.build.skyframe.SkyFunctionException;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.io.IOException;
 import java.math.BigInteger;
 import java.util.ArrayList;
@@ -706,11 +706,11 @@
       }
     }
 
-    SkyframeIterableResult result = env.getOrderedValuesAndExceptions(childKeys);
+    SkyframeLookupResult result = env.getValuesAndExceptions(childKeys);
     ImmutableList.Builder<RecursiveFilesystemTraversalValue> childValues =
         ImmutableList.builderWithExpectedSize(childKeys.size());
     for (SkyKey key : childKeys) {
-      SkyValue value = result.next();
+      SkyValue value = result.get(key);
       if (value == null) {
         continue;
       }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java
index 93c972b..bb464a6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java
@@ -50,7 +50,7 @@
 import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.List;
 import javax.annotation.Nullable;
 import net.starlark.java.eval.StarlarkSemantics;
@@ -200,13 +200,13 @@
                         .build())
             .collect(toImmutableList());
 
-    SkyframeIterableResult values = env.getOrderedValuesAndExceptions(keys);
+    SkyframeLookupResult values = env.getValuesAndExceptions(keys);
     ImmutableList.Builder<ConfiguredTargetKey> validPlatformKeys = new ImmutableList.Builder<>();
     boolean valuesMissing = false;
     for (ConfiguredTargetKey platformKey : keys) {
       Label platformLabel = platformKey.getLabel();
       try {
-        SkyValue value = values.nextOrThrow(ConfiguredValueCreationException.class);
+        SkyValue value = values.getOrThrow(platformKey, ConfiguredValueCreationException.class);
         if (value == null) {
           valuesMissing = true;
           continue;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
index cb2e3b5..90f88c0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
@@ -44,7 +44,7 @@
 import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.List;
 import javax.annotation.Nullable;
 import net.starlark.java.eval.StarlarkSemantics;
@@ -189,14 +189,14 @@
                         .build())
             .collect(toImmutableList());
 
-    SkyframeIterableResult values = env.getOrderedValuesAndExceptions(keys);
+    SkyframeLookupResult values = env.getValuesAndExceptions(keys);
     ImmutableList.Builder<DeclaredToolchainInfo> toolchains = new ImmutableList.Builder<>();
     boolean valuesMissing = false;
     for (SkyKey key : keys) {
       ConfiguredTargetKey configuredTargetKey = (ConfiguredTargetKey) key.argument();
       Label toolchainLabel = configuredTargetKey.getLabel();
       try {
-        SkyValue value = values.nextOrThrow(ConfiguredValueCreationException.class);
+        SkyValue value = values.getOrThrow(key, ConfiguredValueCreationException.class);
         if (value == null) {
           valuesMissing = true;
           continue;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuildSettingsDetailsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuildSettingsDetailsFunction.java
index e5afa52..fc469b3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuildSettingsDetailsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuildSettingsDetailsFunction.java
@@ -35,7 +35,7 @@
 import com.google.devtools.build.skyframe.SkyFunctionException;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -51,7 +51,7 @@
   private static final String ALIAS_RULE_NAME = "alias";
   private static final String ALIAS_ACTUAL_ATTRIBUTE_NAME = "actual";
 
-  public StarlarkBuildSettingsDetailsFunction() {}
+  StarlarkBuildSettingsDetailsFunction() {}
 
   @Override
   @Nullable
@@ -155,14 +155,14 @@
       }
       ImmutableSet<PackageValue.Key> packageKeys =
           getPackageKeysFromLabels(unverifiedBuildSettings);
-      SkyframeIterableResult newlyLoaded = env.getOrderedValuesAndExceptions(packageKeys);
+      SkyframeLookupResult newlyLoaded = env.getValuesAndExceptions(packageKeys);
       if (env.valuesMissing()) {
         return null;
       }
-      for (SkyKey packageKey : packageKeys) {
+      for (PackageValue.Key packageKey : packageKeys) {
         try {
-          SkyValue skyValue = newlyLoaded.nextOrThrow(NoSuchPackageException.class);
-          buildSettingPackages.put((PackageValue.Key) packageKey, (PackageValue) skyValue);
+          SkyValue skyValue = newlyLoaded.getOrThrow(packageKey, NoSuchPackageException.class);
+          buildSettingPackages.put(packageKey, (PackageValue) skyValue);
         } catch (NoSuchPackageException e) {
           throw new TransitionException(e);
         }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
index 4b2153e..acebe98 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
@@ -51,9 +51,7 @@
 import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunction;
-import com.google.devtools.build.skyframe.SkyFunction.Environment;
 import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
 import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -308,13 +306,14 @@
       }
     }
 
-    SkyframeIterableResult resolvedPatterns = env.getOrderedValuesAndExceptions(patternSkyKeys);
+    SkyframeLookupResult resolvedPatterns = env.getValuesAndExceptions(patternSkyKeys);
     List<ExpandedPattern> expandedPatterns = new ArrayList<>(patternSkyKeys.size());
 
     for (TargetPatternKey pattern : patternSkyKeys) {
       TargetPatternValue value;
       try {
-        value = (TargetPatternValue) resolvedPatterns.nextOrThrow(TargetParsingException.class);
+        value =
+            (TargetPatternValue) resolvedPatterns.getOrThrow(pattern, TargetParsingException.class);
       } catch (TargetParsingException e) {
         String rawPattern = pattern.getPattern();
         String errorMessage = e.getMessage();
@@ -435,12 +434,13 @@
       }
       expandedSuiteKeys.add(TestsForTargetPatternValue.key(value.getTargets().getTargets()));
     }
-    SkyframeIterableResult expandedSuites = env.getOrderedValuesAndExceptions(expandedSuiteKeys);
+    SkyframeLookupResult expandedSuites = env.getValuesAndExceptions(expandedSuiteKeys);
     if (env.valuesMissing()) {
       return null;
     }
 
     ResolvedTargets.Builder<Target> testTargetsBuilder = ResolvedTargets.builder();
+    int suiteKeyIndex = 0;
     for (TargetPatternKey pattern : patternSkyKeys) {
       TargetPatternValue value;
       try {
@@ -458,7 +458,7 @@
       }
 
       TestsForTargetPatternValue expandedSuitesValue =
-          (TestsForTargetPatternValue) expandedSuites.next();
+          (TestsForTargetPatternValue) expandedSuites.get(expandedSuiteKeys.get(suiteKeyIndex++));
       if (expandedSuitesValue == null) {
         BugReport.logUnexpected("Value for: '%s' was missing, this should never happen", pattern);
         return null;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternUtil.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternUtil.java
index 2fb8a28..576f44c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternUtil.java
@@ -26,7 +26,7 @@
 import com.google.devtools.build.lib.pkgcache.FilteringPolicy;
 import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.List;
 import javax.annotation.Nullable;
 
@@ -49,14 +49,14 @@
 
     Iterable<TargetPatternKey> targetPatternKeys =
         TargetPatternValue.keys(targetPatterns, filteringPolicy);
-    SkyframeIterableResult resolvedPatterns = env.getOrderedValuesAndExceptions(targetPatternKeys);
+    SkyframeLookupResult resolvedPatterns = env.getValuesAndExceptions(targetPatternKeys);
     boolean valuesMissing = env.valuesMissing();
     ImmutableList.Builder<Label> labels = valuesMissing ? null : new ImmutableList.Builder<>();
 
     for (TargetPatternKey pattern : targetPatternKeys) {
-      TargetPatternValue value;
       try {
-        value = (TargetPatternValue) resolvedPatterns.nextOrThrow(TargetParsingException.class);
+        TargetPatternValue value =
+            (TargetPatternValue) resolvedPatterns.getOrThrow(pattern, TargetParsingException.class);
         if (!valuesMissing && value != null) {
           labels.addAll(value.getTargets().getTargets());
         }
@@ -101,8 +101,8 @@
   // TODO(bazel-team): Consolidate this and TargetParsingException. Just have the latter store the
   //   original unparsed pattern too.
   public static final class InvalidTargetPatternException extends Exception {
-    private String invalidPattern;
-    private TargetParsingException tpe;
+    private final String invalidPattern;
+    private final TargetParsingException tpe;
 
     public InvalidTargetPatternException(String invalidPattern, TargetParsingException tpe) {
       super(tpe);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestExpansionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestExpansionFunction.java
index 4ec6565..2b447ae 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TestExpansionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestExpansionFunction.java
@@ -32,7 +32,7 @@
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -158,7 +158,7 @@
           pkgIdentifiers.add(label.getPackageIdentifier());
         });
     ImmutableList<SkyKey> skyKeys = PackageValue.keys(pkgIdentifiers);
-    SkyframeIterableResult packages = env.getOrderedValuesAndExceptions(skyKeys);
+    SkyframeLookupResult packages = env.getValuesAndExceptions(skyKeys);
     if (env.valuesMissing()) {
       return false;
     }
@@ -168,7 +168,7 @@
       try {
         packageMap.put(
             (PackageIdentifier) key.argument(),
-            ((PackageValue) packages.nextOrThrow(NoSuchPackageException.class)).getPackage());
+            ((PackageValue) packages.getOrThrow(key, NoSuchPackageException.class)).getPackage());
       } catch (NoSuchPackageException e) {
         env.getListener().handle(Event.error(e.getMessage()));
         hasError = true;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestsForTargetPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestsForTargetPatternFunction.java
index ea18c97..13eee99 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TestsForTargetPatternFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestsForTargetPatternFunction.java
@@ -26,7 +26,7 @@
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
@@ -52,18 +52,20 @@
         testsInSuitesKeys.add(TestExpansionValue.key(target, true));
       }
     }
-    SkyframeIterableResult testsInSuites = env.getOrderedValuesAndExceptions(testsInSuitesKeys);
+    SkyframeLookupResult testsInSuites = env.getValuesAndExceptions(testsInSuitesKeys);
     if (env.valuesMissing()) {
       return null;
     }
 
     Set<Label> result = new LinkedHashSet<>();
     boolean hasError = targets.hasError();
+    int keyIndex = 0;
     for (Target target : targets.getTargets()) {
       if (TargetUtils.isTestRule(target)) {
         result.add(target.getLabel());
       } else if (TargetUtils.isTestSuiteRule(target)) {
-        TestExpansionValue value = (TestExpansionValue) testsInSuites.next();
+        TestExpansionValue value =
+            (TestExpansionValue) testsInSuites.get(testsInSuitesKeys.get(keyIndex++));
         if (value == null) {
           return null;
         }
@@ -86,7 +88,7 @@
       pkgIdentifiers.add(label.getPackageIdentifier());
     }
     List<SkyKey> packagesKeys = PackageValue.keys(pkgIdentifiers);
-    SkyframeIterableResult packages = env.getOrderedValuesAndExceptions(packagesKeys);
+    SkyframeLookupResult packages = env.getValuesAndExceptions(packagesKeys);
     if (env.valuesMissing()) {
       return null;
     }
@@ -96,7 +98,7 @@
     Map<PackageIdentifier, Package> packageMap = new HashMap<>();
     for (SkyKey packagesKey : packagesKeys) {
       // Don't bother to check for exceptions - the incoming list should only contain valid targets.
-      PackageValue packagesValue = (PackageValue) packages.next();
+      PackageValue packagesValue = (PackageValue) packages.get(packagesKey);
       if (packagesValue == null) {
         BugReport.sendBugReport(
             new IllegalStateException(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainTypeLookupUtil.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainTypeLookupUtil.java
index 9078220..18bfc47 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainTypeLookupUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainTypeLookupUtil.java
@@ -25,7 +25,7 @@
 import com.google.devtools.build.lib.packages.NoSuchThingException;
 import com.google.devtools.build.lib.server.FailureDetails.Toolchain.Code;
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.HashMap;
 import java.util.Map;
 import javax.annotation.Nullable;
@@ -37,7 +37,7 @@
   public static ImmutableMap<Label, ToolchainTypeInfo> resolveToolchainTypes(
       Environment env, Iterable<ConfiguredTargetKey> toolchainTypeKeys)
       throws InterruptedException, InvalidToolchainTypeException {
-    SkyframeIterableResult values = env.getOrderedValuesAndExceptions(toolchainTypeKeys);
+    SkyframeLookupResult values = env.getValuesAndExceptions(toolchainTypeKeys);
     boolean valuesMissing = env.valuesMissing();
     Map<Label, ToolchainTypeInfo> results = valuesMissing ? null : new HashMap<>();
     for (ConfiguredTargetKey key : toolchainTypeKeys) {
@@ -58,12 +58,12 @@
 
   @Nullable
   private static ToolchainTypeInfo findToolchainTypeInfo(
-      ConfiguredTargetKey key, SkyframeIterableResult values) throws InvalidToolchainTypeException {
-
+      ConfiguredTargetKey key, SkyframeLookupResult values) throws InvalidToolchainTypeException {
     try {
       ConfiguredTargetValue ctv =
           (ConfiguredTargetValue)
-              values.nextOrThrow(
+              values.getOrThrow(
+                  key,
                   ConfiguredValueCreationException.class,
                   NoSuchThingException.class,
                   ActionConflictException.class);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelStarlarkAspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelStarlarkAspectFunction.java
index 1b356d4..4074fec 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelStarlarkAspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToplevelStarlarkAspectFunction.java
@@ -25,7 +25,7 @@
 import com.google.devtools.build.skyframe.SkyFunctionException;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
-import com.google.devtools.build.skyframe.SkyframeIterableResult;
+import com.google.devtools.build.skyframe.SkyframeLookupResult;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -64,14 +64,14 @@
             topLevelAspectsDetails.getAspectsDetails(),
             topLevelAspectsKey.getBaseConfiguredTargetKey());
 
-    SkyframeIterableResult result = env.getOrderedValuesAndExceptions(aspectsKeys);
+    SkyframeLookupResult result = env.getValuesAndExceptions(aspectsKeys);
     if (env.valuesMissing()) {
       return null; // some aspects keys are not evaluated
     }
     ImmutableList.Builder<SkyValue> values =
         ImmutableList.builderWithExpectedSize(aspectsKeys.size());
-    while (result.hasNext()) {
-      SkyValue value = result.next();
+    for (SkyKey aspectKey : aspectsKeys) {
+      SkyValue value = result.get(aspectKey);
       if (value == null) {
         return null;
       }