diff options
author | 2016-05-25 20:32:08 +0000 | |
---|---|---|
committer | 2016-05-27 08:44:41 +0000 | |
commit | 42fb560f7f8a6713f0da1fd45c64d49a8c039709 (patch) | |
tree | f7a5a02c3cf641565397b87a4c912401e87669fe /src/main/java/com/google/devtools/build/lib/runtime | |
parent | aaf87a654b76eb6f44ceb1bb1bdd7e6d869f6690 (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.java | 10 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java | 17 |
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( |