aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/runtime
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2016-05-25 20:32:08 +0000
committerGravatar Yue Gan <yueg@google.com>2016-05-27 08:44:41 +0000
commit42fb560f7f8a6713f0da1fd45c64d49a8c039709 (patch)
treef7a5a02c3cf641565397b87a4c912401e87669fe /src/main/java/com/google/devtools/build/lib/runtime
parentaaf87a654b76eb6f44ceb1bb1bdd7e6d869f6690 (diff)
Allow BlazeModules to expose a helper that PackageFactory will use for creating fresh Package instances. Also make a few Package methods public.
-- MOS_MIGRATED_REVID=123247246
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.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java17
2 files changed, 26 insertions, 1 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 25f692a723..743cff57b1 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
@@ -28,6 +28,7 @@ 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.Package;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.Preprocessor;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -342,6 +343,15 @@ public abstract class BlazeModule {
}
/**
+ * Returns a helper that the {@link PackageFactory} will use during package loading. If the module
+ * does not provide any heloer, it should return null. Note that only one helper per Bazel/Blaze
+ * runtime is allowed.
+ */
+ public Package.Builder.Helper getPackageBuilderHelper() {
+ return null;
+ }
+
+ /**
* Returns a factory for creating {@link AbstractBlazeQueryEnvironment} objects.
* If the module does not provide any {@link QueryEnvironmentFactory}, it should return null. Note
* that only one factory per Bazel/Blaze runtime is allowed.
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 8c9af364ce..ce6b1f5c0d 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
@@ -39,6 +39,7 @@ 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.Package;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.Preprocessor;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -1260,13 +1261,27 @@ public final class BlazeRuntime {
extensions.add(module.getPackageEnvironmentExtension());
}
+ Package.Builder.Helper packageBuilderHelper = null;
+ for (BlazeModule module : blazeModules) {
+ Package.Builder.Helper candidateHelper = module.getPackageBuilderHelper();
+ if (candidateHelper != null) {
+ Preconditions.checkState(packageBuilderHelper == null,
+ "more than one module defines a package builder helper");
+ packageBuilderHelper = candidateHelper;
+ }
+ }
+ if (packageBuilderHelper == null) {
+ packageBuilderHelper = Package.Builder.DefaultHelper.INSTANCE;
+ }
+
PackageFactory packageFactory =
new PackageFactory(
ruleClassProvider,
platformRegexps,
attributeContainerFactory,
extensions,
- BlazeVersionInfo.instance().getVersion());
+ BlazeVersionInfo.instance().getVersion(),
+ packageBuilderHelper);
if (configurationFactory == null) {
configurationFactory = new ConfigurationFactory(