Update users of ConfiguredTargetKey to use the Builder.

PiperOrigin-RevId: 313627884
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 c10f43f..ed4feca 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
@@ -91,7 +91,11 @@
 
         // Validate that aspect is applicable to "bare" configured target.
         ConfiguredTargetAndData associatedTarget =
-            configuredTargetMap.get(ConfiguredTargetKey.of(dep.getLabel(), dep.getConfiguration()));
+            configuredTargetMap.get(
+                ConfiguredTargetKey.builder()
+                    .setLabel(dep.getLabel())
+                    .setConfiguration(dep.getConfiguration())
+                    .build());
         if (!aspectMatchesConfiguredTarget(associatedTarget, aspectValue.getAspect())) {
           continue;
         }
@@ -124,7 +128,11 @@
 
     for (Map.Entry<DependencyKind, Dependency> entry : depValueNames.entries()) {
       Dependency dep = entry.getValue();
-      SkyKey depKey = ConfiguredTargetKey.of(dep.getLabel(), dep.getConfiguration());
+      SkyKey depKey =
+          ConfiguredTargetKey.builder()
+              .setLabel(dep.getLabel())
+              .setConfiguration(dep.getConfiguration())
+              .build();
       ConfiguredTargetAndData depConfiguredTarget = depConfiguredTargetMap.get(depKey);
 
       result.put(
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 1bde506..a08bc18 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
@@ -286,9 +286,13 @@
     }
 
     List<ConfiguredTargetKey> topLevelCtKeys =
-        topLevelTargetsWithConfigs
-            .stream()
-            .map(node -> ConfiguredTargetKey.of(node.getLabel(), node.getConfiguration()))
+        topLevelTargetsWithConfigs.stream()
+            .map(
+                node ->
+                    ConfiguredTargetKey.builder()
+                        .setLabel(node.getLabel())
+                        .setConfiguration(node.getConfiguration())
+                        .build())
             .collect(Collectors.toList());
 
     Multimap<Pair<Label, String>, BuildConfiguration> aspectConfigurations =
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 74c4f5a..f35e885 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
@@ -240,7 +240,10 @@
               inputFile.getExecPath(
                   analysisEnvironment.getStarlarkSemantics().experimentalSiblingRepositoryLayout()),
               inputFile.getPackage().getSourceRoot().get(),
-              ConfiguredTargetKey.of(target.getLabel(), config));
+              ConfiguredTargetKey.builder()
+                  .setLabel(target.getLabel())
+                  .setConfiguration(config)
+                  .build());
       return new InputFileConfiguredTarget(targetContext, inputFile, artifact);
     } else if (target instanceof PackageGroup) {
       PackageGroup packageGroup = (PackageGroup) target;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
index b2d8801..87c650e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Dependency.java
@@ -120,6 +120,9 @@
 
   /** Returns the ConfiguredTargetKey needed to fetch this dependency. */
   public ConfiguredTargetKey getConfiguredTargetKey() {
-    return ConfiguredTargetKey.of(getLabel(), getConfiguration());
+    return ConfiguredTargetKey.builder()
+        .setLabel(getLabel())
+        .setConfiguration(getConfiguration())
+        .build();
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
index a0c2327..0a04ec5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
@@ -136,8 +136,10 @@
     this.label = targetAndData.getConfiguredTarget().getLabel();
     this.aliasLabel = targetAndData.getConfiguredTarget().getOriginalLabel();
     this.configuredTargetKey =
-        ConfiguredTargetKey.of(
-            targetAndData.getConfiguredTarget(), targetAndData.getConfiguration());
+        ConfiguredTargetKey.builder()
+            .setConfiguredTarget(targetAndData.getConfiguredTarget())
+            .setConfiguration(targetAndData.getConfiguration())
+            .build();
     postedAfterBuilder.add(BuildEventIdUtil.targetConfigured(aliasLabel));
     DetailedExitCode mostImportantDetailedExitCode = null;
     for (Cause cause : getRootCauses().toList()) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Util.java b/src/main/java/com/google/devtools/build/lib/analysis/Util.java
index a0cf25a..3618cf9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/Util.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/Util.java
@@ -99,10 +99,12 @@
   private static void addLabelsAndConfigs(
       Set<ConfiguredTargetKey> set, List<ConfiguredTargetAndData> deps) {
     for (ConfiguredTargetAndData dep : deps) {
+      // Dereference any aliases that might be present.
       set.add(
-          ConfiguredTargetKey.of(
-              // Dereference any aliases that might be present.
-              dep.getConfiguredTarget().getOriginalLabel(), dep.getConfiguration()));
+          ConfiguredTargetKey.builder()
+              .setLabel(dep.getConfiguredTarget().getOriginalLabel())
+              .setConfiguration(dep.getConfiguration())
+              .build());
     }
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
index 71131b5..c9fd43f 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
@@ -713,7 +713,11 @@
     // order as configuredTargets.
     Collection<ConfiguredTarget> successfulTargets = new LinkedHashSet<>();
     for (ConfiguredTarget target : configuredTargets) {
-      if (builtTargets.contains(ConfiguredTargetKey.inTargetConfig(target))) {
+      if (builtTargets.contains(
+          ConfiguredTargetKey.builder()
+              .setConfiguredTarget(target)
+              .setConfigurationKey(target.getConfigurationKey())
+              .build())) {
         successfulTargets.add(target);
       }
     }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java
index 57e1b80..1a3749e 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java
@@ -386,8 +386,10 @@
         boolean implicit =
             implicitDeps == null
                 || implicitDeps.contains(
-                    ConfiguredTargetKey.of(
-                        getCorrectLabel(dependency), getConfiguration(dependency)));
+                    ConfiguredTargetKey.builder()
+                        .setLabel(getCorrectLabel(dependency))
+                        .setConfiguration(getConfiguration(dependency))
+                        .build());
         values.add(new ClassifiedDependency<>(dependency, implicit));
       } else if (key.functionName().equals(SkyFunctions.TOOLCHAIN_RESOLUTION)) {
         // Also fetch these dependencies.
diff --git a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java
index 8005b4b8..e2677e5 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java
@@ -95,19 +95,10 @@
         walkableGraphSupplier,
         settings);
     this.configuredTargetKeyExtractor =
-        configuredTargetValue -> {
-          try {
-            ConfiguredTarget element = configuredTargetValue.getConfiguredTarget();
-            return ConfiguredTargetKey.of(
-                element,
-                element.getConfigurationKey() == null
-                    ? null
-                    : ((BuildConfigurationValue) graph.getValue(element.getConfigurationKey()))
-                        .getConfiguration());
-          } catch (InterruptedException e) {
-            throw new IllegalStateException("Interruption unexpected in configured query", e);
-          }
-        };
+        configuredTargetValue ->
+            ConfiguredTargetKey.builder()
+                .setConfiguredTarget(configuredTargetValue.getConfiguredTarget())
+                .build();
     this.accessor =
         new ConfiguredTargetValueAccessor(
             walkableGraphSupplier.get(), this.configuredTargetKeyExtractor);
@@ -237,7 +228,8 @@
   @Nullable
   @Override
   protected ConfiguredTargetValue getHostConfiguredTarget(Label label) throws InterruptedException {
-    return this.getConfiguredTargetValue(ConfiguredTargetKey.of(label, hostConfiguration));
+    return this.getConfiguredTargetValue(
+        ConfiguredTargetKey.builder().setLabel(label).setConfiguration(hostConfiguration).build());
   }
 
   @Nullable
@@ -246,12 +238,19 @@
       throws InterruptedException {
     if (topLevelConfigurations.isTopLevelTarget(label)) {
       return this.getConfiguredTargetValue(
-          ConfiguredTargetKey.of(
-              label, topLevelConfigurations.getConfigurationForTopLevelTarget(label)));
+          ConfiguredTargetKey.builder()
+              .setLabel(label)
+              .setConfiguration(topLevelConfigurations.getConfigurationForTopLevelTarget(label))
+              .build());
     } else {
       ConfiguredTargetValue toReturn;
       for (BuildConfiguration configuration : topLevelConfigurations.getConfigurations()) {
-        toReturn = this.getConfiguredTargetValue(ConfiguredTargetKey.of(label, configuration));
+        toReturn =
+            this.getConfiguredTargetValue(
+                ConfiguredTargetKey.builder()
+                    .setLabel(label)
+                    .setConfiguration(configuration)
+                    .build());
         if (toReturn != null) {
           return toReturn;
         }
@@ -263,8 +262,7 @@
   @Nullable
   @Override
   protected ConfiguredTargetValue getNullConfiguredTarget(Label label) throws InterruptedException {
-    return this.getConfiguredTargetValue(
-        ConfiguredTargetKey.of(label, /* configurationKey= */ null, false));
+    return this.getConfiguredTargetValue(ConfiguredTargetKey.builder().setLabel(label).build());
   }
 
   @Nullable
@@ -301,7 +299,10 @@
   @Override
   protected ConfiguredTargetKey getSkyKey(ConfiguredTargetValue configuredTargetValue) {
     ConfiguredTarget target = configuredTargetValue.getConfiguredTarget();
-    return ConfiguredTargetKey.of(target, getConfiguration(configuredTargetValue));
+    return ConfiguredTargetKey.builder()
+        .setConfiguredTarget(target)
+        .setConfiguration(getConfiguration(configuredTargetValue))
+        .build();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
index df63ccb..e8a91d3 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetAccessor.java
@@ -191,9 +191,10 @@
     return (RuleConfiguredTarget)
         ((ConfiguredTargetValue)
                 walkableGraph.getValue(
-                    ConfiguredTargetKey.of(
-                        oct.getGeneratingRule().getLabel(),
-                        queryEnvironment.getConfiguration(oct))))
+                    ConfiguredTargetKey.builder()
+                        .setLabel(oct.getGeneratingRule().getLabel())
+                        .setConfiguration(queryEnvironment.getConfiguration(oct))
+                        .build()))
             .getConfiguredTarget();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
index 9b10600..da181ea 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
@@ -129,18 +129,11 @@
         settings);
     this.accessor = new ConfiguredTargetAccessor(walkableGraphSupplier.get(), this);
     this.configuredTargetKeyExtractor =
-        element -> {
-          try {
-            return ConfiguredTargetKey.of(
-                element,
-                element.getConfigurationKey() == null
-                    ? null
-                    : ((BuildConfigurationValue) graph.getValue(element.getConfigurationKey()))
-                        .getConfiguration());
-          } catch (InterruptedException e) {
-            throw new IllegalStateException("Interruption unexpected in configured query", e);
-          }
-        };
+        element ->
+            ConfiguredTargetKey.builder()
+                .setConfiguredTarget(element)
+                .setConfigurationKey(element.getConfigurationKey())
+                .build();
     this.transitiveConfigurations =
         getTransitiveConfigurations(transitiveConfigurationKeys, walkableGraphSupplier.get());
   }
@@ -318,7 +311,8 @@
   @Nullable
   private ConfiguredTarget getConfiguredTarget(Label label, BuildConfiguration configuration)
       throws InterruptedException {
-    return getValueFromKey(ConfiguredTargetKey.of(label, configuration));
+    return getValueFromKey(
+        ConfiguredTargetKey.builder().setLabel(label).setConfiguration(configuration).build());
   }
 
   @Override
@@ -475,7 +469,10 @@
 
   @Override
   protected ConfiguredTargetKey getSkyKey(ConfiguredTarget target) {
-    return ConfiguredTargetKey.of(target, getConfiguration(target));
+    return ConfiguredTargetKey.builder()
+        .setConfiguredTarget(target)
+        .setConfiguration(getConfiguration(target))
+        .build();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/AggregatingTestListener.java b/src/main/java/com/google/devtools/build/lib/runtime/AggregatingTestListener.java
index c5a06fe..62be54b 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/AggregatingTestListener.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/AggregatingTestListener.java
@@ -126,7 +126,10 @@
   public void testEvent(TestResult result) {
     ActionOwner testOwner = result.getTestAction().getOwner();
     ConfiguredTargetKey configuredTargetKey =
-        ConfiguredTargetKey.of(testOwner.getLabel(), result.getTestAction().getConfiguration());
+        ConfiguredTargetKey.builder()
+            .setLabel(testOwner.getLabel())
+            .setConfiguration(result.getTestAction().getConfiguration())
+            .build();
     aggregators.get(configuredTargetKey).testEvent(result);
   }
 
@@ -213,11 +216,10 @@
       TestSummary summary;
       if (isAlias(testTarget)) {
         ConfiguredTargetKey actualKey =
-            ConfiguredTargetKey.of(
-                // A test is never in the host configuration.
-                testTarget.getLabel(),
-                testTarget.getConfigurationKey(),
-                /*isHostConfiguration=*/ false);
+            ConfiguredTargetKey.builder()
+                .setLabel(testTarget.getLabel())
+                .setConfigurationKey(testTarget.getConfigurationKey())
+                .build();
         TestResultAggregator aggregator = aggregators.get(actualKey);
         TestSummary.Builder summaryBuilder = TestSummary.newBuilder();
         summaryBuilder.mergeFrom(aggregator.aggregateAndReportSummary(skipTargetsOnFailure));
@@ -263,10 +265,9 @@
 
   private static ConfiguredTargetKey asKey(ConfiguredTarget target) {
     Preconditions.checkArgument(!isAlias(target));
-    return ConfiguredTargetKey.of(
-        // A test is never in the host configuration.
-        AliasProvider.getDependencyLabel(target),
-        target.getConfigurationKey(),
-        /*isHostConfiguration=*/ false);
+    return ConfiguredTargetKey.builder()
+        .setLabel(AliasProvider.getDependencyLabel(target))
+        .setConfigurationKey(target.getConfigurationKey())
+        .build();
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/TestResultAggregator.java b/src/main/java/com/google/devtools/build/lib/runtime/TestResultAggregator.java
index 6bd603f..6650bcb 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/TestResultAggregator.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/TestResultAggregator.java
@@ -93,7 +93,10 @@
   synchronized void testEvent(TestResult result) {
     ActionOwner testOwner = result.getTestAction().getOwner();
     ConfiguredTargetKey targetLabel =
-        ConfiguredTargetKey.of(testOwner.getLabel(), result.getTestAction().getConfiguration());
+        ConfiguredTargetKey.builder()
+            .setLabel(testOwner.getLabel())
+            .setConfiguration(result.getTestAction().getConfiguration())
+            .build();
     Preconditions.checkArgument(targetLabel.equals(asKey(testTarget)));
 
     TestResult previousResult = statusMap.put(result.getTestStatusArtifact(), result);
@@ -164,11 +167,10 @@
   }
 
   private static ConfiguredTargetKey asKey(ConfiguredTarget target) {
-    return ConfiguredTargetKey.of(
-        // A test is never in the host configuration.
-        AliasProvider.getDependencyLabel(target),
-        target.getConfigurationKey(),
-        /*isHostConfiguration=*/ false);
+    return ConfiguredTargetKey.builder()
+        .setLabel(AliasProvider.getDependencyLabel(target))
+        .setConfigurationKey(target.getConfigurationKey())
+        .build();
   }
 
   private static BlazeTestStatus aggregateStatus(BlazeTestStatus status, BlazeTestStatus other) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectValueKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectValueKey.java
index 5aaf08e..aab0a37 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectValueKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectValueKey.java
@@ -49,7 +49,7 @@
       AspectDescriptor aspectDescriptor,
       @Nullable BuildConfiguration aspectConfiguration) {
     return AspectKey.createAspectKey(
-        ConfiguredTargetKey.of(label, baseConfiguration),
+        ConfiguredTargetKey.builder().setLabel(label).setConfiguration(baseConfiguration).build(),
         baseKeys,
         aspectDescriptor,
         aspectConfiguration == null ? null : BuildConfigurationValue.key(aspectConfiguration));
@@ -61,7 +61,7 @@
       AspectDescriptor aspectDescriptor,
       @Nullable BuildConfiguration aspectConfiguration) {
     return AspectKey.createAspectKey(
-        ConfiguredTargetKey.of(label, baseConfiguration),
+        ConfiguredTargetKey.builder().setLabel(label).setConfiguration(baseConfiguration).build(),
         ImmutableList.of(),
         aspectDescriptor,
         aspectConfiguration == null ? null : BuildConfigurationValue.key(aspectConfiguration));
@@ -77,7 +77,10 @@
         new StarlarkAspectLoadingKey(
             targetLabel,
             aspectConfiguration == null ? null : BuildConfigurationValue.key(aspectConfiguration),
-            ConfiguredTargetKey.of(targetLabel, targetConfiguration),
+            ConfiguredTargetKey.builder()
+                .setLabel(targetLabel)
+                .setConfiguration(targetConfiguration)
+                .build(),
             starlarkFileLabel,
             starlarkExportName);
 
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 cde4afd..609c110 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
@@ -753,7 +753,11 @@
 
     // Get the configured targets as ConfigMatchingProvider interfaces.
     for (Dependency entry : configConditionDeps) {
-      SkyKey baseKey = ConfiguredTargetKey.of(entry.getLabel(), entry.getConfiguration());
+      SkyKey baseKey =
+          ConfiguredTargetKey.builder()
+              .setLabel(entry.getLabel())
+              .setConfiguration(entry.getConfiguration())
+              .build();
       ConfiguredTarget value = configValues.get(baseKey).getConfiguredTarget();
       // The code above guarantees that value is non-null here and since the rule is a
       // config_setting, provider must also be non-null.
@@ -928,7 +932,10 @@
     StoredEventHandler events = new StoredEventHandler();
     CachingAnalysisEnvironment analysisEnvironment =
         view.createAnalysisEnvironment(
-            ConfiguredTargetKey.of(target.getLabel(), configuration),
+            ConfiguredTargetKey.builder()
+                .setLabel(target.getLabel())
+                .setConfiguration(configuration)
+                .build(),
             false,
             events,
             env,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareAnalysisPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareAnalysisPhaseFunction.java
index 4ab7bf2..e6ff029 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareAnalysisPhaseFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareAnalysisPhaseFunction.java
@@ -178,9 +178,13 @@
       return null;
     }
     ImmutableList<ConfiguredTargetKey> topLevelCtKeys =
-        topLevelTargetsWithConfigs
-            .stream()
-            .map(node -> ConfiguredTargetKey.of(node.getLabel(), node.getConfiguration()))
+        topLevelTargetsWithConfigs.stream()
+            .map(
+                node ->
+                    ConfiguredTargetKey.builder()
+                        .setLabel(node.getLabel())
+                        .setConfiguration(node.getConfiguration())
+                        .build())
             .collect(ImmutableList.toImmutableList());
     return new PrepareAnalysisPhaseValue(
         hostConfigurationKey, targetConfigurationKeys, topLevelCtKeys);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java
index 25f90c5..7cd23c6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredExecutionPlatformsFunction.java
@@ -129,7 +129,12 @@
 
     ImmutableList<ConfiguredTargetKey> keys =
         labels.stream()
-            .map(label -> ConfiguredTargetKey.of(label, configuration))
+            .map(
+                label ->
+                    ConfiguredTargetKey.builder()
+                        .setLabel(label)
+                        .setConfiguration(configuration)
+                        .build())
             .collect(toImmutableList());
 
     Map<SkyKey, ValueOrException<ConfiguredValueCreationException>> values =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
index 950fb91..e610e33 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
@@ -128,9 +128,13 @@
       List<Label> labels)
       throws InterruptedException, RegisteredToolchainsFunctionException {
     ImmutableList<SkyKey> keys =
-        labels
-            .stream()
-            .map(label -> ConfiguredTargetKey.of(label, configuration))
+        labels.stream()
+            .map(
+                label ->
+                    ConfiguredTargetKey.builder()
+                        .setLabel(label)
+                        .setConfiguration(configuration)
+                        .build())
             .collect(toImmutableList());
 
     Map<SkyKey, ValueOrException<ConfiguredValueCreationException>> values =
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 773de31..80b3a8c 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
@@ -1772,7 +1772,11 @@
         continue;
       }
       for (BuildConfiguration depConfig : configs.get(key)) {
-        skyKeys.add(ConfiguredTargetKey.of(key.getLabel(), depConfig));
+        skyKeys.add(
+            ConfiguredTargetKey.builder()
+                .setLabel(key.getLabel())
+                .setConfiguration(depConfig)
+                .build());
         for (AspectDescriptor aspectDescriptor : key.getAspects().getAllAspects()) {
           skyKeys.add(
               AspectValueKey.createAspectKey(
@@ -1801,7 +1805,11 @@
           continue;
         }
         for (BuildConfiguration depConfig : configs.get(key)) {
-          SkyKey configuredTargetKey = ConfiguredTargetKey.of(key.getLabel(), depConfig);
+          SkyKey configuredTargetKey =
+              ConfiguredTargetKey.builder()
+                  .setLabel(key.getLabel())
+                  .setConfiguration(depConfig)
+                  .build();
           if (result.get(configuredTargetKey) == null) {
             continue;
           }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletionValue.java
index 20ea2a2..91e6519 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletionValue.java
@@ -44,9 +44,10 @@
         targets,
         ct ->
             TargetCompletionKey.create(
-                // Can't build top-level targets in host configuration.
-                ConfiguredTargetKey.of(
-                    ct, ct.getConfigurationKey(), /*isHostConfiguration=*/ false),
+                ConfiguredTargetKey.builder()
+                    .setConfiguredTarget(ct)
+                    .setConfigurationKey(ct.getConfigurationKey())
+                    .build(),
                 ctx,
                 targetsToTest.contains(ct)));
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java
index 2910daf..f55e507 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionValue.java
@@ -53,9 +53,10 @@
         targets,
         ct ->
             TestCompletionKey.create(
-                // Tests are never in host configuration.
-                ConfiguredTargetKey.of(
-                    ct, ct.getConfigurationKey(), /*isHostConfiguration=*/ false),
+                ConfiguredTargetKey.builder()
+                    .setConfiguredTarget(ct)
+                    .setConfigurationKey(ct.getConfigurationKey())
+                    .build(),
                 topLevelArtifactContext,
                 exclusiveTesting));
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java
index 26f4ce5..c71ff9c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainResolutionFunction.java
@@ -152,7 +152,12 @@
       throws InvalidToolchainTypeException, InterruptedException, ValueMissingException {
     ImmutableSet<ConfiguredTargetKey> toolchainTypeKeys =
         requestedToolchainTypeLabels.stream()
-            .map(label -> ConfiguredTargetKey.of(label, configuration))
+            .map(
+                label ->
+                    ConfiguredTargetKey.builder()
+                        .setLabel(label)
+                        .setConfiguration(configuration)
+                        .build())
             .collect(toImmutableSet());
 
     ImmutableMap<Label, ToolchainTypeInfo> resolvedToolchainTypes =
@@ -195,9 +200,16 @@
     Label hostPlatformLabel = platformConfiguration.getHostPlatform();
     Label targetPlatformLabel = platformConfiguration.getTargetPlatform();
 
-    ConfiguredTargetKey hostPlatformKey = ConfiguredTargetKey.of(hostPlatformLabel, configuration);
+    ConfiguredTargetKey hostPlatformKey =
+        ConfiguredTargetKey.builder()
+            .setLabel(hostPlatformLabel)
+            .setConfiguration(configuration)
+            .build();
     ConfiguredTargetKey targetPlatformKey =
-        ConfiguredTargetKey.of(targetPlatformLabel, configuration);
+        ConfiguredTargetKey.builder()
+            .setLabel(targetPlatformLabel)
+            .setConfiguration(configuration)
+            .build();
 
     // Load the host and target platforms early, to check for errors.
     PlatformLookupUtil.getPlatformInfo(
@@ -249,7 +261,12 @@
     // Filter out execution platforms that don't satisfy the extra constraints.
     ImmutableList<ConfiguredTargetKey> execConstraintKeys =
         execConstraintLabels.stream()
-            .map(label -> ConfiguredTargetKey.of(label, configuration))
+            .map(
+                label ->
+                    ConfiguredTargetKey.builder()
+                        .setLabel(label)
+                        .setConfiguration(configuration)
+                        .build())
             .collect(toImmutableList());
 
     return filterAvailablePlatforms(