Allow globs to be used outside of the skyframe package.

--
MOS_MIGRATED_REVID=93647914
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java
index d6d08fa..48714f2 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java
@@ -14,9 +14,14 @@
 
 package com.google.devtools.build.lib.actions;
 
+import com.google.common.base.Preconditions;
 import com.google.devtools.build.lib.actions.Artifact.MiddlemanExpander;
 import com.google.devtools.build.lib.actions.cache.MetadataHandler;
 import com.google.devtools.build.lib.util.io.FileOutErr;
+import com.google.devtools.build.skyframe.SkyFunction;
+import com.google.devtools.build.skyframe.SkyFunction.Environment;
+
+import javax.annotation.Nullable;
 
 /**
  * A class that groups services in the scope of the action. Like the FileOutErr object.
@@ -28,14 +33,38 @@
   private final MetadataHandler metadataHandler;
   private final FileOutErr fileOutErr;
   private final MiddlemanExpander middlemanExpander;
+  @Nullable
+  private final Environment env;
 
-  public ActionExecutionContext(Executor executor, ActionInputFileCache actionInputFileCache,
-      MetadataHandler metadataHandler, FileOutErr fileOutErr, MiddlemanExpander middlemanExpander) {
+  private ActionExecutionContext(Executor executor, ActionInputFileCache actionInputFileCache,
+      MetadataHandler metadataHandler, FileOutErr fileOutErr,
+      @Nullable MiddlemanExpander middlemanExpander,
+      @Nullable SkyFunction.Environment env) {
     this.actionInputFileCache = actionInputFileCache;
     this.metadataHandler = metadataHandler;
     this.fileOutErr = fileOutErr;
     this.executor = executor;
     this.middlemanExpander = middlemanExpander;
+    this.env = env;
+  }
+
+  public ActionExecutionContext(Executor executor, ActionInputFileCache actionInputFileCache,
+      MetadataHandler metadataHandler, FileOutErr fileOutErr, MiddlemanExpander middlemanExpander) {
+    this(executor, actionInputFileCache, metadataHandler, fileOutErr, middlemanExpander, null);
+  }
+
+  public static ActionExecutionContext normal(Executor executor,
+      ActionInputFileCache actionInputFileCache, MetadataHandler metadataHandler,
+      FileOutErr fileOutErr, MiddlemanExpander middlemanExpander) {
+    return new ActionExecutionContext(executor, actionInputFileCache, metadataHandler, fileOutErr,
+        middlemanExpander, null);
+  }
+
+  public static ActionExecutionContext forInputDiscovery(Executor executor,
+      ActionInputFileCache actionInputFileCache, MetadataHandler metadataHandler,
+      FileOutErr fileOutErr, Environment env) {
+    return new ActionExecutionContext(executor, actionInputFileCache, metadataHandler, fileOutErr,
+        null, env);
   }
 
   public ActionInputFileCache getActionInputFileCache() {
@@ -63,11 +92,18 @@
   }
 
   /**
+   * Provides a mechanism for the action to request values from Skyframe while it discovers inputs.
+   */
+  public Environment getEnvironmentForDiscoveringInputs() {
+    return Preconditions.checkNotNull(env);
+  }
+
+  /**
    * Allows us to create a new context that overrides the FileOutErr with another one. This is
    * useful for muting the output for example.
    */
   public ActionExecutionContext withFileOutErr(FileOutErr fileOutErr) {
     return new ActionExecutionContext(executor, actionInputFileCache, metadataHandler, fileOutErr,
-        middlemanExpander);
+        middlemanExpander, env);
   }
 }