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/AliasProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java
index e650ec5..ce3957e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java
@@ -18,7 +18,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 
 /**
  * A provider that gives information about the aliases a rule was resolved through.
@@ -66,7 +66,7 @@
     return aliasChain;
   }
 
-  public static String printLabelWithAliasChain(ConfiguredTargetAndTarget target) {
+  public static String printLabelWithAliasChain(ConfiguredTargetAndData target) {
     AliasProvider aliasProvider = target.getConfiguredTarget().getProvider(AliasProvider.class);
     String suffix = aliasProvider == null
         ? ""
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java
index 79baad0..da80785 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java
@@ -25,7 +25,7 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.skyframe.AspectFunction;
 import com.google.devtools.build.lib.skyframe.AspectValue;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetValue;
 import com.google.devtools.build.lib.util.OrderedSetMultimap;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -50,7 +50,7 @@
   @Nullable
   public static OrderedSetMultimap<Dependency, ConfiguredAspect> resolveAspectDependencies(
       SkyFunction.Environment env,
-      Map<SkyKey, ConfiguredTargetAndTarget> configuredTargetMap,
+      Map<SkyKey, ConfiguredTargetAndData> configuredTargetMap,
       Iterable<Dependency> deps,
       @Nullable NestedSetBuilder<Package> transitivePackages)
       throws AspectFunction.AspectCreationException, InterruptedException {
@@ -90,7 +90,7 @@
         }
 
         // Validate that aspect is applicable to "bare" configured target.
-        ConfiguredTargetAndTarget associatedTarget =
+        ConfiguredTargetAndData associatedTarget =
             configuredTargetMap.get(
                 ConfiguredTargetValue.key(dep.getLabel(), dep.getConfiguration()));
         if (!aspectMatchesConfiguredTarget(associatedTarget, aspectValue.getAspect())) {
@@ -115,17 +115,17 @@
    * combinations of aspects for a particular configured target, so it would result in a
    * combinatorial explosion of Skyframe nodes.
    */
-  public static OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> mergeAspects(
+  public static OrderedSetMultimap<Attribute, ConfiguredTargetAndData> mergeAspects(
       OrderedSetMultimap<Attribute, Dependency> depValueNames,
-      Map<SkyKey, ConfiguredTargetAndTarget> depConfiguredTargetMap,
+      Map<SkyKey, ConfiguredTargetAndData> depConfiguredTargetMap,
       OrderedSetMultimap<Dependency, ConfiguredAspect> depAspectMap)
       throws MergedConfiguredTarget.DuplicateException {
-    OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> result = OrderedSetMultimap.create();
+    OrderedSetMultimap<Attribute, ConfiguredTargetAndData> result = OrderedSetMultimap.create();
 
     for (Map.Entry<Attribute, Dependency> entry : depValueNames.entries()) {
       Dependency dep = entry.getValue();
       SkyKey depKey = ConfiguredTargetValue.key(dep.getLabel(), dep.getConfiguration());
-      ConfiguredTargetAndTarget depConfiguredTarget = depConfiguredTargetMap.get(depKey);
+      ConfiguredTargetAndData depConfiguredTarget = depConfiguredTargetMap.get(depKey);
 
       result.put(
           entry.getKey(),
@@ -165,8 +165,7 @@
     return aspectKey;
   }
 
-  public static boolean aspectMatchesConfiguredTarget(
-      ConfiguredTargetAndTarget dep, Aspect aspect) {
+  public static boolean aspectMatchesConfiguredTarget(ConfiguredTargetAndData dep, Aspect aspect) {
     if (!aspect.getDefinition().applyToFiles() && !(dep.getTarget() instanceof Rule)) {
       return false;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index ef8118f..8c4c28d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -81,7 +81,7 @@
 import com.google.devtools.build.lib.skyframe.AspectValue;
 import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey;
 import com.google.devtools.build.lib.skyframe.AspectValue.AspectValueKey;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.skyframe.CoverageReportValue;
 import com.google.devtools.build.lib.skyframe.SkyframeAnalysisResult;
@@ -967,7 +967,7 @@
                 getDirectPrerequisiteDependenciesForTesting(
                         eventHandler, ct, configurations, /*toolchainContext=*/ null)
                     .values())),
-        ConfiguredTargetAndTarget::getConfiguredTarget);
+        ConfiguredTargetAndData::getConfiguredTarget);
   }
 
   @VisibleForTesting
@@ -1080,7 +1080,7 @@
     return ImmutableMap.copyOf(keys);
   }
 
-  private OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> getPrerequisiteMapForTesting(
+  private OrderedSetMultimap<Attribute, ConfiguredTargetAndData> getPrerequisiteMapForTesting(
       final ExtendedEventHandler eventHandler,
       ConfiguredTarget target,
       BuildConfigurationCollection configurations,
@@ -1091,11 +1091,11 @@
         getDirectPrerequisiteDependenciesForTesting(
             eventHandler, target, configurations, toolchainContext);
 
-    ImmutableMultimap<Dependency, ConfiguredTargetAndTarget> cts =
+    ImmutableMultimap<Dependency, ConfiguredTargetAndData> cts =
         skyframeExecutor.getConfiguredTargetMapForTesting(
             eventHandler, target.getConfiguration(), ImmutableSet.copyOf(depNodeNames.values()));
 
-    OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> result = OrderedSetMultimap.create();
+    OrderedSetMultimap<Attribute, ConfiguredTargetAndData> result = OrderedSetMultimap.create();
     for (Map.Entry<Attribute, Dependency> entry : depNodeNames.entries()) {
       result.putAll(entry.getKey(), cts.get(entry.getValue()));
     }
@@ -1144,7 +1144,7 @@
   }
 
   @VisibleForTesting
-  public ConfiguredTargetAndTarget getConfiguredTargetAndTargetForTesting(
+  public ConfiguredTargetAndData getConfiguredTargetAndTargetForTesting(
       ExtendedEventHandler eventHandler, Label label, BuildConfiguration config) {
     return skyframeExecutor.getConfiguredTargetAndTargetForTesting(eventHandler, label, config);
   }
@@ -1200,7 +1200,7 @@
     ToolchainContext toolchainContext =
         skyframeExecutor.getToolchainContextForTesting(
             requiredToolchains, targetConfig, eventHandler);
-    OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap =
+    OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap =
         getPrerequisiteMapForTesting(
             eventHandler, configuredTarget, configurations, toolchainContext);
     toolchainContext.resolveToolchains(prerequisiteMap);
@@ -1239,11 +1239,11 @@
       BuildConfigurationCollection configurations)
       throws EvalException, InvalidConfigurationException, InterruptedException,
              InconsistentAspectOrderException {
-    Collection<ConfiguredTargetAndTarget> configuredTargets =
+    Collection<ConfiguredTargetAndData> configuredTargets =
         getPrerequisiteMapForTesting(
                 eventHandler, dependentTarget, configurations, /*toolchainContext=*/ null)
             .values();
-    for (ConfiguredTargetAndTarget ct : configuredTargets) {
+    for (ConfiguredTargetAndData ct : configuredTargets) {
       if (ct.getTarget().getLabel().equals(desiredTarget)) {
         return ct.getConfiguredTarget();
       }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspectFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspectFactory.java
index 16159e3..18462fb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspectFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspectFactory.java
@@ -14,7 +14,7 @@
 package com.google.devtools.build.lib.analysis;
 
 import com.google.devtools.build.lib.packages.AspectParameters;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 
 /**
  * Creates the Skyframe node of an aspect.
@@ -23,12 +23,12 @@
   /**
    * Creates the aspect based on the configured target of the associated rule.
    *
-   * @param ctatBase the ConfiguredTargetAndTarget of the associated rule
+   * @param ctadBase the ConfiguredTargetAndData of the associated rule
    * @param context the context of the associated configured target plus all the attributes the
    *     aspect itself has defined
    * @param parameters information from attributes of the rule that have requested this
    */
   ConfiguredAspect create(
-      ConfiguredTargetAndTarget ctatBase, RuleContext context, AspectParameters parameters)
+      ConfiguredTargetAndData ctadBase, RuleContext context, AspectParameters parameters)
       throws InterruptedException;
 }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 2cd14da..c349b80 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -52,7 +52,7 @@
 import com.google.devtools.build.lib.packages.RuleErrorConsumer;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.syntax.Environment;
 import com.google.devtools.build.lib.syntax.Environment.Extension;
@@ -93,7 +93,7 @@
      */
     void validate(
         RuleContext.Builder contextBuilder,
-        ConfiguredTargetAndTarget prerequisite,
+        ConfiguredTargetAndData prerequisite,
         Attribute attribute);
   }
 
@@ -103,7 +103,7 @@
     @Override
     public void validate(
         RuleContext.Builder contextBuilder,
-        ConfiguredTargetAndTarget prerequisite,
+        ConfiguredTargetAndData prerequisite,
         Attribute attribute) {
       validateDirectPrerequisiteForDeprecation(
           contextBuilder, contextBuilder.getRule(), prerequisite, contextBuilder.forAspect());
@@ -154,7 +154,7 @@
     public static void validateDirectPrerequisiteForDeprecation(
         RuleErrorConsumer errors,
         Rule rule,
-        ConfiguredTargetAndTarget prerequisite,
+        ConfiguredTargetAndData prerequisite,
         boolean forAspect) {
       Target prerequisiteTarget = prerequisite.getTarget();
       Label prerequisiteLabel = prerequisiteTarget.getLabel();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
index f963a22..9647cb3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
@@ -66,7 +66,7 @@
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.profiler.memory.CurrentRuleTracker;
 import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.util.OrderedSetMultimap;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -100,7 +100,7 @@
    * to the {@code AnalysisEnvironment}.
    */
   private NestedSet<PackageGroupContents> convertVisibility(
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap,
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap,
       EventHandler reporter,
       Target target,
       BuildConfiguration packageGroupConfiguration) {
@@ -148,10 +148,10 @@
   }
 
   private TransitiveInfoCollection findPrerequisite(
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap,
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap,
       Label label,
       BuildConfiguration config) {
-    for (ConfiguredTargetAndTarget prerequisite : prerequisiteMap.get(null)) {
+    for (ConfiguredTargetAndData prerequisite : prerequisiteMap.get(null)) {
       if (prerequisite.getTarget().getLabel().equals(label)
           && (prerequisite.getConfiguredTarget().getConfiguration() == config)) {
         return prerequisite.getConfiguredTarget();
@@ -231,7 +231,7 @@
       Target target,
       BuildConfiguration config,
       BuildConfiguration hostConfig,
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap,
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap,
       ImmutableMap<Label, ConfigMatchingProvider> configConditions,
       @Nullable ToolchainContext toolchainContext)
       throws InterruptedException, ActionConflictException {
@@ -305,7 +305,7 @@
       Rule rule,
       BuildConfiguration configuration,
       BuildConfiguration hostConfiguration,
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap,
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap,
       ImmutableMap<Label, ConfigMatchingProvider> configConditions,
       @Nullable ToolchainContext toolchainContext)
       throws InterruptedException, ActionConflictException {
@@ -414,11 +414,11 @@
    */
   public ConfiguredAspect createAspect(
       AnalysisEnvironment env,
-      ConfiguredTargetAndTarget associatedTarget,
+      ConfiguredTargetAndData associatedTarget,
       ImmutableList<Aspect> aspectPath,
       ConfiguredAspectFactory aspectFactory,
       Aspect aspect,
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap,
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap,
       ImmutableMap<Label, ConfigMatchingProvider> configConditions,
       @Nullable ToolchainContext toolchainContext,
       BuildConfiguration aspectConfiguration,
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()) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TargetContext.java b/src/main/java/com/google/devtools/build/lib/analysis/TargetContext.java
index cd1fa08..4f55484 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TargetContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TargetContext.java
@@ -24,7 +24,7 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import java.util.List;
 import java.util.Set;
 import javax.annotation.Nullable;
@@ -48,7 +48,7 @@
    * exception of visibility (i.e., visibility is represented here, even though it is a rule
    * attribute in case of a rule). Rule attributes are handled by the {@link RuleContext} subclass.
    */
-  private final List<ConfiguredTargetAndTarget> directPrerequisites;
+  private final List<ConfiguredTargetAndData> directPrerequisites;
 
   private final NestedSet<PackageGroupContents> visibility;
 
@@ -61,7 +61,7 @@
       AnalysisEnvironment env,
       Target target,
       BuildConfiguration configuration,
-      Set<ConfiguredTargetAndTarget> directPrerequisites,
+      Set<ConfiguredTargetAndData> directPrerequisites,
       NestedSet<PackageGroupContents> visibility) {
     this.env = env;
     this.target = target;
@@ -115,7 +115,7 @@
    */
   public TransitiveInfoCollection maybeFindDirectPrerequisite(Label label,
       BuildConfiguration config) {
-    for (ConfiguredTargetAndTarget prerequisite : directPrerequisites) {
+    for (ConfiguredTargetAndData prerequisite : directPrerequisites) {
       if (prerequisite.getTarget().getLabel().equals(label)
           && (Objects.equal(prerequisite.getConfiguredTarget().getConfiguration(), config))) {
         return prerequisite.getConfiguredTarget();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java
index 490462f..a2e63b9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java
@@ -31,7 +31,7 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.packages.Attribute;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
@@ -113,7 +113,7 @@
   }
 
   public void resolveToolchains(
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap) {
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap) {
     if (!this.requiredToolchains.isEmpty()) {
       this.resolvedToolchainProviders =
           new ResolvedToolchainProviders(findToolchains(resolvedToolchainLabels, prerequisiteMap));
@@ -164,7 +164,7 @@
 
   private static ImmutableMap<Label, ToolchainInfo> findToolchains(
       ResolvedToolchainLabels resolvedToolchainLabels,
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap) {
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap) {
     // Find the prerequisites associated with the $toolchains attribute.
     Optional<Attribute> toolchainAttribute =
         prerequisiteMap
@@ -178,7 +178,7 @@
         "No toolchains attribute found while loading resolved toolchains");
 
     ImmutableMap.Builder<Label, ToolchainInfo> toolchains = new ImmutableMap.Builder<>();
-    for (ConfiguredTargetAndTarget target : prerequisiteMap.get(toolchainAttribute.get())) {
+    for (ConfiguredTargetAndData target : prerequisiteMap.get(toolchainAttribute.get())) {
       Label discoveredLabel = target.getTarget().getLabel();
       Label toolchainType = resolvedToolchainLabels.getType(discoveredLabel);
       if (toolchainType != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelPrerequisiteValidator.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelPrerequisiteValidator.java
index f6033ad..bfb346e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelPrerequisiteValidator.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelPrerequisiteValidator.java
@@ -24,7 +24,7 @@
 import com.google.devtools.build.lib.packages.RequiredProviders;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.syntax.Type;
 
 /** Ensures that a target's prerequisites are visible to it and match its testonly status. */
@@ -33,7 +33,7 @@
 
   @Override
   public void validate(
-      RuleContext.Builder context, ConfiguredTargetAndTarget prerequisite, Attribute attribute) {
+      RuleContext.Builder context, ConfiguredTargetAndData prerequisite, Attribute attribute) {
     validateDirectPrerequisiteVisibility(context, prerequisite, attribute.getName());
     validateDirectPrerequisiteForTestOnly(context, prerequisite);
     ConfiguredRuleClassProvider.DeprecationValidator.validateDirectPrerequisiteForDeprecation(
@@ -41,7 +41,7 @@
   }
 
   private void validateDirectPrerequisiteVisibility(
-      RuleContext.Builder context, ConfiguredTargetAndTarget prerequisite, String attrName) {
+      RuleContext.Builder context, ConfiguredTargetAndData prerequisite, String attrName) {
     Rule rule = context.getRule();
     Target prerequisiteTarget = prerequisite.getTarget();
     if (!context
@@ -100,7 +100,7 @@
   }
 
   private void validateDirectPrerequisiteForTestOnly(
-      RuleContext.Builder context, ConfiguredTargetAndTarget prerequisite) {
+      RuleContext.Builder context, ConfiguredTargetAndData prerequisite) {
     Rule rule = context.getRule();
 
     if (rule.getRuleClassObject().getAdvertisedProviders().canHaveAnyProvider()) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java
index ff56c61..8e569e1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNeverlinkAspect.java
@@ -27,7 +27,7 @@
 import com.google.devtools.build.lib.rules.java.JavaCommon;
 import com.google.devtools.build.lib.rules.java.JavaInfo;
 import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -47,7 +47,7 @@
 
   @Override
   public ConfiguredAspect create(
-      ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters) {
+      ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters) {
     if (!JavaCommon.getConstraints(ruleContext).contains("android")
         && !ruleContext.getRule().getRuleClass().startsWith("android_")) {
       return new ConfiguredAspect.Builder(this, parameters, ruleContext).build();
@@ -72,7 +72,7 @@
                 AndroidCommon.collectTransitiveNeverlinkLibraries(
                     ruleContext,
                     deps,
-                    ctatBase
+                    ctadBase
                         .getConfiguredTarget()
                         .getProvider(JavaRuntimeJarProvider.class)
                         .getRuntimeJars())))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
index adc6bea..93d1709 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
@@ -64,7 +64,7 @@
 import com.google.devtools.build.lib.rules.java.proto.JavaProtoLibraryAspectProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -170,11 +170,11 @@
 
   @Override
   public ConfiguredAspect create(
-      ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters params)
+      ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters params)
       throws InterruptedException {
     ConfiguredAspect.Builder result = new ConfiguredAspect.Builder(this, params, ruleContext);
     Function<Artifact, Artifact> desugaredJars =
-        desugarJarsIfRequested(ctatBase.getConfiguredTarget(), ruleContext, result);
+        desugarJarsIfRequested(ctadBase.getConfiguredTarget(), ruleContext, result);
 
     TriState incrementalAttr =
         TriState.valueOf(params.getOnlyValueOfAttribute("incremental_dexing"));
@@ -193,7 +193,7 @@
         new DexArchiveProvider.Builder()
             .addTransitiveProviders(collectPrerequisites(ruleContext, DexArchiveProvider.class));
     Iterable<Artifact> runtimeJars =
-        getProducedRuntimeJars(ctatBase.getConfiguredTarget(), ruleContext);
+        getProducedRuntimeJars(ctadBase.getConfiguredTarget(), ruleContext);
     if (runtimeJars != null) {
       boolean basenameClash = checkBasenameClash(runtimeJars);
       Set<Set<String>> aspectDexopts = aspectDexopts(ruleContext);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
index 6a1ad08..acb8bd7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
@@ -61,7 +61,7 @@
 import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist;
 import com.google.devtools.build.lib.rules.proto.ProtoSupportDataProvider;
 import com.google.devtools.build.lib.rules.proto.SupportData;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.ArrayList;
@@ -89,11 +89,11 @@
 
   @Override
   public ConfiguredAspect create(
-      ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters)
+      ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters)
       throws InterruptedException {
     // Get SupportData, which is provided by the proto_library rule we attach to.
     SupportData supportData =
-        checkNotNull(ctatBase.getConfiguredTarget().getProvider(ProtoSupportDataProvider.class))
+        checkNotNull(ctadBase.getConfiguredTarget().getProvider(ProtoSupportDataProvider.class))
             .getSupportData();
 
     try {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
index 6a2417d..8a4056b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
@@ -55,7 +55,7 @@
 import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoSupportDataProvider;
 import com.google.devtools.build.lib.rules.proto.SupportData;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import javax.annotation.Nullable;
 
 /** An Aspect which JavaLiteProtoLibrary injects to build Java Lite protos. */
@@ -87,13 +87,13 @@
 
   @Override
   public ConfiguredAspect create(
-      ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters)
+      ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters)
       throws InterruptedException {
     ConfiguredAspect.Builder aspect = new ConfiguredAspect.Builder(this, parameters, ruleContext);
 
     // Get SupportData, which is provided by the proto_library rule we attach to.
     SupportData supportData =
-        checkNotNull(ctatBase.getConfiguredTarget().getProvider(ProtoSupportDataProvider.class))
+        checkNotNull(ctadBase.getConfiguredTarget().getProvider(ProtoSupportDataProvider.class))
             .getSupportData();
 
     JavaProtoAspectCommon aspectCommon =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
index 82030e0..81845ba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
@@ -54,7 +54,7 @@
 import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoSupportDataProvider;
 import com.google.devtools.build.lib.rules.proto.SupportData;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import javax.annotation.Nullable;
 
 /** An Aspect which JavaProtoLibrary injects to build Java SPEED protos. */
@@ -90,7 +90,7 @@
 
   @Override
   public ConfiguredAspect create(
-      ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters)
+      ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters)
       throws InterruptedException {
     ConfiguredAspect.Builder aspect = new ConfiguredAspect.Builder(this, parameters, ruleContext);
 
@@ -100,14 +100,14 @@
 
     // Get SupportData, which is provided by the proto_library rule we attach to.
     SupportData supportData =
-        checkNotNull(ctatBase.getConfiguredTarget().getProvider(ProtoSupportDataProvider.class))
+        checkNotNull(ctadBase.getConfiguredTarget().getProvider(ProtoSupportDataProvider.class))
             .getSupportData();
 
     JavaProtoAspectCommon aspectCommon =
         JavaProtoAspectCommon.getSpeedInstance(ruleContext, javaSemantics, rpcSupport);
     Impl impl = new Impl(ruleContext, supportData, aspectCommon, rpcSupport);
     if (impl.shouldGenerateCode()
-        && ActionReuser.reuseExistingActions(ctatBase.getConfiguredTarget(), ruleContext, aspect)) {
+        && ActionReuser.reuseExistingActions(ctadBase.getConfiguredTarget(), ruleContext, aspect)) {
       return aspect.build();
     }
     impl.addProviders(aspect);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
index be2a839..4150d8e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleBinary.java
@@ -48,7 +48,7 @@
 import com.google.devtools.build.lib.rules.objc.AppleDebugOutputsInfo.OutputType;
 import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs;
 import com.google.devtools.build.lib.rules.objc.MultiArchBinarySupport.DependencySpecificConfiguration;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import java.util.Map;
 import java.util.TreeMap;
 
@@ -144,7 +144,7 @@
             "non_propagated_deps", Mode.SPLIT, ObjcProvider.SKYLARK_CONSTRUCTOR);
     ImmutableListMultimap<BuildConfiguration, TransitiveInfoCollection> configToDepsCollectionMap =
         ruleContext.getPrerequisitesByConfiguration("deps", Mode.SPLIT);
-    ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndTarget>
+    ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndData>
         configToCTATDepsCollectionMap =
             ruleContext.getPrerequisiteCofiguredTargetAndTargetsByConfiguration("deps", Mode.SPLIT);
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
index ab1f93e..98b764b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
@@ -38,7 +38,7 @@
 import com.google.devtools.build.lib.rules.cpp.CppHelper;
 import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
 import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -76,7 +76,7 @@
     MultiArchSplitTransitionProvider.validateMinimumOs(ruleContext);
     PlatformType platformType = MultiArchSplitTransitionProvider.getPlatformType(ruleContext);
 
-    ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndTarget>
+    ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndData>
         configToCTATDepsCollectionMap =
             ruleContext.getPrerequisiteCofiguredTargetAndTargetsByConfiguration("deps", Mode.SPLIT);
     ImmutableListMultimap<BuildConfiguration, ObjcProvider> configToObjcAvoidDepsMap =
@@ -208,7 +208,7 @@
       RuleContext ruleContext,
       BuildConfiguration buildConfiguration,
       IntermediateArtifacts intermediateArtifacts,
-      List<ConfiguredTargetAndTarget> propagatedConfigredTargetAndTargetDeps,
+      List<ConfiguredTargetAndData> propagatedConfigredTargetAndTargetDeps,
       Optional<ObjcProvider> protosObjcProvider) {
 
     CompilationArtifacts compilationArtifacts = new CompilationArtifacts.Builder().build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 06759dc..5a65d0b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -72,7 +72,7 @@
 import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoSupportDataProvider;
 import com.google.devtools.build.lib.rules.proto.SupportData;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import java.util.List;
@@ -225,9 +225,9 @@
 
   @Override
   public ConfiguredAspect create(
-      ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters)
+      ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters)
       throws InterruptedException {
-    ConfiguredTarget base = ctatBase.getConfiguredTarget();
+    ConfiguredTarget base = ctadBase.getConfiguredTarget();
     if (isProtoRule(base)) {
       if (shouldAttachToProtoRule(ruleContext)) {
         return proto(base, ruleContext, parameters);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
index 372412f..fa16622 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchBinarySupport.java
@@ -39,7 +39,7 @@
 import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
 import com.google.devtools.build.lib.rules.objc.CompilationSupport.ExtraLinkArgs;
 import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -211,7 +211,7 @@
   public ImmutableSet<DependencySpecificConfiguration> getDependencySpecificConfigurations(
       Map<BuildConfiguration, CcToolchainProvider> childConfigurationsAndToolchains,
       ImmutableListMultimap<BuildConfiguration, TransitiveInfoCollection> configToDepsCollectionMap,
-      ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndTarget>
+      ImmutableListMultimap<BuildConfiguration, ConfiguredTargetAndData>
           configToCTATDepsCollectionMap,
       ImmutableListMultimap<BuildConfiguration, ObjcProvider> configurationToNonPropagatedObjcMap,
       Iterable<TransitiveInfoCollection> dylibProviders)
@@ -299,7 +299,7 @@
       RuleContext ruleContext,
       BuildConfiguration buildConfiguration,
       IntermediateArtifacts intermediateArtifacts,
-      List<ConfiguredTargetAndTarget> propagatedConfiguredTargetAndTargetDeps,
+      List<ConfiguredTargetAndData> propagatedConfiguredTargetAndDataDeps,
       List<ObjcProvider> nonPropagatedObjcDeps,
       Iterable<ObjcProvider> additionalDepProviders) {
 
@@ -307,7 +307,7 @@
         new ObjcCommon.Builder(ruleContext, buildConfiguration)
             .setCompilationAttributes(
                 CompilationAttributes.Builder.fromRuleContext(ruleContext).build())
-            .addDeps(propagatedConfiguredTargetAndTargetDeps)
+            .addDeps(propagatedConfiguredTargetAndDataDeps)
             .addDepObjcProviders(additionalDepProviders)
             .addNonPropagatedDepObjcProviders(nonPropagatedObjcDeps)
             .setIntermediateArtifacts(intermediateArtifacts)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
index fbfa23e..bb20db4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
@@ -72,7 +72,7 @@
 import com.google.devtools.build.lib.rules.cpp.CcLinkParamsInfo;
 import com.google.devtools.build.lib.rules.cpp.CppFileTypes;
 import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -249,14 +249,14 @@
       return this;
     }
 
-    Builder addDeps(List<ConfiguredTargetAndTarget> deps) {
+    Builder addDeps(List<ConfiguredTargetAndData> deps) {
       ImmutableList.Builder<ObjcProvider> propagatedObjcDeps =
           ImmutableList.<ObjcProvider>builder();
       ImmutableList.Builder<CcCompilationInfo> cppDeps = ImmutableList.<CcCompilationInfo>builder();
       ImmutableList.Builder<CcLinkParamsInfo> cppDepLinkParams =
           ImmutableList.<CcLinkParamsInfo>builder();
 
-      for (ConfiguredTargetAndTarget dep : deps) {
+      for (ConfiguredTargetAndData dep : deps) {
         ConfiguredTarget depCT = dep.getConfiguredTarget();
         addAnyProviders(propagatedObjcDeps, depCT, ObjcProvider.SKYLARK_CONSTRUCTOR);
         addAnyProviders(cppDeps, depCT, CcCompilationInfo.PROVIDER);
@@ -567,7 +567,7 @@
       return new ObjcCommon(objcProvider.build(), compilationArtifacts);
     }
 
-    private static boolean isCcLibrary(ConfiguredTargetAndTarget info) {
+    private static boolean isCcLibrary(ConfiguredTargetAndData info) {
       try {
         String targetName = info.getTarget().getTargetKind();
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java
index 010f2bc..279f19e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoAspect.java
@@ -29,7 +29,7 @@
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.SkylarkNativeAspect;
 import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 
 /**
  * Aspect that gathers the proto dependencies of the attached rule target, and propagates the proto
@@ -47,7 +47,7 @@
 
   @Override
   public ConfiguredAspect create(
-      ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters)
+      ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters)
       throws InterruptedException {
     ConfiguredAspect.Builder aspectBuilder = new ConfiguredAspect.Builder(
         this, parameters, ruleContext);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java
index 6add80c..8552434 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ProtoAttributes.java
@@ -30,7 +30,7 @@
 import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
 import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist;
 import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import java.util.ArrayList;
 
 /** Common rule attributes used by an objc_proto_library. */
@@ -91,7 +91,7 @@
     return ruleContext.attributes().has(ObjcProtoLibraryRule.PORTABLE_PROTO_FILTERS_ATTR);
   }
 
-  private boolean isObjcProtoLibrary(ConfiguredTargetAndTarget dependency) {
+  private boolean isObjcProtoLibrary(ConfiguredTargetAndData dependency) {
     try {
       String targetName = dependency.getTarget().getTargetKind();
       return targetName.equals("objc_proto_library rule");
@@ -247,7 +247,7 @@
   }
 
   private boolean hasObjcProtoLibraryDependencies() {
-    for (ConfiguredTargetAndTarget dep :
+    for (ConfiguredTargetAndData dep :
         ruleContext.getPrerequisiteConfiguredTargetAndTargets("deps", Mode.TARGET)) {
       if (isObjcProtoLibrary(dep)) {
         return true;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index 54a0a37..917dfcb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -260,15 +260,17 @@
 
     ConfiguredTarget associatedTarget = baseConfiguredTargetValue.getConfiguredTarget();
 
-    ConfiguredTargetAndTarget associatedConfiguredTargetAndTarget;
+    ConfiguredTargetAndData associatedConfiguredTargetAndData;
     Package targetPkg =
         ((PackageValue)
                 env.getValue(PackageValue.key(associatedTarget.getLabel().getPackageIdentifier())))
             .getPackage();
     try {
-      associatedConfiguredTargetAndTarget =
-          new ConfiguredTargetAndTarget(
-              associatedTarget, targetPkg.getTarget(associatedTarget.getLabel().getName()));
+      associatedConfiguredTargetAndData =
+          new ConfiguredTargetAndData(
+              associatedTarget,
+              targetPkg.getTarget(associatedTarget.getLabel().getName()),
+              associatedTarget.getConfiguration());
     } catch (NoSuchTargetException e) {
       throw new IllegalStateException("Name already verified", e);
     }
@@ -276,7 +278,7 @@
     if (baseConfiguredTargetValue.getConfiguredTarget().getProvider(AliasProvider.class) != null) {
       return createAliasAspect(
           env,
-          associatedConfiguredTargetAndTarget.getTarget(),
+          associatedConfiguredTargetAndData.getTarget(),
           aspect,
           key,
           baseConfiguredTargetValue.getConfiguredTarget());
@@ -307,14 +309,14 @@
         env.getListener()
             .handle(
                 Event.error(
-                    associatedConfiguredTargetAndTarget.getTarget().getLocation(), e.getMessage()));
+                    associatedConfiguredTargetAndData.getTarget().getLocation(), e.getMessage()));
 
         throw new AspectFunctionException(
             new AspectCreationException(e.getMessage(), associatedTarget.getLabel()));
       }
     }
-    associatedConfiguredTargetAndTarget =
-        associatedConfiguredTargetAndTarget.fromConfiguredTarget(associatedTarget);
+    associatedConfiguredTargetAndData =
+        associatedConfiguredTargetAndData.fromConfiguredTarget(associatedTarget);
     aspectPathBuilder.add(aspect);
 
     SkyframeDependencyResolver resolver = view.createDependencyResolver(env);
@@ -329,13 +331,13 @@
     // will be present this way.
     TargetAndConfiguration originalTargetAndAspectConfiguration =
         new TargetAndConfiguration(
-            associatedConfiguredTargetAndTarget.getTarget(), aspectConfiguration);
+            associatedConfiguredTargetAndData.getTarget(), aspectConfiguration);
     ImmutableList<Aspect> aspectPath = aspectPathBuilder.build();
     try {
       // Get the configuration targets that trigger this rule's configurable attributes.
       ImmutableMap<Label, ConfigMatchingProvider> configConditions =
           ConfiguredTargetFunction.getConfigConditions(
-              associatedConfiguredTargetAndTarget.getTarget(),
+              associatedConfiguredTargetAndData.getTarget(),
               env,
               resolver,
               originalTargetAndAspectConfiguration,
@@ -356,7 +358,7 @@
                 String.format(
                     "aspect %s applied to %s",
                     aspect.getDescriptor().getDescription(),
-                    associatedConfiguredTargetAndTarget.getTarget().toString()),
+                    associatedConfiguredTargetAndData.getTarget().toString()),
                 requiredToolchains,
                 key.getAspectConfigurationKey());
       } catch (ToolchainContextException e) {
@@ -367,7 +369,7 @@
         return null;
       }
 
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> depValueMap;
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> depValueMap;
       try {
         depValueMap =
             ConfiguredTargetFunction.computeDependencies(
@@ -398,7 +400,7 @@
           aspectPath,
           aspect,
           aspectFactory,
-          associatedConfiguredTargetAndTarget,
+          associatedConfiguredTargetAndData,
           aspectConfiguration,
           configConditions,
           toolchainContext,
@@ -523,11 +525,11 @@
       ImmutableList<Aspect> aspectPath,
       Aspect aspect,
       ConfiguredAspectFactory aspectFactory,
-      ConfiguredTargetAndTarget associatedTarget,
+      ConfiguredTargetAndData associatedTarget,
       BuildConfiguration aspectConfiguration,
       ImmutableMap<Label, ConfigMatchingProvider> configConditions,
       ToolchainContext toolchainContext,
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> directDeps,
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> directDeps,
       @Nullable NestedSetBuilder<Package> transitivePackagesForPackageRootResolution)
       throws AspectFunctionException, InterruptedException {
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
new file mode 100644
index 0000000..829dac1
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
@@ -0,0 +1,80 @@
+// Copyright 2018 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.skyframe;
+
+import com.google.common.base.Preconditions;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.packages.Package;
+import com.google.devtools.build.lib.packages.Target;
+
+/**
+ * A container class for a {@link ConfiguredTarget} and associated data, {@link Target} and {@link
+ * BuildConfiguration}. In the future, {@link ConfiguredTarget} objects will no longer contain their
+ * associated {@link BuildConfiguration}. Consumers that need the {@link Target} or {@link
+ * BuildConfiguration} must therefore have access to one of these objects.
+ *
+ * <p>These objects are intended to be short-lived, never stored in Skyframe, since they pair three
+ * heavyweight objects, a {@link ConfiguredTarget}, a {@link Target} (which holds a {@link
+ * Package}), and a {@link BuildConfiguration}.
+ */
+public class ConfiguredTargetAndData {
+  private final ConfiguredTarget configuredTarget;
+  private final Target target;
+  private final BuildConfiguration configuration;
+
+  ConfiguredTargetAndData(
+      ConfiguredTarget configuredTarget, Target target, BuildConfiguration configuration) {
+    this.configuredTarget = configuredTarget;
+    this.target = target;
+    this.configuration = configuration;
+    Preconditions.checkState(
+        configuredTarget.getLabel().equals(target.getLabel()),
+        "Unable to construct ConfiguredTargetAndData:"
+            + " ConfiguredTarget's label %s is not equal to Target's label %s",
+        configuredTarget.getLabel(),
+        target.getLabel());
+    Preconditions.checkState(
+        configuration == configuredTarget.getConfiguration(),
+        "Configurations don't match: %s %s (%s %s)",
+        configuration,
+        configuredTarget.getConfiguration(),
+        configuredTarget,
+        target);
+  }
+
+  /**
+   * For use with {@code MergedConfiguredTarget} and similar, where we create a virtual {@link
+   * ConfiguredTarget} corresponding to the same {@link Target}.
+   */
+  public ConfiguredTargetAndData fromConfiguredTarget(ConfiguredTarget maybeNew) {
+    if (configuredTarget.equals(maybeNew)) {
+      return this;
+    }
+    return new ConfiguredTargetAndData(maybeNew, this.target, configuration);
+  }
+
+  public Target getTarget() {
+    return target;
+  }
+
+  public BuildConfiguration getConfiguration() {
+    return configuration;
+  }
+
+  public ConfiguredTarget getConfiguredTarget() {
+    return configuredTarget;
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndTarget.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndTarget.java
deleted file mode 100644
index 15480b6..0000000
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndTarget.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.skyframe;
-
-import com.google.common.base.Preconditions;
-import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.packages.Package;
-import com.google.devtools.build.lib.packages.Target;
-
-/**
- * A container class for a {@link ConfiguredTarget} and {@link Target}. In the future, {@link
- * ConfiguredTarget} objects will no longer contain their associated {@link Target}. Consumers that
- * need the {@link Target} must therefore have access to one of these objects.
- *
- * <p>These objects are intended to be short-lived, never stored in Skyframe, since they pair two
- * heavyweight objects, a {@link ConfiguredTarget} and a {@link Target}, which holds a {@link
- * Package}.
- */
-public class ConfiguredTargetAndTarget {
-  private final ConfiguredTarget configuredTarget;
-  private final Target target;
-
-  ConfiguredTargetAndTarget(ConfiguredTarget configuredTarget, Target target) {
-    this.configuredTarget = configuredTarget;
-    this.target = target;
-    Preconditions.checkState(
-        configuredTarget.getLabel().equals(target.getLabel()),
-        "Unable to construct ConfiguredTargetAndTarget:"
-            + " ConfiguredTarget's label %s is not equal to Target's label %s",
-        configuredTarget.getLabel(),
-        target.getLabel());
-  }
-
-  /**
-   * For use with {@code MergedConfiguredTarget} and similar, where we create a virtual {@link
-   * ConfiguredTarget} corresponding to the same {@link Target}.
-   */
-  public ConfiguredTargetAndTarget fromConfiguredTarget(ConfiguredTarget maybeNew) {
-    if (configuredTarget.equals(maybeNew)) {
-      return this;
-    }
-    return new ConfiguredTargetAndTarget(maybeNew, this.target);
-  }
-
-  public Target getTarget() {
-    return target;
-  }
-
-  public ConfiguredTarget getConfiguredTarget() {
-    return configuredTarget;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index 42b32c9..ea70f6e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -258,7 +258,7 @@
       }
 
       // Calculate the dependencies of this target.
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> depValueMap =
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> depValueMap =
           computeDependencies(
               env,
               resolver,
@@ -382,7 +382,7 @@
    *     the host configuration as early as possible and pass this reference to all consumers
    */
   @Nullable
-  static OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> computeDependencies(
+  static OrderedSetMultimap<Attribute, ConfiguredTargetAndData> computeDependencies(
       Environment env,
       SkyframeDependencyResolver resolver,
       TargetAndConfiguration ctgValue,
@@ -432,7 +432,7 @@
     }
 
     // Resolve configured target dependencies and handle errors.
-    Map<SkyKey, ConfiguredTargetAndTarget> depValues =
+    Map<SkyKey, ConfiguredTargetAndData> depValues =
         resolveConfiguredTargetDependencies(
             env,
             depValueNames.values(),
@@ -522,7 +522,7 @@
     }
     configValueNames = staticConfigs.build();
 
-    Map<SkyKey, ConfiguredTargetAndTarget> configValues =
+    Map<SkyKey, ConfiguredTargetAndData> configValues =
         resolveConfiguredTargetDependencies(
             env,
             configValueNames,
@@ -555,12 +555,12 @@
 
   /**
    * Resolves the targets referenced in depValueNames and returns their {@link
-   * ConfiguredTargetAndTarget} instances.
+   * ConfiguredTargetAndData} instances.
    *
    * <p>Returns null if not all instances are available yet.
    */
   @Nullable
-  private static Map<SkyKey, ConfiguredTargetAndTarget> resolveConfiguredTargetDependencies(
+  private static Map<SkyKey, ConfiguredTargetAndData> resolveConfiguredTargetDependencies(
       Environment env,
       Collection<Dependency> deps,
       @Nullable NestedSetBuilder<Package> transitivePackagesForPackageRootResolution,
@@ -582,7 +582,7 @@
                 deps, input -> PackageValue.key(input.getLabel().getPackageIdentifier())));
     Map<SkyKey, ValueOrException<ConfiguredValueCreationException>> depValuesOrExceptions =
             env.getValuesOrThrow(depKeys, ConfiguredValueCreationException.class);
-    Map<SkyKey, ConfiguredTargetAndTarget> result = Maps.newHashMapWithExpectedSize(deps.size());
+    Map<SkyKey, ConfiguredTargetAndData> result = Maps.newHashMapWithExpectedSize(deps.size());
     Set<SkyKey> aliasPackagesToFetch = new HashSet<>();
     List<Dependency> aliasDepsToRedo = new ArrayList<>();
     Map<SkyKey, SkyValue> aliasPackageValues = null;
@@ -629,9 +629,10 @@
             try {
               result.put(
                   key,
-                  new ConfiguredTargetAndTarget(
+                  new ConfiguredTargetAndData(
                       depValue.getConfiguredTarget(),
-                      pkgValue.getPackage().getTarget(depLabel.getName())));
+                      pkgValue.getPackage().getTarget(depLabel.getName()),
+                      depValue.getConfiguredTarget().getConfiguration()));
             } catch (NoSuchTargetException e) {
               throw new IllegalStateException("Target already verified for " + dep, e);
             }
@@ -676,7 +677,7 @@
       Environment env,
       Target target,
       BuildConfiguration configuration,
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> depValueMap,
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> depValueMap,
       ImmutableMap<Label, ConfigMatchingProvider> configConditions,
       @Nullable ToolchainContext toolchainContext,
       @Nullable NestedSetBuilder<Package> transitivePackagesForPackageRootResolution)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
index 5d9cde9..3cb3451 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -504,7 +504,7 @@
       Target target,
       BuildConfiguration configuration,
       CachingAnalysisEnvironment analysisEnvironment,
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> prerequisiteMap,
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap,
       ImmutableMap<Label, ConfigMatchingProvider> configConditions,
       @Nullable ToolchainContext toolchainContext)
       throws InterruptedException, ActionConflictException {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 8390a34..8783f43 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -1284,7 +1284,7 @@
   }
 
   /**
-   * Returns the {@link ConfiguredTargetAndTarget}s corresponding to the given keys.
+   * Returns the {@link ConfiguredTargetAndData}s corresponding to the given keys.
    *
    * <p>For use for legacy support and tests calling through {@code BuildView} only.
    *
@@ -1292,7 +1292,7 @@
    * returned list.
    */
   @ThreadSafety.ThreadSafe
-  public ImmutableList<ConfiguredTargetAndTarget> getConfiguredTargetsForTesting(
+  public ImmutableList<ConfiguredTargetAndData> getConfiguredTargetsForTesting(
       ExtendedEventHandler eventHandler,
       BuildConfiguration originalConfig,
       Iterable<Dependency> keys) {
@@ -1300,7 +1300,7 @@
   }
 
   /**
-   * Returns a map from {@link Dependency} inputs to the {@link ConfiguredTargetAndTarget}s
+   * Returns a map from {@link Dependency} inputs to the {@link ConfiguredTargetAndData}s
    * corresponding to those dependencies.
    *
    * <p>For use for legacy support and tests calling through {@code BuildView} only.
@@ -1309,7 +1309,7 @@
    * returned list.
    */
   @ThreadSafety.ThreadSafe
-  public ImmutableMultimap<Dependency, ConfiguredTargetAndTarget> getConfiguredTargetMapForTesting(
+  public ImmutableMultimap<Dependency, ConfiguredTargetAndData> getConfiguredTargetMapForTesting(
       ExtendedEventHandler eventHandler,
       BuildConfiguration originalConfig,
       Iterable<Dependency> keys) {
@@ -1347,7 +1347,7 @@
       reportCycles(eventHandler, entry.getValue().getCycleInfo(), entry.getKey());
     }
 
-    ImmutableMultimap.Builder<Dependency, ConfiguredTargetAndTarget> cts =
+    ImmutableMultimap.Builder<Dependency, ConfiguredTargetAndData> cts =
         ImmutableMultimap.builder();
 
     // Logic copied from ConfiguredTargetFunction#computeDependencies.
@@ -1399,11 +1399,14 @@
           }
 
           try {
+            ConfiguredTarget mergedTarget =
+                MergedConfiguredTarget.of(configuredTarget, configuredAspects);
             cts.put(
                 key,
-                new ConfiguredTargetAndTarget(
-                    MergedConfiguredTarget.of(configuredTarget, configuredAspects),
-                    packageValue.getPackage().getTarget(configuredTarget.getLabel().getName())));
+                new ConfiguredTargetAndData(
+                    mergedTarget,
+                    packageValue.getPackage().getTarget(configuredTarget.getLabel().getName()),
+                    mergedTarget.getConfiguration()));
 
           } catch (DuplicateException | NoSuchTargetException e) {
             throw new IllegalStateException(
@@ -1661,21 +1664,19 @@
       Label label,
       BuildConfiguration configuration,
       ConfigurationTransition transition) {
-    ConfiguredTargetAndTarget configuredTargetAndTarget =
+    ConfiguredTargetAndData configuredTargetAndData =
         getConfiguredTargetAndTargetForTesting(eventHandler, label, configuration, transition);
-    return configuredTargetAndTarget == null
-        ? null
-        : configuredTargetAndTarget.getConfiguredTarget();
+    return configuredTargetAndData == null ? null : configuredTargetAndData.getConfiguredTarget();
   }
 
   @VisibleForTesting
   @Nullable
-  public ConfiguredTargetAndTarget getConfiguredTargetAndTargetForTesting(
+  public ConfiguredTargetAndData getConfiguredTargetAndTargetForTesting(
       ExtendedEventHandler eventHandler,
       Label label,
       BuildConfiguration configuration,
       ConfigurationTransition transition) {
-    ConfiguredTargetAndTarget configuredTargetAndTarget =
+    ConfiguredTargetAndData configuredTargetAndData =
         Iterables.getFirst(
             getConfiguredTargetsForTesting(
                 eventHandler,
@@ -1686,12 +1687,12 @@
                         : Dependency.withTransitionAndAspects(
                             label, transition, AspectCollection.EMPTY))),
             null);
-    return configuredTargetAndTarget;
+    return configuredTargetAndData;
   }
 
   @VisibleForTesting
   @Nullable
-  public ConfiguredTargetAndTarget getConfiguredTargetAndTargetForTesting(
+  public ConfiguredTargetAndData getConfiguredTargetAndTargetForTesting(
       ExtendedEventHandler eventHandler, Label label, BuildConfiguration configuration) {
     return getConfiguredTargetAndTargetForTesting(
         eventHandler, label, configuration, NoTransition.INSTANCE);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java
index 4db1988..a01560e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java
@@ -50,7 +50,7 @@
 
   @Override
   public ConfiguredAspect create(
-      ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters)
+      ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters)
       throws InterruptedException {
     SkylarkRuleContext skylarkRuleContext = null;
     try (Mutability mutability = Mutability.create("aspect")) {
@@ -77,7 +77,7 @@
             skylarkAspect
                 .getImplementation()
                 .call(
-                    /*args=*/ ImmutableList.of(ctatBase.getConfiguredTarget(), skylarkRuleContext),
+                    /*args=*/ ImmutableList.of(ctadBase.getConfiguredTarget(), skylarkRuleContext),
                     /* kwargs= */ ImmutableMap.of(),
                     /*ast=*/ null,
                     env);
@@ -94,7 +94,7 @@
         }
         return createAspect(aspectSkylarkObject, aspectDescriptor, ruleContext);
       } catch (EvalException e) {
-        addAspectToStackTrace(ctatBase.getTarget(), e);
+        addAspectToStackTrace(ctadBase.getTarget(), e);
         ruleContext.ruleError("\n" + e.print());
         return null;
       }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java
index 04387b1..872fe99 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapperTest.java
@@ -24,7 +24,7 @@
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
 import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import org.junit.Before;
 import org.junit.Test;
@@ -42,7 +42,7 @@
 
   @Before
   public final void createMapper() throws Exception {
-    ConfiguredTargetAndTarget ctat =
+    ConfiguredTargetAndData ctad =
         scratchConfiguredTargetAndTarget(
             "foo",
             "myrule",
@@ -51,8 +51,8 @@
             "    srcs = [':a.cc'],",
             "    linkstatic = select({'//conditions:default': 1}))");
 
-    RuleConfiguredTarget ct = (RuleConfiguredTarget) ctat.getConfiguredTarget();
-    rule = (Rule) ctat.getTarget();
+    RuleConfiguredTarget ct = (RuleConfiguredTarget) ctad.getConfiguredTarget();
+    rule = (Rule) ctad.getTarget();
     Attribute aspectAttr = new Attribute.Builder<Label>("fromaspect", BuildType.LABEL)
         .allowedFileTypes(FileTypeSet.ANY_FILE)
         .build();
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
index d6d0a96..cb4662a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
@@ -33,7 +33,7 @@
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy;
 import com.google.devtools.build.lib.packages.NativeAspectClass;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import org.junit.Test;
@@ -60,7 +60,7 @@
 
     @Override
     public ConfiguredAspect create(
-        ConfiguredTargetAndTarget ctatBase, RuleContext context, AspectParameters parameters) {
+        ConfiguredTargetAndData ctadBase, RuleContext context, AspectParameters parameters) {
       throw new IllegalStateException();
     }
 
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
index a3cb103..9ec6185 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
@@ -45,7 +45,7 @@
 import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault;
 import com.google.devtools.build.lib.packages.NativeAspectClass;
 import com.google.devtools.build.lib.skyframe.AspectValue;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.testutil.TestConstants;
 import com.google.devtools.build.lib.vfs.ModifiedFileSet;
 import com.google.devtools.build.lib.vfs.Root;
@@ -437,7 +437,7 @@
 
       @Override
       public ConfiguredAspect create(
-          ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters)
+          ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters)
           throws InterruptedException {
         Object lateBoundPrereq = ruleContext.getPrerequisite(":late", TARGET);
         return new ConfiguredAspect.Builder(this, parameters, ruleContext)
@@ -507,7 +507,7 @@
 
       @Override
       public ConfiguredAspect create(
-          ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters)
+          ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters)
           throws InterruptedException {
         ruleContext.registerAction(new NullAction(ruleContext.createOutputArtifact()));
         return new ConfiguredAspect.Builder(this, parameters, ruleContext).build();
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
index 11c6c92..8ffa3ce 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
@@ -44,7 +44,7 @@
 import com.google.devtools.build.lib.events.OutputFilter.RegexOutputFilter;
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.testutil.Suite;
 import com.google.devtools.build.lib.testutil.TestConstants;
 import com.google.devtools.build.lib.testutil.TestSpec;
@@ -92,7 +92,7 @@
     Rule ruleTarget = (Rule) getTarget("//pkg:foo");
     assertThat(ruleTarget.getRuleClass()).isEqualTo("genrule");
 
-    ConfiguredTargetAndTarget ruleCTAT = getConfiguredTargetAndTarget("//pkg:foo");
+    ConfiguredTargetAndData ruleCTAT = getConfiguredTargetAndTarget("//pkg:foo");
 
     assertThat(ruleCTAT.getTarget()).isSameAs(ruleTarget);
   }
@@ -116,9 +116,9 @@
     //scratch.file("tests/small_test_1.py");
 
     update("//tests:smallTests");
-    ConfiguredTargetAndTarget test1 = getConfiguredTargetAndTarget("//tests:small_test_1");
-    ConfiguredTargetAndTarget test2 = getConfiguredTargetAndTarget("//tests:small_test_2");
-    ConfiguredTargetAndTarget suite = getConfiguredTargetAndTarget("//tests:smallTests");
+    ConfiguredTargetAndData test1 = getConfiguredTargetAndTarget("//tests:small_test_1");
+    ConfiguredTargetAndData test2 = getConfiguredTargetAndTarget("//tests:small_test_2");
+    ConfiguredTargetAndData suite = getConfiguredTargetAndTarget("//tests:smallTests");
 
     ConfiguredTarget test1CT = test1.getConfiguredTarget();
     ConfiguredTarget test2CT = test2.getConfiguredTarget();
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ConfigurableAttributesTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ConfigurableAttributesTest.java
index 6b39969..97769f9 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/ConfigurableAttributesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/ConfigurableAttributesTest.java
@@ -29,7 +29,7 @@
 import com.google.devtools.build.lib.packages.AttributeMap;
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
 import com.google.devtools.build.lib.util.FileTypeSet;
@@ -434,7 +434,7 @@
 
     // Configuration a:
     useConfiguration("--test_arg=a");
-    ConfiguredTargetAndTarget binary = getConfiguredTargetAndTarget("//test:the_rule");
+    ConfiguredTargetAndData binary = getConfiguredTargetAndTarget("//test:the_rule");
     AttributeMap attributes = getMapperFromConfiguredTargetAndTarget(binary);
     assertThat(attributes.get("$computed_attr", Type.STRING)).isEqualTo("a2");
 
@@ -1080,8 +1080,8 @@
         "    }))");
 
     useConfiguration("--test_arg=a");
-    ConfiguredTargetAndTarget ctat = getConfiguredTargetAndTarget("//srctest:gen");
-    AttributeMap attributes = getMapperFromConfiguredTargetAndTarget(ctat);
+    ConfiguredTargetAndData ctad = getConfiguredTargetAndTarget("//srctest:gen");
+    AttributeMap attributes = getMapperFromConfiguredTargetAndTarget(ctad);
     assertThat(attributes.get("srcs", BuildType.LABEL_LIST)).isEmpty();
   }
 
@@ -1099,8 +1099,8 @@
         "    boolean_attr = 1)");
 
     useConfiguration("--test_arg=a");
-    ConfiguredTargetAndTarget ctat = getConfiguredTargetAndTarget("//foo:rule");
-    AttributeMap attributes = getMapperFromConfiguredTargetAndTarget(ctat);
+    ConfiguredTargetAndData ctad = getConfiguredTargetAndTarget("//foo:rule");
+    AttributeMap attributes = getMapperFromConfiguredTargetAndTarget(ctad);
     assertThat(attributes.get("dep", BuildType.LABEL)).isEqualTo(
         Label.parseAbsolute("//foo:default"));
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java
index 9208bb9..10f0171 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/ConfiguredAttributeMapperTest.java
@@ -22,7 +22,7 @@
 import com.google.devtools.build.lib.packages.AttributeMap;
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.syntax.Type;
 import java.util.ArrayList;
 import java.util.List;
@@ -46,8 +46,8 @@
    * Returns a ConfiguredAttributeMapper bound to the given rule with the target configuration.
    */
   private ConfiguredAttributeMapper getMapper(String label) throws Exception {
-    ConfiguredTargetAndTarget ctat = getConfiguredTargetAndTarget(label);
-    return getMapperFromConfiguredTargetAndTarget(ctat);
+    ConfiguredTargetAndData ctad = getConfiguredTargetAndTarget(label);
+    return getMapperFromConfiguredTargetAndTarget(ctad);
   }
 
   private void writeConfigRules() throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
index 6e1c063..2b4cdbb 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
@@ -58,7 +58,7 @@
 import com.google.devtools.build.lib.runtime.KeepGoingOption;
 import com.google.devtools.build.lib.runtime.LoadingPhaseThreadsOption;
 import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
 import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor;
@@ -390,12 +390,12 @@
     return update(new EventBus(), defaultFlags(), aspects, labels);
   }
 
-  protected ConfiguredTargetAndTarget getConfiguredTargetAndTarget(String label)
+  protected ConfiguredTargetAndData getConfiguredTargetAndTarget(String label)
       throws InterruptedException {
     return getConfiguredTargetAndTarget(label, getTargetConfiguration());
   }
 
-  protected ConfiguredTargetAndTarget getConfiguredTargetAndTarget(
+  protected ConfiguredTargetAndData getConfiguredTargetAndTarget(
       String label, BuildConfiguration config) {
     ensureUpdateWasCalled();
     Label parsedLabel;
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index e3f69f5..a60b3ec 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -124,7 +124,7 @@
 import com.google.devtools.build.lib.skyframe.AspectValue;
 import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants;
 import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.skyframe.DiffAwareness;
 import com.google.devtools.build.lib.skyframe.LegacyLoadingPhaseRunner;
@@ -744,20 +744,19 @@
   }
 
   /**
-   * Returns a ConfiguredTargetAndTarget for the specified label, using the given build
-   * configuration.
+   * Returns a ConfiguredTargetAndData for the specified label, using the given build configuration.
    */
-  protected ConfiguredTargetAndTarget getConfiguredTargetAndTarget(
+  protected ConfiguredTargetAndData getConfiguredTargetAndTarget(
       Label label, BuildConfiguration config) {
     return view.getConfiguredTargetAndTargetForTesting(reporter, label, config);
   }
 
   /**
-   * Returns the ConfiguredTargetAndTarget for the specified label. If the label corresponds to a
+   * Returns the ConfiguredTargetAndData for the specified label. If the label corresponds to a
    * target with a top-level configuration transition, that transition is applied to the given
-   * config in the ConfiguredTargetAndTarget's ConfiguredTarget.
+   * config in the ConfiguredTargetAndData's ConfiguredTarget.
    */
-  public ConfiguredTargetAndTarget getConfiguredTargetAndTarget(String label)
+  public ConfiguredTargetAndData getConfiguredTargetAndTarget(String label)
       throws LabelSyntaxException {
     return getConfiguredTargetAndTarget(Label.parseAbsolute(label), targetConfig);
   }
@@ -836,9 +835,9 @@
   protected ConfiguredTarget scratchConfiguredTarget(
       String packageName, String ruleName, BuildConfiguration config, String... lines)
       throws IOException, Exception {
-    ConfiguredTargetAndTarget ctat =
+    ConfiguredTargetAndData ctad =
         scratchConfiguredTargetAndTarget(packageName, ruleName, config, lines);
-    return ctat == null ? null : ctat.getConfiguredTarget();
+    return ctad == null ? null : ctad.getConfiguredTarget();
   }
 
   /**
@@ -850,7 +849,7 @@
    * @return the configured tatarget and target instance for the created rule.
    * @throws Exception
    */
-  protected ConfiguredTargetAndTarget scratchConfiguredTargetAndTarget(
+  protected ConfiguredTargetAndData scratchConfiguredTargetAndTarget(
       String packageName, String rulename, String... lines) throws Exception {
     return scratchConfiguredTargetAndTarget(packageName, rulename, targetConfig, lines);
   }
@@ -862,11 +861,11 @@
    * @param ruleName the name of the rule.
    * @param config the configuration to use to construct the configured rule.
    * @param lines the text of the rule.
-   * @return the ConfiguredTargetAndTarget instance for the created rule.
+   * @return the ConfiguredTargetAndData instance for the created rule.
    * @throws IOException
    * @throws Exception
    */
-  protected ConfiguredTargetAndTarget scratchConfiguredTargetAndTarget(
+  protected ConfiguredTargetAndData scratchConfiguredTargetAndTarget(
       String packageName, String ruleName, BuildConfiguration config, String... lines)
       throws Exception {
     Target rule = scratchRule(packageName, ruleName, lines);
@@ -1344,10 +1343,10 @@
   }
 
   protected static ConfiguredAttributeMapper getMapperFromConfiguredTargetAndTarget(
-      ConfiguredTargetAndTarget ctat) {
+      ConfiguredTargetAndData ctad) {
     return ConfiguredAttributeMapper.of(
-        (Rule) ctat.getTarget(),
-        ((RuleConfiguredTarget) ctat.getConfiguredTarget()).getConfigConditions());
+        (Rule) ctad.getTarget(),
+        ((RuleConfiguredTarget) ctad.getConfiguredTarget()).getConfigConditions());
   }
 
   public static Label makeLabel(String label) {
@@ -1580,13 +1579,13 @@
    * Returns an attribute value retriever for the given rule for the target configuration.
    */
   protected AttributeMap attributes(RuleConfiguredTarget ct) {
-    ConfiguredTargetAndTarget ctat;
+    ConfiguredTargetAndData ctad;
     try {
-      ctat = getConfiguredTargetAndTarget(ct.getLabel().toString());
+      ctad = getConfiguredTargetAndTarget(ct.getLabel().toString());
     } catch (LabelSyntaxException e) {
       throw new RuntimeException(e);
     }
-    return getMapperFromConfiguredTargetAndTarget(ctat);
+    return getMapperFromConfiguredTargetAndTarget(ctad);
   }
 
   protected AttributeMap attributes(ConfiguredTarget rule) {
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
index 1f27af4..cebf5db 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
@@ -50,7 +50,7 @@
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
 import com.google.devtools.build.lib.rules.java.JavaConfiguration;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.util.FileTypeSet;
 import java.util.List;
@@ -228,7 +228,7 @@
     implements ConfiguredAspectFactory {
     @Override
     public ConfiguredAspect create(
-        ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters) {
+        ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters) {
       String information = parameters.isEmpty()
           ? ""
           : " data " + Iterables.getFirst(parameters.getAttribute("baz"), null);
@@ -274,7 +274,7 @@
 
     @Override
     public ConfiguredAspect create(
-        ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters) {
+        ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters) {
       return new ConfiguredAspect.Builder(this, parameters, ruleContext)
           .addProvider(new FooProvider())
           .build();
@@ -293,7 +293,7 @@
 
     @Override
     public ConfiguredAspect create(
-        ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters) {
+        ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters) {
       return new ConfiguredAspect.Builder(this, parameters, ruleContext)
           .addProvider(new BarProvider())
           .build();
@@ -428,7 +428,7 @@
 
     @Override
     public ConfiguredAspect create(
-        ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters) {
+        ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters) {
       StringBuilder information = new StringBuilder("aspect " + ruleContext.getLabel());
       if (!parameters.isEmpty()) {
         information.append(" data " + Iterables.getFirst(parameters.getAttribute("baz"), null));
@@ -475,8 +475,8 @@
 
     @Override
     public ConfiguredAspect create(
-        ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters) {
-      ruleContext.ruleWarning("Aspect warning on " + ctatBase.getTarget().getLabel());
+        ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters) {
+      ruleContext.ruleWarning("Aspect warning on " + ctadBase.getTarget().getLabel());
       return new ConfiguredAspect.Builder(this, parameters, ruleContext).build();
     }
 
@@ -500,7 +500,7 @@
 
     @Override
     public ConfiguredAspect create(
-        ConfiguredTargetAndTarget ctatBase, RuleContext ruleContext, AspectParameters parameters) {
+        ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters) {
       ruleContext.ruleError("Aspect error");
       return null;
     }
@@ -530,7 +530,7 @@
 
     @Override
     public ConfiguredAspect create(
-        ConfiguredTargetAndTarget ctatBase, RuleContext context, AspectParameters parameters)
+        ConfiguredTargetAndData ctadBase, RuleContext context, AspectParameters parameters)
         throws InterruptedException {
       return new ConfiguredAspect.Builder(this, parameters, context).build();
     }
@@ -776,10 +776,10 @@
 
     @Override
     public ConfiguredAspect create(
-        ConfiguredTargetAndTarget ctatBase, RuleContext context, AspectParameters parameters)
+        ConfiguredTargetAndData ctadBase, RuleContext context, AspectParameters parameters)
         throws InterruptedException {
       return ConfiguredAspect.builder(this, parameters, context)
-          .addProvider(Provider.class, new Provider(ctatBase.getConfiguredTarget().getLabel()))
+          .addProvider(Provider.class, new Provider(ctadBase.getConfiguredTarget().getLabel()))
           .build();
     }
   }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
index 7fa018d..072ba2e 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
@@ -31,7 +31,7 @@
 import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
 import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
 import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
 import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -142,7 +142,7 @@
             .add("repo(name='foo', path='/repo2')")
             .build());
     invalidatePackages();
-    ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("@foo//:bar");
+    ConfiguredTargetAndData target = getConfiguredTargetAndTarget("@foo//:bar");
     Object path = target.getTarget().getAssociatedRule().getAttributeContainer().getAttr("path");
     assertThat(path).isEqualTo("foo");
   }
@@ -170,7 +170,7 @@
             .add("repo(name='foo')")
             .build());
     invalidatePackages();
-    ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("@foo//:bar");
+    ConfiguredTargetAndData target = getConfiguredTargetAndTarget("@foo//:bar");
     Object path = target.getTarget().getAssociatedRule().getAttributeContainer().getAttr("path");
     assertThat(path).isEqualTo("foo");
   }
@@ -199,7 +199,7 @@
             .add("repo(name='foo')")
             .build());
     invalidatePackages();
-    ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("@foo//:bar");
+    ConfiguredTargetAndData target = getConfiguredTargetAndTarget("@foo//:bar");
     Object path = target.getTarget().getAssociatedRule().getAttributeContainer().getAttr("path");
     assertThat(path).isEqualTo("foo");
   }
@@ -229,7 +229,7 @@
             .add("repo(name='foobar')")
             .build());
     invalidatePackages();
-    ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("@foobar//:bar");
+    ConfiguredTargetAndData target = getConfiguredTargetAndTarget("@foobar//:bar");
     Object path = target.getTarget().getAssociatedRule().getAttributeContainer().getAttr("path");
     assertThat(path).isEqualTo("foobar");
   }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java
index c04f010..dcdea30 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java
@@ -23,7 +23,7 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.packages.AttributeContainer;
 import com.google.devtools.build.lib.packages.BuildFileNotFoundException;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.testutil.MoreAsserts;
 import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -170,8 +170,7 @@
         ")");
     invalidatePackages();
 
-    ConfiguredTargetAndTarget cpufeatures =
-        getConfiguredTargetAndTarget("@androidndk//:cpufeatures");
+    ConfiguredTargetAndData cpufeatures = getConfiguredTargetAndTarget("@androidndk//:cpufeatures");
     assertThat(cpufeatures).isNotNull();
     AttributeContainer attributes =
         cpufeatures.getTarget().getAssociatedRule().getAttributeContainer();
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
index b1085bf..ee1810f 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
@@ -23,7 +23,7 @@
 import com.google.devtools.build.lib.packages.BuildFileNotFoundException;
 import com.google.devtools.build.lib.packages.util.ResourceLoader;
 import com.google.devtools.build.lib.rules.android.AndroidSdkProvider;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import org.junit.Before;
 import org.junit.Test;
@@ -92,7 +92,7 @@
         ")");
     invalidatePackages();
 
-    ConfiguredTargetAndTarget aarImportTarget =
+    ConfiguredTargetAndData aarImportTarget =
         getConfiguredTargetAndTarget("@androidsdk//com.google.android:foo-1.0.0");
     assertThat(aarImportTarget).isNotNull();
     assertThat(aarImportTarget.getTarget().getAssociatedRule().getRuleClass())
diff --git a/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java b/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java
index da31a7a..26cf80c 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/ExternalPackageTest.java
@@ -17,7 +17,7 @@
 
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
 import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
 import org.junit.Before;
@@ -101,9 +101,9 @@
         "java_library(name = 'c', srcs = [])");
     invalidatePackages();
     useConfiguration("--define", "foo=bar");
-    ConfiguredTargetAndTarget ctat = getConfiguredTargetAndTarget("//:a");
+    ConfiguredTargetAndData ctad = getConfiguredTargetAndTarget("//:a");
     ConfiguredAttributeMapper configuredAttributeMapper =
-        getMapperFromConfiguredTargetAndTarget(ctat);
+        getMapperFromConfiguredTargetAndTarget(ctad);
     assertThat(configuredAttributeMapper.get("runtime_deps", BuildType.LABEL_LIST))
         .containsExactly(Label.parseAbsolute("//:b"));
   }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
index 1b5a01c..d685a46 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
@@ -51,7 +51,7 @@
 import com.google.devtools.build.lib.rules.java.JavaCompileAction;
 import com.google.devtools.build.lib.rules.java.JavaInfo;
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.testutil.MoreAsserts;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -2045,7 +2045,7 @@
         "<resources><string name = 'lib_string'>Libs!</string></resources>");
     scratch.file("java/r/android/res/values/strings.xml",
         "<resources><string name = 'hello'>Hello Android!</string></resources>");
-    ConfiguredTargetAndTarget binary = getConfiguredTargetAndTarget("//java/r/android:r");
+    ConfiguredTargetAndData binary = getConfiguredTargetAndTarget("//java/r/android:r");
     Artifact jar = getResourceClassJar(binary);
     assertThat(getGeneratingAction(jar).getMnemonic()).isEqualTo("RClassGenerator");
     List<String> args = getGeneratingSpawnActionArgs(jar);
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
index 657ecac..6deb85f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
@@ -39,7 +39,7 @@
 import com.google.devtools.build.lib.rules.java.JavaCompileAction;
 import com.google.devtools.build.lib.rules.java.JavaInfo;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -138,7 +138,7 @@
         transitive ? info.getTransitiveAndroidResources() : info.getDirectAndroidResources());
   }
 
-  protected Artifact getResourceClassJar(final ConfiguredTargetAndTarget target) {
+  protected Artifact getResourceClassJar(final ConfiguredTargetAndData target) {
     JavaRuleOutputJarsProvider jarProvider =
         JavaInfo.getProvider(JavaRuleOutputJarsProvider.class, target.getConfiguredTarget());
     assertThat(jarProvider).isNotNull();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
index f50823b..da6d287 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
@@ -25,7 +25,7 @@
 import com.google.devtools.build.lib.analysis.RunfilesProvider;
 import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -118,7 +118,7 @@
 
   @Test
   public void testTestExecutableRunfiles() throws Exception {
-    ConfiguredTargetAndTarget androidInstrumentationTest =
+    ConfiguredTargetAndData androidInstrumentationTest =
         getConfiguredTargetAndTarget("//javatests/com/app/ait");
     NestedSet<Artifact> runfiles =
         androidInstrumentationTest
diff --git a/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java b/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java
index a0880c5..3665227 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/apple/XcodeConfigTest.java
@@ -20,7 +20,7 @@
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
 import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.syntax.Type;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -805,7 +805,7 @@
    * Returns a ConfiguredAttributeMapper bound to the given rule with the target configuration.
    */
   private ConfiguredAttributeMapper getMapper(String label) throws Exception {
-    ConfiguredTargetAndTarget ctat = getConfiguredTargetAndTarget(label);
-    return getMapperFromConfiguredTargetAndTarget(ctat);
+    ConfiguredTargetAndData ctad = getConfiguredTargetAndTarget(label);
+    return getMapperFromConfiguredTargetAndTarget(ctad);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
index 910e1f7..f9cb224 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTest.java
@@ -23,7 +23,7 @@
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext;
 import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skylark.util.SkylarkTestCase;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
@@ -133,8 +133,8 @@
         "       '//conditions:default': 'error'",
         "    }))");
 
-    ConfiguredTargetAndTarget ctat = getConfiguredTargetAndTarget("//test:gen");
-    ConfiguredAttributeMapper attributeMapper = getMapperFromConfiguredTargetAndTarget(ctat);
+    ConfiguredTargetAndData ctad = getConfiguredTargetAndTarget("//test:gen");
+    ConfiguredAttributeMapper attributeMapper = getMapperFromConfiguredTargetAndTarget(ctad);
     assertThat(attributeMapper.get("cmd", Type.STRING)).isEqualTo("hello");
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
index 6722d21..d249fb1 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
@@ -35,7 +35,7 @@
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
 import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
 import com.google.devtools.build.lib.packages.util.MockCcSupport;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -1135,7 +1135,7 @@
   public void addOnlyStaticLibraryToFilesToBuildWhenWrappingIffImplicitOutput() throws Exception {
     // This shared library has the same name as the archive generated by this rule, so it should
     // override said archive. However, said archive should still be put in files to build.
-    ConfiguredTargetAndTarget target =
+    ConfiguredTargetAndData target =
         scratchConfiguredTargetAndTarget("a", "b", "cc_library(name = 'b', srcs = ['libb.so'])");
 
     if (target.getTarget().getAssociatedRule().getImplicitOutputsFunction()
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
index bc0d3ec..f1f4b36 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
@@ -119,9 +119,9 @@
      * deps of given target.
      */
     static class Value implements SkyValue {
-      OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> depMap;
+      OrderedSetMultimap<Attribute, ConfiguredTargetAndData> depMap;
 
-      Value(OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> depMap) {
+      Value(OrderedSetMultimap<Attribute, ConfiguredTargetAndData> depMap) {
         this.depMap = depMap;
       }
     }
@@ -130,7 +130,7 @@
     public SkyValue compute(SkyKey skyKey, Environment env)
         throws EvalException, InterruptedException {
       try {
-        OrderedSetMultimap<Attribute, ConfiguredTargetAndTarget> depMap =
+        OrderedSetMultimap<Attribute, ConfiguredTargetAndData> depMap =
             ConfiguredTargetFunction.computeDependencies(
                 env,
                 new SkyframeDependencyResolver(env),
@@ -209,7 +209,7 @@
    * Returns the configured deps for a given target, assuming the target uses the target
    * configuration.
    */
-  private Multimap<Attribute, ConfiguredTargetAndTarget> getConfiguredDeps(String targetLabel)
+  private Multimap<Attribute, ConfiguredTargetAndData> getConfiguredDeps(String targetLabel)
       throws Exception {
     update(targetLabel);
     SkyKey key = ComputeDependenciesFunction.key(getTarget(targetLabel), getTargetConfiguration());
@@ -230,12 +230,12 @@
    */
   protected List<ConfiguredTarget> getConfiguredDeps(String targetLabel, String attrName)
       throws Exception {
-    Multimap<Attribute, ConfiguredTargetAndTarget> allDeps = getConfiguredDeps(targetLabel);
+    Multimap<Attribute, ConfiguredTargetAndData> allDeps = getConfiguredDeps(targetLabel);
     for (Attribute attribute : allDeps.keySet()) {
       if (attribute.getName().equals(attrName)) {
         return ImmutableList.copyOf(
             Collections2.transform(
-                allDeps.get(attribute), ConfiguredTargetAndTarget::getConfiguredTarget));
+                allDeps.get(attribute), ConfiguredTargetAndData::getConfiguredTarget));
       }
     }
     throw new AssertionError(
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
index d500815..7f6958a 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
@@ -39,7 +39,7 @@
 import com.google.devtools.build.lib.packages.Provider;
 import com.google.devtools.build.lib.packages.SkylarkProvider;
 import com.google.devtools.build.lib.packages.SkylarkProvider.SkylarkKey;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndTarget;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import com.google.devtools.build.lib.skyframe.PackageFunction;
 import com.google.devtools.build.lib.skyframe.SkyFunctions;
 import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction;
@@ -108,7 +108,7 @@
   }
 
   private AttributeContainer getContainerForTarget(String targetName) throws Exception {
-    ConfiguredTargetAndTarget target = getConfiguredTargetAndTarget("//test/skylark:" + targetName);
+    ConfiguredTargetAndData target = getConfiguredTargetAndTarget("//test/skylark:" + targetName);
     return target.getTarget().getAssociatedRule().getAttributeContainer();
   }