Avoid using ObjectFilePathHelper in CompilationSupport.java

RELNOTES: None.
PiperOrigin-RevId: 190591828
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 8f94242..2c0a986 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -63,6 +63,7 @@
 import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
 import com.google.devtools.build.lib.analysis.FilesToRunProvider;
 import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts;
+import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
@@ -114,7 +115,6 @@
 import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.rules.cpp.NoProcessing;
-import com.google.devtools.build.lib.rules.cpp.ObjectFilePathHelper;
 import com.google.devtools.build.lib.rules.cpp.PrecompiledFiles;
 import com.google.devtools.build.lib.rules.cpp.UmbrellaHeaderAction;
 import com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag;
@@ -847,46 +847,19 @@
   }
 
   /**
-   * TODO(b/76143707): Remove this function after ObjectFilePathHelper is no longer used here.
-   *
-   * <p>Add constructed object files based on given sources.
-   */
-  private void addObjectFiles(
-      ImmutableList.Builder<Artifact> objectFilesBuilder,
-      Iterable<Artifact> sources,
-      boolean isArc) {
-    ObjectFilePathHelper objectFilePathHelper =
-        new ObjectFilePathHelper(
-            sources,
-            ruleContext.getFragment(CppConfiguration.class).shortenObjFilePath(),
-            isArc ? "arc" : "non_arc");
-    for (Artifact artifact : sources) {
-      objectFilesBuilder.add(
-          intermediateArtifacts.objFile(artifact, objectFilePathHelper.getOutputName(artifact)));
-    }
-  }
-
-  /**
    * Returns a provider that collects this target's instrumented sources as well as those of its
    * dependencies.
    *
-   * @param common common information about this rule and its dependencies
+   * @param objectFiles the object files generated by this target
    * @return an instrumented files provider
    */
-  public InstrumentedFilesProvider getInstrumentedFilesProvider(ObjcCommon common) {
-    ImmutableList.Builder<Artifact> oFiles = ImmutableList.builder();
-
-    if (common.getCompilationArtifacts().isPresent()) {
-      CompilationArtifacts artifacts = common.getCompilationArtifacts().get();
-      addObjectFiles(oFiles, artifacts.getSrcs(), true);
-      addObjectFiles(oFiles, artifacts.getNonArcSrcs(), false);
-    }
-
+  private InstrumentedFilesProvider getInstrumentedFilesProvider(
+      ImmutableList<Artifact> objectFiles) {
     return InstrumentedFilesCollector.collect(
         ruleContext,
         INSTRUMENTATION_SPEC,
         new ObjcCoverageMetadataCollector(),
-        oFiles.build(),
+        objectFiles,
         NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER),
         // The COVERAGE_GCOV_PATH environment variable is added in TestSupport#getExtraProviders()
         NestedSetBuilder.<Pair<String, String>>emptySet(Order.COMPILE_ORDER),
@@ -953,20 +926,24 @@
         ExtraCompileArgs.NONE,
         ImmutableList.<PathFragment>of(),
         toolchain,
-        maybeGetFdoSupport());
+        maybeGetFdoSupport(),
+        /* targetBuilder= */ null);
   }
 
   /**
    * Registers all actions necessary to compile this rule's sources and archive them.
    *
    * @param common common information about this rule and its dependencies
+   * @param targetBuilder {@link InstrumentedFilesProvider} will be added for this target if
+   *     targetBuilder is not null.
    * @return this compilation support
    * @throws RuleErrorException for invalid crosstool files
    */
-  CompilationSupport registerCompileAndArchiveActions(ObjcCommon common)
+  CompilationSupport registerCompileAndArchiveActions(
+      ObjcCommon common, RuleConfiguredTargetBuilder targetBuilder)
       throws RuleErrorException, InterruptedException {
     return registerCompileAndArchiveActions(
-        common, ExtraCompileArgs.NONE, ImmutableList.<PathFragment>of());
+        common, ExtraCompileArgs.NONE, ImmutableList.<PathFragment>of(), targetBuilder);
   }
 
   /**
@@ -980,7 +957,8 @@
   CompilationSupport registerCompileAndArchiveActions(
       ObjcCommon common, Iterable<PathFragment> priorityHeaders)
       throws RuleErrorException, InterruptedException {
-    return registerCompileAndArchiveActions(common, ExtraCompileArgs.NONE, priorityHeaders);
+    return registerCompileAndArchiveActions(
+        common, ExtraCompileArgs.NONE, priorityHeaders, /* targetBuilder= */ null);
   }
 
   /**
@@ -992,6 +970,8 @@
    * @param priorityHeaders priority headers to be included before the dependency headers
    * @param ccToolchain the cpp toolchain provider, may be null
    * @param fdoSupport the cpp FDO support provider, may be null
+   * @param targetBuilder {@link InstrumentedFilesProvider} will be added for this target if
+   *     targetBuilder is not null.
    * @return this compilation support
    * @throws RuleErrorException for invalid crosstool files
    */
@@ -1001,7 +981,8 @@
       ExtraCompileArgs extraCompileArgs,
       Iterable<PathFragment> priorityHeaders,
       @Nullable CcToolchainProvider ccToolchain,
-      @Nullable FdoSupportProvider fdoSupport)
+      @Nullable FdoSupportProvider fdoSupport,
+      RuleConfiguredTargetBuilder targetBuilder)
       throws RuleErrorException, InterruptedException {
     Preconditions.checkNotNull(ccToolchain);
     Preconditions.checkNotNull(fdoSupport);
@@ -1033,7 +1014,8 @@
               objList);
 
       // TODO(b/30783125): Signal the need for this action in the CROSSTOOL.
-      registerObjFilelistAction(compilationInfo.getFirst().getObjectFiles(false), objList);
+      registerObjFilelistAction(
+          compilationInfo.getFirst().getObjectFiles(/*usePic= */ false), objList);
     } else {
       compilationInfo =
           ccCompileAndLink(
@@ -1050,6 +1032,14 @@
 
     outputGroupCollector.putAll(compilationInfo.getSecond());
 
+    // If targetBuilder is set, we add InstrumentedFilesProvider for it.
+    if (targetBuilder != null) {
+      targetBuilder.addProvider(
+          InstrumentedFilesProvider.class,
+          getInstrumentedFilesProvider(
+              compilationInfo.getFirst().getObjectFiles(/*usePic= */ false)));
+    }
+
     registerHeaderScanningActions(compilationInfo.getFirst(), objcProvider, compilationArtifacts);
 
     return this;
@@ -1061,11 +1051,16 @@
    * @param common common information about this rule and its dependencies
    * @param extraCompileArgs args to be added to compile actions
    * @param priorityHeaders priority headers to be included before the dependency headers
+   * @param targetBuilder InstrumentedFilesProvider will be added for this target if targetBuilder
+   *     is not null.
    * @return this compilation support
    * @throws RuleErrorException for invalid crosstool files
    */
   CompilationSupport registerCompileAndArchiveActions(
-      ObjcCommon common, ExtraCompileArgs extraCompileArgs, Iterable<PathFragment> priorityHeaders)
+      ObjcCommon common,
+      ExtraCompileArgs extraCompileArgs,
+      Iterable<PathFragment> priorityHeaders,
+      RuleConfiguredTargetBuilder targetBuilder)
       throws RuleErrorException, InterruptedException {
     if (common.getCompilationArtifacts().isPresent()) {
       registerCompileAndArchiveActions(
@@ -1074,7 +1069,8 @@
           extraCompileArgs,
           priorityHeaders,
           toolchain,
-          maybeGetFdoSupport());
+          maybeGetFdoSupport(),
+          targetBuilder);
     }
     return this;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java
index 86cdb0d..9761afc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IntermediateArtifacts.java
@@ -21,7 +21,6 @@
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.rules.cpp.CppHelper;
 import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
 import com.google.devtools.build.lib.rules.cpp.CppModuleMap.UmbrellaHeaderStrategy;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -33,8 +32,6 @@
 // TODO(bazel-team): This should really be named DerivedArtifacts as it contains methods for
 // final as well as intermediate artifacts.
 public final class IntermediateArtifacts {
-  private static final PathFragment OBJS = PathFragment.create("_objs");
-
   static final String LINKMAP_SUFFIX = ".linkmap";
 
   /**
@@ -266,24 +263,6 @@
         "lib%s%s.a", basename, archiveFileNameSuffix)));
   }
 
-  private Artifact inUniqueObjsDir(String outputName, String extension) {
-    PathFragment uniqueDir = OBJS.getRelative(ruleContext.getLabel().getName());
-    PathFragment scopeRelativePath = uniqueDir.getRelative(outputName + extension);
-    return scopedArtifact(scopeRelativePath);
-  }
-
-  /**
-   * The artifact for the .o file that should be generated when compiling the {@code source}
-   * artifact.
-   */
-  public Artifact objFile(Artifact source, String outputName) {
-    if (source.isTreeArtifact()) {
-      return CppHelper.getCompileOutputTreeArtifact(ruleContext, source, outputName);
-    } else {
-      return inUniqueObjsDir(outputName, ".o");
-    }
-  }
-
   /** The artifact for the .headers file output by the header thinning action for this source. */
   public Artifact headersListFile(Artifact objectFile) {
     return ruleContext.getRelatedArtifact(objectFile.getRootRelativePath(), ".headers_list");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 3870556..a41676f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -278,8 +278,9 @@
                 common.getObjcProvider(),
                 EXTRA_COMPILE_ARGS,
                 ImmutableList.<PathFragment>of(),
-                ccToolchain,
-                fdoSupport)
+                ccToolchain,  
+                fdoSupport,
+                /* targetBuilder= */ null)
             .registerFullyLinkAction(
                 common.getObjcProvider(),
                 ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
index 0fa2870..6f192d3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java
@@ -17,10 +17,10 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
 import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
-import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.rules.cpp.CcCompilationInfo;
@@ -68,6 +68,9 @@
     NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.<Artifact>stableOrder()
         .addAll(common.getCompiledArchive().asSet());
 
+    RuleConfiguredTargetBuilder targetBuilder =
+        ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build());
+
     Map<String, NestedSet<Artifact>> outputGroupCollector = new TreeMap<>();
     CompilationSupport compilationSupport =
         new CompilationSupport.Builder()
@@ -76,7 +79,7 @@
             .build();
 
     compilationSupport
-        .registerCompileAndArchiveActions(common)
+        .registerCompileAndArchiveActions(common, targetBuilder)
         .registerFullyLinkAction(
             common.getObjcProvider(),
             ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB))
@@ -98,14 +101,11 @@
                     .toCollection())
             .build();
 
-    return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build())
+    return targetBuilder
         .addNativeDeclaredProvider(common.getObjcProvider())
         .addNativeDeclaredProvider(ccCompilationInfo)
         .addProvider(J2ObjcEntryClassProvider.class, j2ObjcEntryClassProvider)
         .addProvider(J2ObjcMappingFileProvider.class, j2ObjcMappingFileProvider)
-        .addProvider(
-            InstrumentedFilesProvider.class,
-            compilationSupport.getInstrumentedFilesProvider(common))
         .addNativeDeclaredProvider(new CcLinkParamsInfo(new ObjcLibraryCcLinkParamsStore(common)))
         .addOutputGroups(outputGroupCollector)
         .build();