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)); + } + } }