aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/runtime
diff options
context:
space:
mode:
authorGravatar Janak Ramakrishnan <janakr@google.com>2016-05-11 22:28:43 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-05-12 10:47:30 +0000
commit0249841c3d04201fbc685e3070d14618833effa3 (patch)
tree749b40d04438322ea778f6268c0f761e597aa229 /src/main/java/com/google/devtools/build/lib/runtime
parent0f46246587b8a4d23b51289702da8880ace53947 (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.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java28
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(