diff options
author | 2016-05-11 22:28:43 +0000 | |
---|---|---|
committer | 2016-05-12 10:47:30 +0000 | |
commit | 0249841c3d04201fbc685e3070d14618833effa3 (patch) | |
tree | 749b40d04438322ea778f6268c0f761e597aa229 /src/main/java/com/google/devtools/build/lib/runtime | |
parent | 0f46246587b8a4d23b51289702da8880ace53947 (diff) |
Allow modules to inject a custom AttributeContainer.
Rollback of commit cda4b4eae0c495a8f90f2a70a8db46e34062ee26.
*** Reason for rollback ***
Roll-forward with fixes (see ExternalPackageBuilder).
*** Original change description ***
Automated [] rollback of commit 178a3dfda8bf72abf22758597a90a4afb8eed181.
*** Reason for rollback ***
Broke ci.bazel.io.
See #1234.
*** Original change description ***
Allow modules to inject a custom AttributeContainer.
--
MOS_MIGRATED_REVID=122100417
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/runtime')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java | 8 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java | 28 |
2 files changed, 34 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java index 0037fd0d2f..25f692a723 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java @@ -13,6 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.runtime; +import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -25,9 +26,11 @@ import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.WorkspaceStatusAction; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.exec.OutputService; +import com.google.devtools.build.lib.packages.AttributeContainer; import com.google.devtools.build.lib.packages.NoSuchThingException; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.Preprocessor; +import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.query2.AbstractBlazeQueryEnvironment; import com.google.devtools.build.lib.query2.QueryEnvironmentFactory; import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction; @@ -188,6 +191,11 @@ public abstract class BlazeModule { return ImmutableList.of(); } + @Nullable + protected Function<RuleClass, AttributeContainer> getAttributeContainerSupplier() { + return null; + } + /** * Services provided for Blaze modules via BlazeRuntime. */ diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java index ab251c74aa..c03192c3b7 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java @@ -38,8 +38,10 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationFactory; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.OutputFilter; import com.google.devtools.build.lib.flags.CommandNameCache; +import com.google.devtools.build.lib.packages.AttributeContainer; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.Preprocessor; +import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClassProvider; import com.google.devtools.build.lib.profiler.AutoProfiler; import com.google.devtools.build.lib.profiler.MemoryProfiler; @@ -1218,6 +1220,23 @@ public final class BlazeRuntime { } } + Function<RuleClass, AttributeContainer> attributeContainerFactory = null; + for (BlazeModule module : blazeModules) { + Function<RuleClass, AttributeContainer> attrContainerFactory = + module.getAttributeContainerSupplier(); + if (attrContainerFactory != null) { + Preconditions.checkState( + attributeContainerFactory == null, + "At most one attribute container supplier supported. But found two: %s and %s", + attrContainerFactory, + attributeContainerFactory); + attributeContainerFactory = attrContainerFactory; + } + } + if (attributeContainerFactory == null) { + attributeContainerFactory = AttributeContainer.ATTRIBUTE_CONTAINER_FACTORY; + } + ConfiguredRuleClassProvider ruleClassProvider = ruleClassBuilder.build(); List<PackageFactory.EnvironmentExtension> extensions = new ArrayList<>(); @@ -1225,8 +1244,13 @@ public final class BlazeRuntime { extensions.add(module.getPackageEnvironmentExtension()); } - PackageFactory packageFactory = new PackageFactory( - ruleClassProvider, platformRegexps, extensions, BlazeVersionInfo.instance().getVersion()); + PackageFactory packageFactory = + new PackageFactory( + ruleClassProvider, + platformRegexps, + attributeContainerFactory, + extensions, + BlazeVersionInfo.instance().getVersion()); if (configurationFactory == null) { configurationFactory = new ConfigurationFactory( |