Rollforward #2 of "AppleBinary and AppleStaticLibrary no longer propagate unwrapped ObjcProvider", after changes made to apple bazel rules to be compatible.

RELNOTES: None.
PiperOrigin-RevId: 167061765
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
index a65a9a5..8e6c2bd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
@@ -167,8 +167,6 @@
     objcProviderBuilder.add(MULTI_ARCH_LINKED_BINARIES, outputArtifact);
 
     ObjcProvider objcProvider = objcProviderBuilder.build();
-    // TODO(cparsons): Stop propagating ObjcProvider directly from this rule.
-    targetBuilder.addNativeDeclaredProvider(objcProvider);
 
     switch (getBinaryType(ruleContext)) {
       case EXECUTABLE:
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
index 16eef28..ff3e8f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
@@ -181,8 +181,6 @@
     ObjcProvider objcProvider = objcProviderBuilder.build();
 
     targetBuilder
-        // TODO(cparsons): Remove ObjcProvider as a direct provider.
-        .addNativeDeclaredProvider(objcProvider)
         .addNativeDeclaredProvider(
             new AppleStaticLibraryProvider(
                 ruleIntermediateArtifacts.combinedArchitectureArchive(), objcProvider))
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java
index 2c4026e..e9085c8 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleBinaryTest.java
@@ -1440,7 +1440,7 @@
 
   @Test
   public void testCustomModuleMap() throws Exception {
-    checkCustomModuleMap(RULE_TYPE);
+    checkCustomModuleMap(RULE_TYPE, true);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
index d76970a..ca89f67 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryTest.java
@@ -149,7 +149,9 @@
         "    resources = [':avoid.png']",
         ")");
 
-    ObjcProvider provider = providerForTarget("//package:test");
+    ObjcProvider provider = getConfiguredTarget("//package:test")
+        .get(AppleStaticLibraryProvider.SKYLARK_CONSTRUCTOR)
+        .getDepsObjcProvider();
     // Do not remove SDK_FRAMEWORK values in avoid_deps.
     assertThat(provider.get(ObjcProvider.SDK_FRAMEWORK))
         .containsAllOf(new SdkFramework("AvoidSDK"), new SdkFramework("BaseSDK"));
@@ -623,4 +625,4 @@
     assertThat(Artifact.toRootRelativePaths(action.getInputs())).doesNotContain(
         "package/libavoidCcLib.a");
   }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
index 7bb3872..6c31986 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/IosTestTest.java
@@ -1167,7 +1167,22 @@
      // Usually, an ios_test would depend on apple_binary through a skylark_ios_application in its
      // 'binary' attribute.  Since we don't have skylark_ios_application here, we use the 'deps'
      // attribute instead.
+    scratch.file("skylarkstub/BUILD");
+    scratch.file("skylarkstub/skylark_stub.bzl",
+        "def skylark_ios_application_stub_impl(ctx):",
+        "  bin_provider = ctx.attr.binary[apple_common.AppleExecutableBinary]",
+        "  return struct(objc=bin_provider.objc)",
+        "skylark_ios_application_stub = rule(",
+        "    skylark_ios_application_stub_impl,",
+        // Both 'binary' and 'deps' are needed because ObjcProtoAspect is applied transitively
+        // along attribute 'deps' only.
+        "    attrs = {'binary': attr.label(mandatory=True,",
+        "                                  providers=[apple_common.AppleExecutableBinary])},",
+        "    fragments = ['apple', 'objc'],",
+        ")");
+
      scratch.file("x/BUILD",
+       "load('//skylarkstub:skylark_stub.bzl', 'skylark_ios_application_stub')",
         "genrule(",
         "    name = 'gen_hdrs',",
         "    outs = ['generated.h'],",
@@ -1179,6 +1194,10 @@
         "    platform_type = 'ios',",
         "    hdrs = ['generated.h'],",
         ")",
+        "skylark_ios_application_stub(",
+        "    name = 'stub_application',",
+        "    binary = ':apple_bin',",
+        ")",
         "objc_binary(",
         "    name = 'bin',",
         "    srcs = ['bin.m'],",
@@ -1192,7 +1211,7 @@
         "    srcs = ['test.m'],",
         "    xctest = 1,",
         "    xctest_app = ':testApp',",
-        "    deps = [':apple_bin']",
+        "    deps = [':stub_application']",
         ")");
      CommandAction compileAction = compileAction("//x:test", "test.o");
      // The genfiles root for child configurations must be present in the compile action so that
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java
index 255841d..591eeac 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryTest.java
@@ -928,7 +928,7 @@
 
   @Test
   public void testCustomModuleMap() throws Exception {
-    checkCustomModuleMap(RULE_TYPE);
+    checkCustomModuleMap(RULE_TYPE, false);
   }
 
   @Test
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 056a607..074a556 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
@@ -1564,6 +1564,6 @@
 
   @Test
   public void testCustomModuleMap() throws Exception {
-    checkCustomModuleMap(RULE_TYPE);
+    checkCustomModuleMap(RULE_TYPE, false);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java
index 043f21b..ca87273 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryTest.java
@@ -679,12 +679,12 @@
 
   @Test
   public void testModulemapCreatedForNonLinkingTargets() throws Exception {
-    checkOnlyLibModuleMapsArePresentForTarget("//package:opl_protobuf");
+    checkOnlyLibModuleMapsArePresentForTarget("//package:opl_protobuf", false);
   }
 
   @Test
   public void testModulemapNotCreatedForLinkingTargets() throws Exception {
-    checkOnlyLibModuleMapsArePresentForTarget("//package:opl_binary");
+    checkOnlyLibModuleMapsArePresentForTarget("//package:opl_binary", true);
   }
 
   @Test
@@ -760,7 +760,8 @@
     return Joiner.on('\n').join(Ordering.natural().immutableSortedCopy(elements));
   }
 
-  private void checkOnlyLibModuleMapsArePresentForTarget(String target) throws Exception {
+  private void checkOnlyLibModuleMapsArePresentForTarget(String target,
+      boolean fromBinary) throws Exception {
     Artifact libModuleMap =
         getGenfilesArtifact(
             "opl_protobuf.modulemaps/module.modulemap",
@@ -770,7 +771,11 @@
             "protobuf_lib.modulemaps/module.modulemap",
             getConfiguredTarget("//objcproto:protobuf_lib"));
 
-    ObjcProvider provider = providerForTarget(target);
+    ObjcProvider provider = fromBinary
+        ? getConfiguredTarget(target)
+              .get(AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR)
+              .getDepsObjcProvider()
+        : providerForTarget(target);
     assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.MODULE_MAP).toSet()))
         .containsExactlyElementsIn(
             Artifact.toRootRelativePaths(ImmutableSet.of(libModuleMap, protolibModuleMap)));
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
index 7baa058..6051f4a 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
@@ -4892,7 +4892,7 @@
         .isEqualTo("a.o");
   }
 
-  protected void checkCustomModuleMap(RuleType ruleType) throws Exception {
+  protected void checkCustomModuleMap(RuleType ruleType, boolean fromBinary) throws Exception {
     useConfiguration("--experimental_objc_enable_module_maps");
     ruleType.scratchTarget(scratch, "srcs", "['a.m']", "deps", "['//z:testModuleMap']");
     scratch.file("x/a.m");
@@ -4920,7 +4920,11 @@
     assertThat(Artifact.toExecPaths(provider.get(MODULE_MAP)))
         .containsExactly("y/module.modulemap");
 
-    provider = providerForTarget("//x:x");
+    provider = fromBinary
+        ? getConfiguredTarget("//x:x")
+            .get(AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR)
+            .getDepsObjcProvider()
+        : providerForTarget("//x:x");
     assertThat(Artifact.toExecPaths(provider.get(MODULE_MAP))).contains("y/module.modulemap");
   }