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)); } /**