Add bulk package lookup for use during target pattern resolution.

--
MOS_MIGRATED_REVID=111130363
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 115a0f5..db6639d 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
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.skyframe;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -37,6 +38,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * A {@link RecursivePackageProvider} backed by an {@link Environment}. Its methods
@@ -78,6 +80,17 @@
   }
 
   @Override
+  public Map<PackageIdentifier, Package> bulkGetPackages(EventHandler eventHandler,
+          Iterable<PackageIdentifier> pkgIds)
+          throws NoSuchPackageException, InterruptedException {
+    ImmutableMap.Builder<PackageIdentifier, Package> builder = ImmutableMap.builder();
+    for (PackageIdentifier pkgId : pkgIds) {
+      builder.put(pkgId, getPackage(eventHandler, pkgId));
+    }
+    return builder.build();
+  }
+
+  @Override
   public boolean isPackage(EventHandler eventHandler, PackageIdentifier packageId)
       throws MissingDepException {
     SkyKey packageLookupKey = PackageLookupValue.key(packageId);