Change allowedRuleClasses/mandatoryProviders semantics to "either-or" instead of "and".
Also allow native rules to require declared providers on their
dependencies.
--
MOS_MIGRATED_REVID=135454750
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index 2367da2..8e3361b 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -37,6 +37,7 @@
import com.google.devtools.build.lib.packages.SkylarkAspect;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
+import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.rules.SkylarkAttr;
import com.google.devtools.build.lib.rules.SkylarkFileType;
import com.google.devtools.build.lib.rules.SkylarkRuleClassFunctions;
@@ -229,7 +230,12 @@
Attribute attr =
evalAttributeDefinition("attr.label_list(allow_files = True, providers = ['a', 'b'])")
.build("a1");
- assertThat(attr.getMandatoryProvidersList()).containsExactly(ImmutableSet.of("a", "b"));
+ assertThat(attr.getMandatoryProvidersList())
+ .containsExactly(ImmutableSet.of(legacy("a"), legacy("b")));
+ }
+
+ private static SkylarkProviderIdentifier legacy(String legacyId) {
+ return SkylarkProviderIdentifier.forLegacy(legacyId);
}
@Test
@@ -238,8 +244,9 @@
evalAttributeDefinition("attr.label_list(allow_files = True,"
+ " providers = [['a', 'b'], ['c']])")
.build("a1");
- assertThat(attr.getMandatoryProvidersList()).containsExactly(ImmutableSet.of("a", "b"),
- ImmutableSet.of("c"));
+ assertThat(attr.getMandatoryProvidersList()).containsExactly(
+ ImmutableSet.of(legacy("a"), legacy("b")),
+ ImmutableSet.of(legacy("c")));
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestRuleClassProvider.java b/src/test/java/com/google/devtools/build/lib/testutil/TestRuleClassProvider.java
index aa8bfb7..6a13bd9 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/TestRuleClassProvider.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/TestRuleClassProvider.java
@@ -27,8 +27,8 @@
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder;
+import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.util.FileTypeSet;
-
import java.lang.reflect.Method;
/**
@@ -97,8 +97,12 @@
return builder
.setUndocumented()
.add(attr("srcs", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE))
- .override(builder.copy("deps").mandatoryProvidersList(ImmutableList.of(
- ImmutableList.of("a"), ImmutableList.of("b", "c"))))
+ .override(builder.copy("deps").mandatoryProvidersList(
+ ImmutableList.of(
+ ImmutableList.of(SkylarkProviderIdentifier.forLegacy("a")),
+ ImmutableList.of(
+ SkylarkProviderIdentifier.forLegacy("b"),
+ SkylarkProviderIdentifier.forLegacy("c")))))
.build();
}