Introduce a Builder class for creating instances of ConfiguredTargetKey.
Part of work on toolchain transitions, #10523.
PiperOrigin-RevId: 313615963
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 d14b5a4..5aaf08e 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
@@ -267,7 +267,10 @@
}
return createAspectKey(
- ConfiguredTargetKey.of(label, baseConfiguredTargetKey.getConfigurationKey()),
+ ConfiguredTargetKey.builder()
+ .setLabel(label)
+ .setConfigurationKey(baseConfiguredTargetKey.getConfigurationKey())
+ .build(),
newBaseKeys.build(),
aspectDescriptor,
aspectConfigurationKey);
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 3e65fd6..264a2ef 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
@@ -42,48 +42,6 @@
this.configurationKey = configurationKey;
}
- // TODO(jcater): Remove as part of converting to Builders.
- public static ConfiguredTargetKey of(
- ConfiguredTarget configuredTarget, BuildConfiguration buildConfiguration) {
- return of(configuredTarget.getOriginalLabel(), buildConfiguration);
- }
-
- // TODO(jcater): Remove as part of converting to Builders.
- public static ConfiguredTargetKey of(
- ConfiguredTarget configuredTarget,
- BuildConfigurationValue.Key configurationKey,
- boolean ignored) {
- return of(configuredTarget.getOriginalLabel(), configurationKey);
- }
-
- // TODO(jcater): Remove as part of converting to Builders.
- public static ConfiguredTargetKey inTargetConfig(ConfiguredTarget configuredTarget) {
- return of(configuredTarget.getOriginalLabel(), configuredTarget.getConfigurationKey());
- }
-
- /**
- * Caches so that the number of ConfiguredTargetKey instances is {@code O(configured targets)} and
- * not {@code O(edges between configured targets)}.
- */
- private static final Interner<ConfiguredTargetKey> interner = BlazeInterners.newWeakInterner();
-
- public static ConfiguredTargetKey of(Label label, @Nullable BuildConfiguration configuration) {
- return of(
- label, configuration == null ? null : BuildConfigurationValue.key(configuration), false);
- }
-
- // TODO(jcater): Remove as part of converting to Builders.
- public static ConfiguredTargetKey of(
- Label label, @Nullable BuildConfigurationValue.Key configurationKey, boolean ignored) {
- return of(label, configurationKey);
- }
-
- @AutoCodec.Instantiator
- public static ConfiguredTargetKey of(
- Label label, @Nullable BuildConfigurationValue.Key configurationKey) {
- return interner.intern(new ConfiguredTargetKey(label, configurationKey));
- }
-
@Override
public Label getLabel() {
return label;
@@ -157,4 +115,101 @@
public String toString() {
return String.format("%s %s", label, configurationKey);
}
+
+ public static ConfiguredTargetKey of(
+ ConfiguredTarget configuredTarget, BuildConfiguration buildConfiguration) {
+ return builder()
+ .setConfiguredTarget(configuredTarget)
+ .setConfiguration(buildConfiguration)
+ .build();
+ }
+
+ public static ConfiguredTargetKey of(
+ ConfiguredTarget configuredTarget,
+ BuildConfigurationValue.Key configurationKey,
+ boolean unused) {
+ return builder()
+ .setConfiguredTarget(configuredTarget)
+ .setConfigurationKey(configurationKey)
+ .build();
+ }
+
+ public static ConfiguredTargetKey of(Label label, @Nullable BuildConfiguration configuration) {
+ return builder().setLabel(label).setConfiguration(configuration).build();
+ }
+
+ public static ConfiguredTargetKey of(
+ Label label, @Nullable BuildConfigurationValue.Key configurationKey, boolean unused) {
+ return builder().setLabel(label).setConfigurationKey(configurationKey).build();
+ }
+
+ @AutoCodec.Instantiator
+ public static ConfiguredTargetKey of(
+ Label label, @Nullable BuildConfigurationValue.Key configurationKey) {
+ return builder().setLabel(label).setConfigurationKey(configurationKey).build();
+ }
+
+ public static ConfiguredTargetKey inTargetConfig(ConfiguredTarget configuredTarget) {
+ return builder()
+ .setConfiguredTarget(configuredTarget)
+ .setConfigurationKey(configuredTarget.getConfigurationKey())
+ .build();
+ }
+
+ /** Returns a new {@link Builder} to create instances of {@link ConfiguredTargetKey}. */
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /**
+ * Caches so that the number of ConfiguredTargetKey instances is {@code O(configured targets)} and
+ * not {@code O(edges between configured targets)}.
+ */
+ private static final Interner<ConfiguredTargetKey> interner = BlazeInterners.newWeakInterner();
+
+ /** A helper class to create instances of {@link ConfiguredTargetKey}. */
+ public static class Builder {
+
+ private Label label = null;
+ private BuildConfigurationValue.Key configurationKey = null;
+
+ /** Sets the label for the target. */
+ public Builder setLabel(Label label) {
+ this.label = label;
+ return this;
+ }
+
+ /**
+ * Sets the {@link ConfiguredTarget} that we want a key for.
+ *
+ * <p>This sets both the label and configurationKey data.
+ */
+ public Builder setConfiguredTarget(ConfiguredTarget configuredTarget) {
+ setLabel(configuredTarget.getOriginalLabel());
+ if (this.configurationKey == null) {
+ setConfigurationKey(configuredTarget.getConfigurationKey());
+ }
+ return this;
+ }
+
+ /** Sets the {@link BuildConfiguration} for the configured target. */
+ public Builder setConfiguration(@Nullable BuildConfiguration buildConfiguration) {
+ if (buildConfiguration == null) {
+ return setConfigurationKey(null);
+ } else {
+ return setConfigurationKey(BuildConfigurationValue.key(buildConfiguration));
+ }
+ }
+
+ /** Sets the configuration key for the configured target. */
+ public Builder setConfigurationKey(@Nullable BuildConfigurationValue.Key configurationKey) {
+ this.configurationKey = configurationKey;
+ return this;
+ }
+
+ /** Builds a new {@link ConfiguredTargetKey} based on the supplied data. */
+ public ConfiguredTargetKey build() {
+ return interner.intern(new ConfiguredTargetKey(label, configurationKey));
+ }
+ }
}