aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar brandjon <brandjon@google.com>2018-01-22 10:50:45 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-22 10:52:27 -0800
commit32d359f4fbde6bfdcfa1beda64a87c407480ba76 (patch)
treea9ecf4d014fef0d88aa6da6496b4714a9f67d0b4 /src/main/java/com/google/devtools/build/lib
parent772d958f1577f1697a1112ffbddc23898c11a48b (diff)
Add a native provider registry to ConfiguredRuleClassProvider
The idea is that rule sets should record what builtin providers (types, not instances) they use, as opposed to having a static registry the way we do for @SkylarkSignature builtins. (It'd be nice for the latter to not be static one day.) RELNOTES: None PiperOrigin-RevId: 182802492
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/core/CoreRules.java2
4 files changed, 27 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 826ce84a35..5a1cc6dd6a 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -935,6 +935,7 @@ java_library(
["rules/core/*.java"],
),
deps = [
+ ":packages-internal",
"//src/main/java/com/google/devtools/build/lib:build-base",
"//third_party:guava",
],
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index c52b9476d4..ab0cb03a61 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -44,6 +44,7 @@ import com.google.devtools.build.lib.graph.Digraph;
import com.google.devtools.build.lib.graph.Node;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.NativeAspectClass;
+import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.Rule;
@@ -200,7 +201,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
* A coherent set of options, fragments, aspects and rules; each of these may declare a dependency
* on other such sets.
*/
- public static interface RuleSet {
+ public interface RuleSet {
/** Add stuff to the configured rule class provider builder. */
void init(ConfiguredRuleClassProvider.Builder builder);
@@ -235,6 +236,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
ImmutableMap.builder();
private ImmutableList.Builder<Class<?>> skylarkModules =
ImmutableList.<Class<?>>builder().addAll(SkylarkModules.MODULES);
+ private ImmutableList.Builder<NativeProvider> nativeProviders = ImmutableList.builder();
private ImmutableBiMap.Builder<String, Class<? extends TransitiveInfoProvider>>
registeredSkylarkProviders = ImmutableBiMap.builder();
private Map<String, String> platformRegexps = new TreeMap<>();
@@ -365,6 +367,11 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
return this;
}
+ public Builder addNativeProvider(NativeProvider provider) {
+ this.nativeProviders.add(provider);
+ return this;
+ }
+
/**
* Do not use - this only exists for backwards compatibility! Platform regexps are part of a
* legacy mechanism - {@code vardef} - that is not exposed in Bazel.
@@ -462,7 +469,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
universalFragment,
prerequisiteValidator,
skylarkAccessibleTopLevels.build(),
- skylarkModules.build());
+ skylarkModules.build(),
+ nativeProviders.build());
}
@Override
@@ -576,6 +584,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
private final Environment.Frame globals;
+ private final ImmutableList<NativeProvider> nativeProviders;
+
private final ImmutableMap<String, Class<?>> configurationFragmentMap;
private ConfiguredRuleClassProvider(
@@ -594,7 +604,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
Class<? extends BuildConfiguration.Fragment> universalFragment,
PrerequisiteValidator prerequisiteValidator,
ImmutableMap<String, Object> skylarkAccessibleJavaClasses,
- ImmutableList<Class<?>> skylarkModules) {
+ ImmutableList<Class<?>> skylarkModules,
+ ImmutableList<NativeProvider> nativeProviders) {
this.preludeLabel = preludeLabel;
this.runfilesPrefix = runfilesPrefix;
this.toolsRepository = toolsRepository;
@@ -610,6 +621,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
this.universalFragment = universalFragment;
this.prerequisiteValidator = prerequisiteValidator;
this.globals = createGlobals(skylarkAccessibleJavaClasses, skylarkModules);
+ this.nativeProviders = nativeProviders;
this.configurationFragmentMap = createFragmentMap(configurationFragmentFactories);
}
@@ -808,4 +820,12 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
fragmentsBuilder.add(getUniversalFragment());
return fragmentsBuilder.build();
}
+
+ /**
+ * Returns all registered {@link NativeProvider} instances, i.e. all built-in provider types that
+ * are based on {@link Provider} rather than {@link TransitiveInfoProvider}.
+ */
+ public ImmutableList<NativeProvider> getNativeProviders() {
+ return nativeProviders;
+ }
}
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 f5fadc5677..0e7782c7f7 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
@@ -199,7 +199,7 @@ public class BazelRuleClassProvider {
@Override
public ImmutableList<RuleSet> requires() {
- return null;
+ return ImmutableList.of();
}
};
diff --git a/src/main/java/com/google/devtools/build/lib/rules/core/CoreRules.java b/src/main/java/com/google/devtools/build/lib/rules/core/CoreRules.java
index 5cfe5939a2..8b293cf622 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/core/CoreRules.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/core/CoreRules.java
@@ -18,6 +18,7 @@ import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.Builder;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet;
import com.google.devtools.build.lib.analysis.test.TestConfiguration;
+import com.google.devtools.build.lib.packages.NativeProvider;
/** A set of basic rules - Bazel won't work correctly without these. */
public final class CoreRules implements RuleSet {
@@ -37,6 +38,7 @@ public final class CoreRules implements RuleSet {
builder.addRuleDefinition(new BaseRuleClasses.BinaryBaseRule());
builder.addRuleDefinition(new BaseRuleClasses.TestBaseRule());
builder.addRuleDefinition(new BaseRuleClasses.ErrorRule());
+ builder.addNativeProvider(NativeProvider.STRUCT);
}
@Override