Cleanup ActionConstructionContext.

Do not expose the underlying Rule.

RELNOTES: None.
PiperOrigin-RevId: 169109552
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 162b9de..dd174ff 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
@@ -50,6 +50,7 @@
 import com.google.devtools.build.lib.analysis.config.PatchTransition;
 import com.google.devtools.build.lib.analysis.fileset.FilesetProvider;
 import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.collect.ImmutableSortedKeyListMultimap;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -239,7 +240,20 @@
     }
   }
 
+  public RepositoryName getRepository() {
+    return rule.getRepository();
+  }
+
   @Override
+  public Root getBinDirectory() {
+    return getConfiguration().getBinDirectory(rule.getRepository());
+  }
+
+  @Override
+  public Root getMiddlemanDirectory() {
+    return getConfiguration().getMiddlemanDirectory(rule.getRepository());
+  }
+  
   public Rule getRule() {
     return rule;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupport.java b/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupport.java
index 684cf86..1648346 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RunfilesSupport.java
@@ -267,7 +267,7 @@
       Iterable<Artifact> allRunfilesArtifacts) {
     return context.getAnalysisEnvironment().getMiddlemanFactory().createRunfilesMiddleman(
         context.getActionOwner(), owningExecutable, allRunfilesArtifacts,
-        context.getConfiguration().getMiddlemanDirectory(context.getRule().getRepository()),
+        context.getMiddlemanDirectory(),
         "runfiles_artifacts");
   }
 
@@ -276,7 +276,7 @@
     return context.getAnalysisEnvironment().getMiddlemanFactory().createRunfilesMiddleman(
         context.getActionOwner(), owningExecutable,
         ImmutableList.of(artifactsMiddleman, outputManifest),
-        context.getConfiguration().getMiddlemanDirectory(context.getRule().getRepository()),
+        context.getMiddlemanDirectory(),
         "runfiles");
   }
 
@@ -308,7 +308,7 @@
 
     BuildConfiguration config = context.getConfiguration();
     Artifact outputManifest = context.getDerivedArtifact(
-        outputManifestPath, config.getBinDirectory(context.getRule().getRepository()));
+        outputManifestPath, context.getBinDirectory());
     context
         .getAnalysisEnvironment()
         .registerAction(
@@ -338,7 +338,7 @@
     }
     return context.getAnalysisEnvironment().getMiddlemanFactory().createRunfilesMiddleman(
         context.getActionOwner(), owningExecutable, SourceManifestAction.getDependencies(runfiles),
-        context.getConfiguration().getMiddlemanDirectory(context.getRule().getRepository()),
+        context.getBinDirectory(),
         "runfiles_manifest");
   }
 
@@ -356,7 +356,7 @@
         executablePath.getBaseName() + ".runfiles.SOURCES");
     Artifact sourceOnlyManifest = context.getDerivedArtifact(
         sourcesManifestPath,
-        context.getConfiguration().getBinDirectory(context.getRule().getRepository()));
+        context.getBinDirectory());
     context.getAnalysisEnvironment().registerAction(SourceManifestAction.forRunfiles(
         ManifestType.SOURCES_ONLY, context.getActionOwner(), sourceOnlyManifest, runfiles));
     return sourceOnlyManifest;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
index d17ea45..a38a08e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ActionConstructionContext.java
@@ -18,7 +18,6 @@
 import com.google.devtools.build.lib.actions.Root;
 import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.vfs.PathFragment;
 
 /**
@@ -26,8 +25,16 @@
  * the items commonly needed to construct action instances.
  */
 public interface ActionConstructionContext {
-  /** The rule for which the actions are constructed. */
-  Rule getRule();
+
+  /**
+   * Returns the bin directory for constructed actions.
+   */
+  Root getBinDirectory();
+
+  /**
+   * Returns the internal directory (used for middlemen) for constructed actions.
+   */
+  Root getMiddlemanDirectory();
 
   /** Returns the action owner that should be used for actions. */
   ActionOwner getActionOwner();