Remove BuildConfiguration from ConfiguredTarget.

PiperOrigin-RevId: 190804641
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
index 29f1506..e068719 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
@@ -16,7 +16,6 @@
 
 import com.google.common.collect.ImmutableCollection;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.analysis.configuredtargets.InputFileConfiguredTarget;
 import com.google.devtools.build.lib.packages.Target;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
 import com.google.devtools.build.lib.syntax.ClassObject;
@@ -45,16 +44,6 @@
    */
   String FILES_FIELD = "files";
 
-  /**
-   * <p>Returns the {@link BuildConfiguration} for which this {@link ConfiguredTarget} is
-   * defined. Configuration is defined for all configured targets with exception
-   * of the {@link InputFileConfiguredTarget} for which it is always
-   * <b>null</b>.</p>
-   */
-  @Override
-  @Nullable
-  BuildConfiguration getConfiguration();
-
   default String getConfigurationChecksum() {
     return getConfigurationKey() == null
         ? null
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 cba5aac..9c3ba9e 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,6 +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.BuildConfigurationValue;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
 import java.util.List;
 import java.util.Set;
@@ -96,6 +97,10 @@
     return configuration;
   }
 
+  public BuildConfigurationValue.Key getConfigurationKey() {
+    return BuildConfigurationValue.key(configuration);
+  }
+
   public NestedSet<PackageGroupContents> getVisibility() {
     return visibility;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
index a2e3734..51cf588 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoCollection.java
@@ -97,11 +97,6 @@
    */
   Label getLabel();
 
-  /** Deprecated! Use {@link #getConfigurationKey} instead. */
-  @Deprecated
-  @Nullable
-  BuildConfiguration getConfiguration();
-
   /**
    * Returns the {@link BuildConfigurationValue.Key} naming the {@link BuildConfiguration} for which
    * this transitive info collection is defined. Configuration is defined for all configured targets
@@ -109,13 +104,7 @@
    * for which it is always <b>null</b>.
    */
   @Nullable
-  default BuildConfigurationValue.Key getConfigurationKey() {
-    BuildConfiguration configuration = getConfiguration();
-    return configuration == null
-        ? null
-        : BuildConfigurationValue.key(
-            configuration.fragmentClasses(), configuration.getBuildOptionsDiff());
-  }
+  BuildConfigurationValue.Key getConfigurationKey();
 
   /**
    * Checks whether this {@link TransitiveInfoCollection} satisfies given {@link RequiredProviders}.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
index 9bd4119..18aa071 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
@@ -25,7 +25,6 @@
 import com.google.devtools.build.lib.analysis.RunfilesProvider;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
 import com.google.devtools.build.lib.analysis.VisibilityProvider;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -34,6 +33,7 @@
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
 import com.google.devtools.build.lib.packages.Provider;
+import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
 import com.google.devtools.build.lib.syntax.ClassObject;
 import com.google.devtools.build.lib.syntax.EvalException;
@@ -50,7 +50,7 @@
 public abstract class AbstractConfiguredTarget
     implements ConfiguredTarget, VisibilityProvider, ClassObject {
   private final Label label;
-  private final BuildConfiguration configuration;
+  private final BuildConfigurationValue.Key configurationKey;
 
   private final NestedSet<PackageGroupContents> visibility;
 
@@ -61,14 +61,16 @@
   private static final String DATA_RUNFILES_FIELD = "data_runfiles";
   private static final String DEFAULT_RUNFILES_FIELD = "default_runfiles";
 
-  public AbstractConfiguredTarget(Label label, BuildConfiguration configuration) {
-    this(label, configuration, NestedSetBuilder.emptySet(Order.STABLE_ORDER));
+  public AbstractConfiguredTarget(Label label, BuildConfigurationValue.Key configurationKey) {
+    this(label, configurationKey, NestedSetBuilder.emptySet(Order.STABLE_ORDER));
   }
 
   protected AbstractConfiguredTarget(
-      Label label, BuildConfiguration configuration, NestedSet<PackageGroupContents> visibility) {
+      Label label,
+      BuildConfigurationValue.Key configurationKey,
+      NestedSet<PackageGroupContents> visibility) {
     this.label = label;
-    this.configuration = configuration;
+    this.configurationKey = configurationKey;
     this.visibility = visibility;
   }
 
@@ -78,8 +80,8 @@
   }
 
   @Override
-  public BuildConfiguration getConfiguration() {
-    return configuration;
+  public BuildConfigurationValue.Key getConfigurationKey() {
+    return configurationKey;
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java
index 134f50d..2fec10f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FileConfiguredTarget.java
@@ -23,7 +23,6 @@
 import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder;
 import com.google.devtools.build.lib.analysis.VisibilityProvider;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.fileset.FilesetProvider;
 import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -33,6 +32,7 @@
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
 import com.google.devtools.build.lib.packages.Provider;
+import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
 import com.google.devtools.build.lib.util.FileType;
 
 /**
@@ -47,10 +47,10 @@
 
   FileConfiguredTarget(
       Label label,
-      BuildConfiguration configuration,
+      BuildConfigurationValue.Key configurationKey,
       NestedSet<PackageGroupContents> visibility,
       Artifact artifact) {
-    super(label, configuration, visibility);
+    super(label, configurationKey, visibility);
     NestedSet<Artifact> filesToBuild = NestedSetBuilder.create(Order.STABLE_ORDER, artifact);
     this.artifact = artifact;
     FileProvider fileProvider = new FileProvider(filesToBuild);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
index 1d4b001..39fabc3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/FilesetOutputConfiguredTarget.java
@@ -20,12 +20,12 @@
 import com.google.devtools.build.lib.actions.FilesetTraversalParams;
 import com.google.devtools.build.lib.analysis.TargetContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.fileset.FilesetProvider;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.packages.OutputFile;
 import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
+import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import javax.annotation.Nullable;
@@ -54,7 +54,7 @@
       @Nullable ImmutableList<FilesetTraversalParams> traversals) {
     this(
         targetContext.getLabel(),
-        targetContext.getConfiguration(),
+        targetContext.getConfigurationKey(),
         targetContext.getVisibility(),
         generatingRule,
         outputArtifact,
@@ -70,12 +70,12 @@
   @AutoCodec.Instantiator
   FilesetOutputConfiguredTarget(
       Label label,
-      BuildConfiguration configuration,
+      BuildConfigurationValue.Key configurationKey,
       NestedSet<PackageGroupContents> visibility,
       TransitiveInfoCollection generatingRule,
       Artifact artifact,
       @Nullable ImmutableList<FilesetTraversalParams> traversals) {
-    super(label, configuration, visibility, artifact, generatingRule);
+    super(label, configurationKey, visibility, artifact, generatingRule);
     FilesetProvider provider = generatingRule.getProvider(FilesetProvider.class);
     Preconditions.checkArgument(provider != null);
     filesetInputManifest = provider.getFilesetInputManifest();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
index 40c20c8..bb1e908 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
@@ -53,7 +53,7 @@
   }
 
   private MergedConfiguredTarget(ConfiguredTarget base, TransitiveInfoProviderMap providers) {
-    super(base.getLabel(), base.getConfiguration());
+    super(base.getLabel(), base.getConfigurationKey());
     this.base = base;
     this.providers = providers;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
index 487bd17..613266a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/OutputFileConfiguredTarget.java
@@ -21,13 +21,13 @@
 import com.google.devtools.build.lib.analysis.TargetContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProvider;
 import com.google.devtools.build.lib.analysis.test.InstrumentedFilesProviderImpl;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.packages.OutputFile;
 import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
+import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
@@ -46,7 +46,7 @@
       TransitiveInfoCollection generatingRule, Artifact outputArtifact) {
     this(
         targetContext.getLabel(),
-        targetContext.getConfiguration(),
+        targetContext.getConfigurationKey(),
         targetContext.getVisibility(),
         outputArtifact,
         generatingRule);
@@ -57,11 +57,11 @@
   @VisibleForSerialization
   OutputFileConfiguredTarget(
       Label label,
-      BuildConfiguration configuration,
+      BuildConfigurationValue.Key configurationKey,
       NestedSet<PackageGroupContents> visibility,
       Artifact artifact,
       TransitiveInfoCollection generatingRule) {
-    super(label, configuration, visibility, artifact);
+    super(label, configurationKey, visibility, artifact);
     this.generatingRule = Preconditions.checkNotNull(generatingRule);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
index d2d6a8f..54f3368 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
@@ -31,7 +31,6 @@
 import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder;
 import com.google.devtools.build.lib.analysis.Util;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
 import com.google.devtools.build.lib.analysis.config.RunUnder;
 import com.google.devtools.build.lib.analysis.skylark.SkylarkApiProvider;
@@ -42,6 +41,7 @@
 import com.google.devtools.build.lib.packages.OutputFile;
 import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents;
 import com.google.devtools.build.lib.packages.Provider;
+import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Instantiator;
@@ -97,7 +97,7 @@
   @VisibleForSerialization
   RuleConfiguredTarget(
       Label label,
-      BuildConfiguration configuration,
+      BuildConfigurationValue.Key configurationKey,
       NestedSet<PackageGroupContents> visibility,
       TransitiveInfoProviderMap providers,
       ImmutableMap<Label, ConfigMatchingProvider> configConditions,
@@ -105,7 +105,7 @@
       String ruleClassString,
       List<ActionAnalysisMetadata> actions,
       ImmutableMap<Artifact, Integer> generatingActionIndex) {
-    super(label, configuration, visibility);
+    super(label, configurationKey, visibility);
 
     // We don't use ImmutableMap.Builder here to allow augmenting the initial list of 'default'
     // providers by passing them in.
@@ -138,7 +138,7 @@
       ImmutableMap<Artifact, Integer> generatingActionIndex) {
     this(
         ruleContext.getLabel(),
-        ruleContext.getConfiguration(),
+        ruleContext.getConfigurationKey(),
         ruleContext.getVisibility(),
         providers,
         ruleContext.getConfigConditions(),