Add BuildConfiguration to ConfiguredTargetAndTarget and rename it to ConfiguredTargetAndData. We want to get BuildConfiguration out of ConfiguredTarget because it uses >800K when serialized.

PiperOrigin-RevId: 188600002
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 075a0ab..3d0fbf0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -89,7 +89,7 @@
 import com.google.devtools.build.lib.packages.RuleErrorConsumer;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.packages.TargetUtils;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.syntax.Type.LabelClass;
@@ -173,7 +173,7 @@
    */
   private final ImmutableList<Aspect> aspects;
   private final ImmutableList<AspectDescriptor> aspectDescriptors;
-  private final ListMultimap<String, ConfiguredTargetAndTarget> targetMap;
+  private final ListMultimap<String, ConfiguredTargetAndData> targetMap;
   private final ListMultimap<String, ConfiguredFilesetEntry> filesetEntryMap;
   private final ImmutableMap<Label, ConfigMatchingProvider> configConditions;
   private final AspectAwareAttributeMapper attributes;
@@ -195,7 +195,7 @@
   private RuleContext(
       Builder builder,
       AttributeMap attributes,
-      ListMultimap<String, ConfiguredTargetAndTarget> targetMap,
+      ListMultimap<String, ConfiguredTargetAndData> targetMap,
       ListMultimap<String, ConfiguredFilesetEntry> filesetEntryMap,
       ImmutableMap<Label, ConfigMatchingProvider> configConditions,
       Class<? extends BuildConfiguration.Fragment> universalFragment,
@@ -372,14 +372,14 @@
    * Returns an immutable map from attribute name to list of configured targets for that attribute.
    */
   public ListMultimap<String, ? extends TransitiveInfoCollection> getConfiguredTargetMap() {
-    return Multimaps.transformValues(targetMap, ConfiguredTargetAndTarget::getConfiguredTarget);
+    return Multimaps.transformValues(targetMap, ConfiguredTargetAndData::getConfiguredTarget);
   }
 
   private List<? extends TransitiveInfoCollection> getDeps(String key) {
-    return Lists.transform(targetMap.get(key), ConfiguredTargetAndTarget::getConfiguredTarget);
+    return Lists.transform(targetMap.get(key), ConfiguredTargetAndData::getConfiguredTarget);
   }
 
-  private List<ConfiguredTargetAndTarget> getConfiguredTargetAndTargetDeps(String key) {
+  private List<ConfiguredTargetAndData> getConfiguredTargetAndTargetDeps(String key) {
     return targetMap.get(key);
   }
 
@@ -738,7 +738,7 @@
     ImmutableMap.Builder<String, TransitiveInfoCollection> result = ImmutableMap.builder();
     Map<String, Label> dict = attributes().get(attributeName, BuildType.LABEL_DICT_UNARY);
     Map<Label, ConfiguredTarget> labelToDep = new HashMap<>();
-    for (ConfiguredTargetAndTarget dep : targetMap.get(attributeName)) {
+    for (ConfiguredTargetAndData dep : targetMap.get(attributeName)) {
       labelToDep.put(dep.getTarget().getLabel(), dep.getConfiguredTarget());
     }
 
@@ -758,7 +758,7 @@
       Mode mode) {
     return Lists.transform(
         getPrerequisiteConfiguredTargetAndTargets(attributeName, mode),
-        ConfiguredTargetAndTarget::getConfiguredTarget);
+        ConfiguredTargetAndData::getConfiguredTarget);
   }
 
   /**
@@ -769,7 +769,7 @@
       getSplitPrerequisites(String attributeName) {
     return Maps.transformValues(
         getSplitPrerequisiteConfiguredTargetAndTargets(attributeName),
-        (ctatList) -> Lists.transform(ctatList, ConfiguredTargetAndTarget::getConfiguredTarget));
+        (ctatList) -> Lists.transform(ctatList, ConfiguredTargetAndData::getConfiguredTarget));
   }
 
   /**
@@ -777,7 +777,7 @@
    * attribute. Note that you need to specify the correct mode for the attribute otherwise an
    * exception will be raised.
    */
-  public List<ConfiguredTargetAndTarget> getPrerequisiteConfiguredTargetAndTargets(
+  public List<ConfiguredTargetAndData> getPrerequisiteConfiguredTargetAndTargets(
       String attributeName, Mode mode) {
     Attribute attributeDefinition = attributes().getAttributeDefinition(attributeName);
     if ((mode == Mode.TARGET) && (attributeDefinition.hasSplitConfigurationTransition())) {
@@ -787,7 +787,7 @@
       // deeply nested and we can't easily inject the behavior we want. However, we should fix all
       // such call sites.
       checkAttribute(attributeName, Mode.SPLIT);
-      Map<Optional<String>, List<ConfiguredTargetAndTarget>> map =
+      Map<Optional<String>, List<ConfiguredTargetAndData>> map =
           getSplitPrerequisiteConfiguredTargetAndTargets(attributeName);
       return map.isEmpty() ? ImmutableList.of() : map.entrySet().iterator().next().getValue();
     }
@@ -796,7 +796,7 @@
     return getConfiguredTargetAndTargetDeps(attributeName);
   }
 
-  private Map<Optional<String>, List<ConfiguredTargetAndTarget>>
+  private Map<Optional<String>, List<ConfiguredTargetAndData>>
       getSplitPrerequisiteConfiguredTargetAndTargets(String attributeName) {
     checkAttribute(attributeName, Mode.SPLIT);
     Attribute attributeDefinition = attributes().getAttributeDefinition(attributeName);
@@ -804,7 +804,7 @@
         attributeDefinition.getSplitTransition(
             ConfiguredAttributeMapper.of(rule, configConditions));
     List<BuildOptions> splitOptions = transition.split(getConfiguration().getOptions());
-    List<ConfiguredTargetAndTarget> deps = getConfiguredTargetAndTargetDeps(attributeName);
+    List<ConfiguredTargetAndData> deps = getConfiguredTargetAndTargetDeps(attributeName);
 
     if (splitOptions.isEmpty()) {
       // The split transition is not active. Defer the decision on which CPU to use.
@@ -819,9 +819,9 @@
     }
 
     // Use an ImmutableListMultimap.Builder here to preserve ordering.
-    ImmutableListMultimap.Builder<Optional<String>, ConfiguredTargetAndTarget> result =
+    ImmutableListMultimap.Builder<Optional<String>, ConfiguredTargetAndData> result =
         ImmutableListMultimap.builder();
-    for (ConfiguredTargetAndTarget t : deps) {
+    for (ConfiguredTargetAndData t : deps) {
       if (t.getConfiguredTarget().getConfiguration() != null) {
         result.put(Optional.of(t.getConfiguredTarget().getConfiguration().getCpu()), t);
       } else {
@@ -863,16 +863,16 @@
 
   /**
    * For a given attribute, returns all the ConfiguredTargetAndTargets of that attribute. Each
-   * ConfiguredTargetAndTarget is keyed by the {@link BuildConfiguration} that created it.
+   * ConfiguredTargetAndData is keyed by the {@link BuildConfiguration} that created it.
    */
-  public ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndTarget>
+  public ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndData>
       getPrerequisiteCofiguredTargetAndTargetsByConfiguration(String attributeName, Mode mode) {
-    List<ConfiguredTargetAndTarget> ctatCollection =
+    List<ConfiguredTargetAndData> ctatCollection =
         getPrerequisiteConfiguredTargetAndTargets(attributeName, mode);
-    ImmutableListMultimap.Builder<BuildConfiguration, ConfiguredTargetAndTarget> result =
+    ImmutableListMultimap.Builder<BuildConfiguration, ConfiguredTargetAndData> result =
         ImmutableListMultimap.builder();
-    for (ConfiguredTargetAndTarget ctat : ctatCollection) {
-      result.put(ctat.getConfiguredTarget().getConfiguration(), ctat);
+    for (ConfiguredTargetAndData ctad : ctatCollection) {
+      result.put(ctad.getConfiguredTarget().getConfiguration(), ctad);
     }
     return result.build();
   }
@@ -1395,7 +1395,7 @@
     private PatchTransition disableLipoTransition;
     private final PrerequisiteValidator prerequisiteValidator;
     private final ErrorReporter reporter;
-    private OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap;
+    private OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap;
     private ImmutableMap<Label, ConfigMatchingProvider> configConditions;
     private NestedSet<PackageGroupContents> visibility;
     private ImmutableMap<String, Attribute> aspectAttributes;
@@ -1428,7 +1428,7 @@
       Preconditions.checkNotNull(visibility);
       AttributeMap attributes = ConfiguredAttributeMapper.of(rule, configConditions);
       validateAttributes(attributes);
-      ListMultimap<String, ConfiguredTargetAndTarget> targetMap = createTargetMap();
+      ListMultimap<String, ConfiguredTargetAndData> targetMap = createTargetMap();
       ListMultimap<String, ConfiguredFilesetEntry> filesetEntryMap =
           createFilesetEntryMap(rule, configConditions);
       return new RuleContext(
@@ -1457,7 +1457,7 @@
      * warning messages and sets the error flag as appropriate.
      */
     Builder setPrerequisites(
-        OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap) {
+        OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap) {
       this.prerequisiteMap = Preconditions.checkNotNull(prerequisiteMap);
       return this;
     }
@@ -1506,7 +1506,7 @@
       return this;
     }
 
-    private boolean validateFilesetEntry(FilesetEntry filesetEntry, ConfiguredTargetAndTarget src) {
+    private boolean validateFilesetEntry(FilesetEntry filesetEntry, ConfiguredTargetAndData src) {
       if (src.getConfiguredTarget().getProvider(FilesetProvider.class) != null) {
         return true;
       }
@@ -1544,8 +1544,8 @@
           continue;
         }
         String attributeName = attr.getName();
-        Map<Label, ConfiguredTargetAndTarget> ctMap = new HashMap<>();
-        for (ConfiguredTargetAndTarget prerequisite : prerequisiteMap.get(attr)) {
+        Map<Label, ConfiguredTargetAndData> ctMap = new HashMap<>();
+        for (ConfiguredTargetAndData prerequisite : prerequisiteMap.get(attr)) {
           ctMap.put(
               AliasProvider.getDependencyLabel(prerequisite.getConfiguredTarget()), prerequisite);
         }
@@ -1554,7 +1554,7 @@
         for (FilesetEntry entry : entries) {
           if (entry.getFiles() == null) {
             Label label = entry.getSrcLabel();
-            ConfiguredTargetAndTarget src = ctMap.get(label);
+            ConfiguredTargetAndData src = ctMap.get(label);
             if (!validateFilesetEntry(entry, src)) {
               continue;
             }
@@ -1574,11 +1574,11 @@
     }
 
     /** Determines and returns a map from attribute name to list of configured targets. */
-    private ImmutableSortedKeyListMultimap<String, ConfiguredTargetAndTarget> createTargetMap() {
-      ImmutableSortedKeyListMultimap.Builder<String, ConfiguredTargetAndTarget> mapBuilder =
+    private ImmutableSortedKeyListMultimap<String, ConfiguredTargetAndData> createTargetMap() {
+      ImmutableSortedKeyListMultimap.Builder<String, ConfiguredTargetAndData> mapBuilder =
           ImmutableSortedKeyListMultimap.builder();
 
-      for (Map.Entry<Attribute, Collection<ConfiguredTargetAndTarget>> entry :
+      for (Map.Entry<Attribute, Collection<ConfiguredTargetAndData>> entry :
           prerequisiteMap.asMap().entrySet()) {
         Attribute attribute = entry.getKey();
         if (attribute == null) {
@@ -1592,7 +1592,7 @@
 
         if (attribute.isSilentRuleClassFilter()) {
           Predicate<RuleClass> filter = attribute.getAllowedRuleClassesPredicate();
-          for (ConfiguredTargetAndTarget configuredTarget : entry.getValue()) {
+          for (ConfiguredTargetAndData configuredTarget : entry.getValue()) {
             Target prerequisiteTarget = configuredTarget.getTarget();
             if ((prerequisiteTarget instanceof Rule)
                 && filter.apply(((Rule) prerequisiteTarget).getRuleClassObject())) {
@@ -1601,7 +1601,7 @@
             }
           }
         } else {
-          for (ConfiguredTargetAndTarget configuredTarget : entry.getValue()) {
+          for (ConfiguredTargetAndData configuredTarget : entry.getValue()) {
             validateDirectPrerequisite(attribute, configuredTarget);
             mapBuilder.put(attribute.getName(), configuredTarget);
           }
@@ -1664,10 +1664,7 @@
     }
 
     private String badPrerequisiteMessage(
-        String targetKind,
-        ConfiguredTargetAndTarget prerequisite,
-        String reason,
-        boolean isWarning) {
+        String targetKind, ConfiguredTargetAndData prerequisite, String reason, boolean isWarning) {
       String msgPrefix = targetKind != null ? targetKind + " " : "";
       String msgReason = reason != null ? " (" + reason + ")" : "";
       if (isWarning) {
@@ -1683,7 +1680,7 @@
     private void reportBadPrerequisite(
         Attribute attribute,
         String targetKind,
-        ConfiguredTargetAndTarget prerequisite,
+        ConfiguredTargetAndData prerequisite,
         String reason,
         boolean isWarning) {
       String message = badPrerequisiteMessage(targetKind, prerequisite, reason, isWarning);
@@ -1695,7 +1692,7 @@
     }
 
     private void validateDirectPrerequisiteType(
-        ConfiguredTargetAndTarget prerequisite, Attribute attribute) {
+        ConfiguredTargetAndData prerequisite, Attribute attribute) {
       Target prerequisiteTarget = prerequisite.getTarget();
       Label prerequisiteLabel = prerequisiteTarget.getLabel();
 
@@ -1778,7 +1775,7 @@
     }
 
     private void validateDirectPrerequisiteFileTypes(
-        ConfiguredTargetAndTarget prerequisite, Attribute attribute) {
+        ConfiguredTargetAndData prerequisite, Attribute attribute) {
       if (attribute.isSkipAnalysisTimeFileTypeCheck()) {
         return;
       }
@@ -1830,8 +1827,7 @@
      * dependency is valid if it is from a rule in allowedRuledClasses, OR if all of the providers
      * in requiredProviders are provided by the target.
      */
-    private void validateRuleDependency(
-        ConfiguredTargetAndTarget prerequisite, Attribute attribute) {
+    private void validateRuleDependency(ConfiguredTargetAndData prerequisite, Attribute attribute) {
 
       Set<String> unfulfilledRequirements = new LinkedHashSet<>();
       if (checkRuleDependencyClass(prerequisite, attribute, unfulfilledRequirements)) {
@@ -1855,7 +1851,7 @@
 
     /** Check if prerequisite should be allowed based on its rule class. */
     private boolean checkRuleDependencyClass(
-        ConfiguredTargetAndTarget prerequisite,
+        ConfiguredTargetAndData prerequisite,
         Attribute attribute,
         Set<String> unfulfilledRequirements) {
       if (attribute.getAllowedRuleClassesPredicate() != Predicates.<RuleClass>alwaysTrue()) {
@@ -1883,7 +1879,7 @@
      * <p>If yes, also issues said warning.
      */
     private boolean checkRuleDependencyClassWarnings(
-        ConfiguredTargetAndTarget prerequisite, Attribute attribute) {
+        ConfiguredTargetAndData prerequisite, Attribute attribute) {
       if (attribute
           .getAllowedRuleClassesWarningPredicate()
           .apply(((Rule) prerequisite.getTarget()).getRuleClassObject())) {
@@ -1904,7 +1900,7 @@
 
     /** Check if prerequisite should be allowed based on required providers on the attribute. */
     private boolean checkRuleDependencyMandatoryProviders(
-        ConfiguredTargetAndTarget prerequisite,
+        ConfiguredTargetAndData prerequisite,
         Attribute attribute,
         Set<String> unfulfilledRequirements) {
       RequiredProviders requiredProviders = attribute.getRequiredProviders();
@@ -1931,7 +1927,7 @@
     }
 
     private void validateDirectPrerequisite(
-        Attribute attribute, ConfiguredTargetAndTarget prerequisite) {
+        Attribute attribute, ConfiguredTargetAndData prerequisite) {
       validateDirectPrerequisiteType(prerequisite, attribute);
       validateDirectPrerequisiteFileTypes(prerequisite, attribute);
       if (attribute.performPrereqValidatorCheck()) {