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(),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
index 4155865..a0e9d7a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/AliasConfiguredTarget.java
@@ -21,12 +21,12 @@
 import com.google.devtools.build.lib.analysis.FileProvider;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.packages.Info;
 import com.google.devtools.build.lib.packages.Provider;
+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.VisibleForSerialization;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
@@ -45,7 +45,7 @@
 @Immutable
 public final class AliasConfiguredTarget implements ConfiguredTarget, ClassObject {
   private final Label label;
-  private final BuildConfiguration configuration;
+  private final BuildConfigurationValue.Key configurationKey;
   private final ConfiguredTarget actual;
   private final ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider>
       overrides;
@@ -56,7 +56,7 @@
       ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> overrides) {
     this(
         ruleContext.getLabel(),
-        Preconditions.checkNotNull(ruleContext.getConfiguration()),
+        Preconditions.checkNotNull(ruleContext.getConfigurationKey()),
         Preconditions.checkNotNull(actual),
         Preconditions.checkNotNull(overrides));
   }
@@ -65,11 +65,11 @@
   @VisibleForSerialization
   AliasConfiguredTarget(
       Label label,
-      BuildConfiguration configuration,
+      BuildConfigurationValue.Key configurationKey,
       ConfiguredTarget actual,
       ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> overrides) {
     this.label = label;
-    this.configuration = configuration;
+    this.configurationKey = configurationKey;
     this.actual = actual;
     this.overrides = overrides;
   }
@@ -110,11 +110,11 @@
   }
 
   @Override
-  public BuildConfiguration getConfiguration() {
-    // This does not return actual.getConfiguration() because actual might be an input file, in
-    // which case its configuration is null and we don't want to have rules that have a null
-    // configuration.
-    return configuration;
+  public BuildConfigurationValue.Key getConfigurationKey() {
+    // This does not return actual.getConfigurationKey() because actual might be an input file, in
+    // which case its configurationKey is null and we don't want to have rules that have a null
+    // configurationKey.
+    return configurationKey;
   }
 
   /* ClassObject methods */
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java
index b648d10..efc87d6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java
@@ -76,6 +76,10 @@
     return Key.create(fragmentClassSet, optionsDiff);
   }
 
+  public static Key key(BuildConfiguration buildConfiguration) {
+    return key(buildConfiguration.fragmentClasses(), buildConfiguration.getBuildOptionsDiff());
+  }
+
   /** {@link SkyKey} for {@link BuildConfigurationValue}. */
   public static final class Key implements SkyKey, Serializable {
     private static final Interner<Key> keyInterner = BlazeInterners.newWeakInterner();
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
index e79d0d0..d583220 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetAndData.java
@@ -55,32 +55,21 @@
             + " ConfiguredTarget's label %s is not equal to Target's label %s",
         configuredTarget.getLabel(),
         target.getLabel());
-    BuildConfiguration innerConfiguration = configuredTarget.getConfiguration();
-    if (configuration != innerConfiguration) {
-      Preconditions.checkNotNull(configuration, configuredTarget);
-      Preconditions.checkNotNull(innerConfiguration, configuredTarget);
-      // We can't always assert that configurations are equal, because fragments, which are used in
-      // the equality check, don't implement .equals(), so two configurations constructed from the
-      // same options may end up unequal.
+    BuildConfigurationValue.Key innerConfigurationKey = configuredTarget.getConfigurationKey();
+    if (configuration == null) {
       Preconditions.checkState(
-          configuration.checksum().equals(innerConfiguration.checksum()),
-          "Configuration checksums don't match: %s %s (%s %s)",
-          configuration.checksum(),
-          innerConfiguration.checksum(),
+          innerConfigurationKey == null,
+          "Non-null configuration key for %s but configuration is null (%s)",
           configuredTarget,
           target);
+    } else {
+      BuildConfigurationValue.Key configurationKey = BuildConfigurationValue.key(configuration);
       Preconditions.checkState(
-          configuration.getOptions().equals(innerConfiguration.getOptions()),
-          "Configuration options don't match: %s %s (%s %s)",
-          configuration.getOptions(),
-          innerConfiguration.getOptions(),
-          configuredTarget,
-          target);
-      Preconditions.checkState(
-          configuration.fragmentClasses().equals(innerConfiguration.fragmentClasses()),
-          "Configuration classes don't match: %s %s (%s %s)",
-          configuration.fragmentClasses(),
-          innerConfiguration.fragmentClasses(),
+          innerConfigurationKey.equals(configurationKey),
+          "Configurations don't match: %s %s %s (%s %s)",
+          configurationKey,
+          innerConfigurationKey,
+          configuration,
           configuredTarget,
           target);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
index 9570367..f9ac4b5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
@@ -91,9 +91,7 @@
     return configuration == null
         ? KeyAndHost.NULL_INSTANCE
         : new KeyAndHost(
-            BuildConfigurationValue.key(
-                configuration.fragmentClasses(), configuration.getBuildOptionsDiff()),
-            configuration.isHostConfiguration());
+            BuildConfigurationValue.key(configuration), configuration.isHostConfiguration());
   }
 
   @Override
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 a089b0b..95f2873 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
@@ -905,14 +905,7 @@
     SkyFunctionEnvironmentForTesting env =
         new SkyFunctionEnvironmentForTesting(buildDriver, eventHandler, this);
     return ToolchainUtil.createToolchainContext(
-        env,
-        "",
-        requiredToolchains,
-        config == null
-            ? null
-            : BuildConfigurationValue.key(
-                config.fragmentClasses(),
-                BuildOptions.diffForReconstruction(defaultBuildOptions, config.getOptions())));
+        env, "", requiredToolchains, config == null ? null : BuildConfigurationValue.key(config));
   }
 
   /**