Automated rollback of commit b9fa276f5cf111fdfc2bc8766b9421cedba1b0a6.

*** Reason for rollback ***

Fixed the underlying issue with modulemap generation.

*** Original change description ***

Automated rollback of commit 9906c5c4cd1124a4291461fb472685ad7d88580e.

*** Reason for rollback ***

b/157557521

*** Original change description ***

Preserve direct fields when merging ARC and non-ARC compilation contexts after Objective-C compilation.

RELNOTES: None.
PiperOrigin-RevId: 314793255
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 8b47165..56bc435 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
@@ -450,10 +450,13 @@
     CcCompilationContext.Builder ccCompilationContextBuilder =
         CcCompilationContext.builder(
             ruleContext, ruleContext.getConfiguration(), ruleContext.getLabel());
+    // Do a re-exporting merge of the ARC and non-ARC contexts so that the direct headers are
+    // preserved in the unified context.
     ccCompilationContextBuilder.mergeDependentCcCompilationContexts(
         Arrays.asList(
             objcArcCompilationInfo.getCcCompilationContext(),
-            nonObjcArcCompilationInfo.getCcCompilationContext()));
+            nonObjcArcCompilationInfo.getCcCompilationContext()),
+        ImmutableList.of());
     ccCompilationContextBuilder.setPurpose(
         String.format("%s_merged_arc_non_arc_objc", semantics.getPurpose()));
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
index 2be2ae1..ea44dc1 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
@@ -49,6 +49,8 @@
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
 import com.google.devtools.build.lib.packages.util.MockObjcSupport;
 import com.google.devtools.build.lib.rules.apple.AppleToolchain;
+import com.google.devtools.build.lib.rules.cpp.CcCompilationContext;
+import com.google.devtools.build.lib.rules.cpp.CcInfo;
 import com.google.devtools.build.lib.rules.cpp.CppCompileAction;
 import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
 import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction;
@@ -1925,6 +1927,19 @@
         .containsExactly("bar.m");
     assertThat(Artifact.toRootRelativePaths(dependerProvider.getDirect(ObjcProvider.MODULE_MAP)))
         .containsExactly("x/bar.modulemaps/module.modulemap");
+
+    ConfiguredTarget target = getConfiguredTarget("//x:bar");
+    CcCompilationContext ccCompilationContext =
+        target.get(CcInfo.PROVIDER).getCcCompilationContext();
+    assertThat(baseArtifactNames(ccCompilationContext.getDirectPublicHdrs()))
+        .containsExactly("bar.h");
+    assertThat(baseArtifactNames(ccCompilationContext.getDirectPrivateHdrs()))
+        .containsExactly("bar_impl.h");
+    assertThat(baseArtifactNames(ccCompilationContext.getTextualHdrs())).containsExactly("bar.inc");
+
+    // Verify that the CppModuleMap objects are not added twice when merging the ARC and non-ARC
+    // contexts.
+    assertThat(ccCompilationContext.getExportingModuleMaps()).hasSize(1);
   }
 
   @Test