Allow bypassing input file discovery in package building

--
MOS_MIGRATED_REVID=136594531
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index cbd672e..54ccc3e 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -1253,7 +1253,7 @@
       addRuleUnchecked(rule);
     }
 
-    private Builder beforeBuild() throws InterruptedException {
+    private Builder beforeBuild(boolean discoverAssumedInputFiles) throws InterruptedException {
       Preconditions.checkNotNull(pkg);
       Preconditions.checkNotNull(filename);
       Preconditions.checkNotNull(buildFileLabel);
@@ -1270,15 +1270,17 @@
 
       List<Rule> rules = Lists.newArrayList(getTargets(Rule.class));
 
-      // All labels mentioned in a rule that refer to an unknown target in the
-      // current package are assumed to be InputFiles, so let's create them:
-      for (final Rule rule : rules) {
-        AggregatingAttributeMapper.of(rule).visitLabels(new AcceptsLabelAttribute() {
-          @Override
-          public void acceptLabelAttribute(Label label, Attribute attribute) {
-            createInputFileMaybe(label, rule.getAttributeLocation(attribute.getName()));
-          }
-        });
+      if (discoverAssumedInputFiles) {
+        // All labels mentioned in a rule that refer to an unknown target in the
+        // current package are assumed to be InputFiles, so let's create them:
+        for (final Rule rule : rules) {
+          AggregatingAttributeMapper.of(rule).visitLabels(new AcceptsLabelAttribute() {
+            @Override
+            public void acceptLabelAttribute(Label label, Attribute attribute) {
+              createInputFileMaybe(label, rule.getAttributeLocation(attribute.getName()));
+            }
+          });
+        }
       }
 
       // "test_suite" rules have the idiosyncratic semantics of implicitly
@@ -1310,7 +1312,7 @@
       if (alreadyBuilt) {
         return this;
       }
-      return beforeBuild();
+      return beforeBuild(/*discoverAssumedInputFiles=*/ true);
     }
 
     /**
@@ -1355,10 +1357,18 @@
     }
 
     public Package build() throws InterruptedException {
+      return build(/*discoverAssumedInputFiles=*/ true);
+    }
+
+    /**
+     * Build the package, optionally adding any labels in the package not already associated with
+     * a target as an input file.
+     */
+    public Package build(boolean discoverAssumedInputFiles) throws InterruptedException {
       if (alreadyBuilt) {
         return pkg;
       }
-      beforeBuild();
+      beforeBuild(discoverAssumedInputFiles);
       return finishBuild();
     }