Add required/advertised Skylark providers.

This is needed to advertise and request JavaInfo (a native declared provider) instead of JavaCompilationArgsProvider.

RELNOTES: None.
PiperOrigin-RevId: 170205997
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
index 5570c3f..a028e71 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
@@ -291,6 +291,15 @@
       requiredProviders.addNativeSet(ImmutableSet.copyOf(providers));
       return this;
     }
+    
+    /**
+     * Asserts that this aspect can only be evaluated for rules that supply all of the specified
+     * Skylark providers.
+     */
+    public Builder requireSkylarkProviders(SkylarkProviderIdentifier... skylarkProviders) {
+      requiredProviders.addSkylarkSet(ImmutableSet.copyOf(skylarkProviders));
+      return this;
+    }
 
     public Builder requireAspectsWithProviders(
         Iterable<ImmutableSet<SkylarkProviderIdentifier>> providerSets) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 5709e64..6e1e70b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -808,6 +808,13 @@
       return this;
     }
 
+    public Builder advertiseSkylarkProvider(SkylarkProviderIdentifier... skylarkProviders) {
+      for (SkylarkProviderIdentifier skylarkProviderIdentifier : skylarkProviders) {
+        advertisedProviders.addSkylark(skylarkProviderIdentifier);
+      }
+      return this;
+    }
+
     /**
      * Set if the rule can have any provider. This is true for "alias" rules like
      * <code>bind</code> .