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
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 8c9af36..ce6b1f5 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.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 @@
         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(