Do not store a separate map for external package data. This ensures that serialization works correctly.

Removes ExternalPackage as Package specialization.

--
MOS_MIGRATED_REVID=103395682
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 41224e0..12b0a26 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
@@ -67,6 +67,16 @@
  */
 public class Package implements Serializable {
 
+  public static PackageIdentifier EXTERNAL_PACKAGE_IDENTIFIER;
+
+  static {
+    try {
+      Package.EXTERNAL_PACKAGE_IDENTIFIER = PackageIdentifier.parse("//external");
+    } catch (LabelSyntaxException e) {
+      throw new IllegalStateException();
+    }
+  }
+
   /**
    * Common superclass for all name-conflict exceptions.
    */
@@ -744,7 +754,14 @@
     }
   }
 
-  static class Builder {
+  public static Builder newExternalPackageBuilder(Path workspacePath, String runfilesPrefix) {
+    Builder b = new Builder(new Package(EXTERNAL_PACKAGE_IDENTIFIER, runfilesPrefix));
+    b.setFilename(workspacePath);
+    b.setMakeEnv(new MakeEnvironment.Builder());
+    return b;
+  }
+
+  public static class Builder {
     protected static Package newPackage(PackageIdentifier packageId, String runfilesPrefix) {
       return new Package(packageId, runfilesPrefix);
     }
@@ -777,6 +794,8 @@
     protected Map<Label, Path> subincludes = null;
     protected ImmutableList<Label> skylarkFileDependencies = ImmutableList.of();
 
+    protected ExternalPackageBuilder externalPackageData = new ExternalPackageBuilder();
+
     /**
      * True iff the "package" function has already been called in this package.
      */
@@ -809,7 +828,7 @@
       }
     }
 
-    Builder(PackageIdentifier id, String runfilesPrefix) {
+    public Builder(PackageIdentifier id, String runfilesPrefix) {
       this(newPackage(id, runfilesPrefix));
     }
 
@@ -1294,6 +1313,9 @@
       if (alreadyBuilt) {
         return pkg;
       }
+
+      externalPackageData.build(this);
+
       // Freeze targets and distributions.
       targets = ImmutableMap.copyOf(targets);
       defaultDistributionSet =
@@ -1314,6 +1336,10 @@
       return pkg;
     }
 
+    protected ExternalPackageBuilder externalPackageData() {
+      return externalPackageData;
+    }
+
     public Package build() {
       if (alreadyBuilt) {
         return pkg;