Subtract protos from avoid_deps of apple_static_library

RELNOTES: None.
PiperOrigin-RevId: 152416858
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 843b267..0a67458 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -665,11 +665,11 @@
           // TODO(ulfjack): Depending on objcProtoAspect from here is a layering violation.
           ObjcProtoAspect objcProtoAspect = new ObjcProtoAspect();
           builder.addNativeAspectClass(objcProtoAspect);
+          builder.addRuleDefinition(new AppleBinaryRule(objcProtoAspect));
+          builder.addRuleDefinition(new AppleStaticLibraryRule(objcProtoAspect));
           builder.addRuleDefinition(new ObjcProtoLibraryRule(objcProtoAspect));
 
-          builder.addRuleDefinition(new AppleBinaryRule(objcProtoAspect));
           builder.addRuleDefinition(new AppleCcToolchainRule());
-          builder.addRuleDefinition(new AppleStaticLibraryRule());
           builder.addRuleDefinition(new AppleToolchain.RequiresXcodeConfigRule(toolsRepository));
           builder.addRuleDefinition(new AppleWatch1ExtensionRule());
           builder.addRuleDefinition(new AppleWatch2ExtensionRule());
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 da04087..70f0c76 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
@@ -28,6 +28,7 @@
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+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.RuleConfiguredTargetFactory;
 import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
@@ -36,6 +37,7 @@
 import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
 import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes;
 import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
+
 import java.util.List;
 import java.util.Set;
 
@@ -79,6 +81,10 @@
     ImmutableListMultimap<BuildConfiguration, CcLinkParamsProvider> configToCcAvoidDepsMap =
         ruleContext.getPrerequisitesByConfiguration(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME,
             Mode.SPLIT, CcLinkParamsProvider.class);
+    Iterable<ObjcProtoProvider> avoidProtoProviders =
+        ruleContext.getPrerequisites(AppleStaticLibraryRule.AVOID_DEPS_ATTR_NAME, Mode.TARGET,
+            ObjcProtoProvider.class);
+    NestedSet<Artifact> protosToAvoid = protoArtifactsToAvoid(avoidProtoProviders);
 
     Set<BuildConfiguration> childConfigurations = getChildConfigurations(ruleContext);
 
@@ -95,7 +101,7 @@
 
     for (BuildConfiguration childConfig : childConfigurations) {
       ProtobufSupport protoSupport =
-          new ProtobufSupport(ruleContext, childConfig)
+          new ProtobufSupport(ruleContext, childConfig, protosToAvoid)
               .registerGenerationActions()
               .registerCompilationActions();
 
@@ -192,4 +198,15 @@
 
     return configToProvider.keySet();
   }
+
+  private static NestedSet<Artifact> protoArtifactsToAvoid(
+      Iterable<ObjcProtoProvider> avoidedProviders) {
+    NestedSetBuilder<Artifact> avoidArtifacts = NestedSetBuilder.stableOrder();
+    for (ObjcProtoProvider avoidProvider : avoidedProviders) {
+      for (NestedSet<Artifact> avoidProviderOutputGroup : avoidProvider.getProtoGroups()) {
+        avoidArtifacts.addTransitive(avoidProviderOutputGroup);
+      }
+    }
+    return avoidArtifacts.build();
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java
index a0d0dc9..c837f19 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryRule.java
@@ -35,6 +35,12 @@
  */
 public class AppleStaticLibraryRule implements RuleDefinition {
 
+  private final ObjcProtoAspect objcProtoAspect;
+
+  public AppleStaticLibraryRule(ObjcProtoAspect objcProtoAspect) {
+    this.objcProtoAspect = objcProtoAspect;
+  }
+
   /**
    * Template for the fat archive output (using Apple's "lipo" tool to combine .a archive files of
    * multiple architectures).
@@ -80,7 +86,8 @@
                 .mandatoryNativeProviders(
                     ImmutableList.<Class<? extends TransitiveInfoProvider>>of(ObjcProvider.class))
                 .cfg(splitTransitionProvider)
-                .allowedFileTypes())
+                .allowedFileTypes()
+                .aspect(objcProtoAspect))
         /*<!-- #BLAZE_RULE(apple_static_library).IMPLICIT_OUTPUTS -->
         <ul>
           <li><code><var>name</var>_lipo.a</code>: a 'lipo'ed archive file. All transitive