Add simpler Starlark interface for creating strict_deps

This is in preparation for removing the old interface.  The old
interface requires that user create an ObjcProvider that is then
passed as a "direct_dep_providers" to create another ObjcProvider.
Now that we only support one kind of strict_deps, we don't need the
generality that this interface provides us.  The old interface also
relies on the ObjcProvider compile info API that we are in the process
of obsoleting.

RELNOTES: None
PiperOrigin-RevId: 301247927
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
index 10a327e..42b3761 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
@@ -63,8 +63,9 @@
         ApplePlatform> {
 
   @VisibleForTesting
-  public static final String BAD_KEY_ERROR = "Argument %s not a recognized key, 'providers',"
-      + " or 'direct_dep_providers'.";
+  public static final String BAD_KEY_ERROR =
+      "Argument %s not a recognized key,"
+          + " 'strict_include', 'providers', or 'direct_dep_providers'.";
 
   @VisibleForTesting
   public static final String BAD_SET_TYPE_ERROR =
@@ -200,6 +201,8 @@
       Key<?> key = ObjcProvider.getSkylarkKeyForString((String) entry.getKey());
       if (key != null) {
         resultBuilder.addElementsFromSkylark(key, entry.getValue());
+      } else if (entry.getKey().equals("strict_include")) {
+        resultBuilder.addStrictIncludeFromSkylark(entry.getValue());
       } else if (entry.getKey().equals("providers")) {
         resultBuilder.addProvidersFromSkylark(entry.getValue());
       } else if (entry.getKey().equals("direct_dep_providers")) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index 1487259..3d1f189 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -1124,7 +1124,7 @@
       return this;
     }
 
-    Builder addStrictDependencyIncludes(Iterable<PathFragment> includes) {
+    protected Builder addStrictDependencyIncludes(Iterable<PathFragment> includes) {
       strictDependencyIncludes.addAll(includes);
       return this;
     }
@@ -1295,6 +1295,19 @@
       }
     }
 
+    /**
+     * Adds the given strict include paths from skylark. An error is thrown if skylarkToAdd is not
+     * an appropriate Depset.
+     */
+    @SuppressWarnings("unchecked")
+    void addStrictIncludeFromSkylark(Object skylarkToAdd) throws EvalException {
+      NestedSet<PathFragment> toAdd =
+          (NestedSet<PathFragment>)
+              ObjcProviderSkylarkConverters.convertToJava(INCLUDE, skylarkToAdd);
+
+      addStrictDependencyIncludes(toAdd.toList());
+    }
+
     @Override
     public ObjcProvider build() {
       return build(ccCompilationContextBuilder.build());
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
index eee81ce..4b8cb62 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java
@@ -1226,6 +1226,32 @@
   }
 
   @Test
+  public void testSkylarkCanCreateObjcProviderWithStrictDepsDirectly() throws Exception {
+    ConfiguredTarget skylarkTarget =
+        createObjcProviderSkylarkTarget(
+            "   strict_includes = depset(['path'])",
+            "   created_provider = apple_common.new_objc_provider\\",
+            "(strict_include=strict_includes)",
+            "   return [created_provider]");
+
+    ObjcProvider skylarkProvider = skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR);
+    assertThat(skylarkProvider.getStrictDependencyIncludes())
+        .containsExactly(PathFragment.create("path"));
+
+    scratch.file(
+        "examples/objc_skylark2/BUILD",
+        "objc_library(",
+        "   name = 'direct_dep',",
+        "   deps = ['//examples/objc_skylark:my_target']",
+        ")");
+
+    ObjcProvider skylarkProviderDirectDepender =
+        getConfiguredTarget("//examples/objc_skylark2:direct_dep")
+            .get(ObjcProvider.SKYLARK_CONSTRUCTOR);
+    assertThat(skylarkProviderDirectDepender.getStrictDependencyIncludes()).isEmpty();
+  }
+
+  @Test
   public void testSkylarkStrictDepsDoesNotSupportDefine() throws Exception {
     AssertionError e =
         assertThrows(