C++: Remove remaining usages of context in compile

A new method was added to ActionConstructionContext in order to get a Tree artifact and the API must now take the grep-includes artifact.

RELNOTES:none
PiperOrigin-RevId: 232634667
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 5b2dbf4..1777564 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
@@ -710,13 +710,7 @@
     return getAnalysisEnvironment().getDerivedArtifact(rootRelativePath, root);
   }
 
-  /**
-   * Creates a TreeArtifact under a given root with the given root-relative path.
-   *
-   * <p>Verifies that it is in the root-relative directory corresponding to the package of the rule,
-   * thus ensuring that it doesn't clash with other artifacts generated by other rules using this
-   * method.
-   */
+  @Override
   public SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root) {
     Preconditions.checkState(rootRelativePath.startsWith(getPackageDirectory()),
         "Output artifact '%s' not under package directory '%s' for target '%s'",
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 08a0887..ff54a8f 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
@@ -16,6 +16,7 @@
 import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.ActionOwner;
 import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
 import com.google.devtools.build.lib.actions.ArtifactRoot;
 import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -60,6 +61,15 @@
   Artifact getDerivedArtifact(PathFragment rootRelativePath, ArtifactRoot root);
 
   /**
+   * Creates a TreeArtifact under a given root with the given root-relative path.
+   *
+   * <p>Verifies that it is in the root-relative directory corresponding to the package of the rule,
+   * thus ensuring that it doesn't clash with other artifacts generated by other rules using this
+   * method.
+   */
+  SpecialArtifact getTreeArtifact(PathFragment rootRelativePath, ArtifactRoot root);
+
+  /**
    * Returns an artifact that can be an output of shared actions. Only use when there is no other
    * option.
    *
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index c198d13..718be91 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -220,7 +220,6 @@
     }
   }
 
-  private final RuleContext ruleContext;
   private final CppSemantics semantics;
   private final BuildConfiguration configuration;
   private final CppConfiguration cppConfiguration;
@@ -270,6 +269,7 @@
   private final ActionRegistry actionRegistry;
   private final ActionConstructionContext actionConstructionContext;
   private final Label label;
+  private final Artifact grepIncludes;
 
   /**
    * Creates a CcCompilationHelper.
@@ -317,7 +317,6 @@
       CcToolchainProvider ccToolchain,
       FdoContext fdoContext,
       BuildConfiguration configuration) {
-    this.ruleContext = Preconditions.checkNotNull(ruleContext);
     this.semantics = Preconditions.checkNotNull(semantics);
     this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration);
     this.sourceCategory = Preconditions.checkNotNull(sourceCatagory);
@@ -336,6 +335,10 @@
     actionRegistry = ruleContext;
     actionConstructionContext = ruleContext;
     label = ruleContext.getLabel();
+    grepIncludes =
+        ruleContext.attributes().has("$grep_includes")
+            ? ruleContext.getPrerequisiteArtifact("$grep_includes", Mode.HOST)
+            : null;
   }
 
   /**
@@ -1370,7 +1373,8 @@
       boolean usePic) {
     SpecialArtifact sourceArtifact = (SpecialArtifact) source.getSource();
     SpecialArtifact outputFiles =
-        CppHelper.getCompileOutputTreeArtifact(ruleContext, sourceArtifact, outputName, usePic);
+        CppHelper.getCompileOutputTreeArtifact(
+            actionConstructionContext, label, sourceArtifact, outputName, usePic);
     // TODO(rduan): Dotd file output is not supported yet.
     builder.setOutputs(outputFiles, /* dotdFile= */ null);
     builder.setVariables(
@@ -1493,7 +1497,8 @@
    */
   private CppCompileActionBuilder initializeCompileAction(Artifact sourceArtifact) {
     CppCompileActionBuilder builder =
-        new CppCompileActionBuilder(ruleContext, ccToolchain, configuration);
+        new CppCompileActionBuilder(
+            actionConstructionContext, grepIncludes, ccToolchain, configuration);
     builder.setSourceFile(sourceArtifact);
     builder.setCcCompilationContext(ccCompilationContext);
     builder.setCoptsFilter(coptsFilter);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
index c190a71..cde8d01 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
@@ -89,21 +89,22 @@
    * rule.
    */
   public CppCompileActionBuilder(RuleContext ruleContext, CcToolchainProvider ccToolchain) {
-    this(ruleContext, ccToolchain, ruleContext.getConfiguration());
+    this(
+        ruleContext,
+        ruleContext.attributes().has("$grep_includes")
+            ? ruleContext.getPrerequisiteArtifact("$grep_includes", Mode.HOST)
+            : null,
+        ccToolchain,
+        ruleContext.getConfiguration());
   }
 
   /** Creates a builder from a rule and configuration. */
   public CppCompileActionBuilder(
-      RuleContext ruleContext,
+      ActionConstructionContext actionConstructionContext,
+      Artifact grepIncludes,
       CcToolchainProvider ccToolchain,
       BuildConfiguration configuration) {
-    this(
-        ruleContext.getActionOwner(),
-        configuration,
-        ccToolchain,
-        ruleContext.attributes().has("$grep_includes")
-            ? ruleContext.getPrerequisiteArtifact("$grep_includes", Mode.HOST)
-            : null);
+    this(actionConstructionContext.getActionOwner(), configuration, ccToolchain, grepIncludes);
   }
 
   /** Creates a builder from a rule and configuration. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index b79f686..6dcfb52 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -717,11 +717,13 @@
 
   /** Returns the corresponding compiled TreeArtifact given the source TreeArtifact. */
   public static SpecialArtifact getCompileOutputTreeArtifact(
-      RuleContext ruleContext, Artifact sourceTreeArtifact, String outputName, boolean usePic) {
-    PathFragment objectDir = getObjDirectory(ruleContext.getLabel(), usePic);
-
-    return ruleContext.getTreeArtifact(
-        objectDir.getRelative(outputName), sourceTreeArtifact.getRoot());
+      ActionConstructionContext actionConstructionContext,
+      Label label,
+      Artifact sourceTreeArtifact,
+      String outputName,
+      boolean usePic) {
+    return actionConstructionContext.getTreeArtifact(
+        getObjDirectory(label, usePic).getRelative(outputName), sourceTreeArtifact.getRoot());
   }
 
   public static String getArtifactNameForCategory(