Stop including BuildConfiguration inside ConfiguredTargetKey: it's too heavyweight. For now, put a BuildConfigurationValue.Key in there. In the future, we may want to put some kind of "delta" key in.
PiperOrigin-RevId: 181673805
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 258223b..4a80c7a 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
@@ -139,16 +139,29 @@
NestedSetBuilder<Package> transitivePackagesForPackageRootResolution =
storeTransitivePackagesForPackageRootResolution ? NestedSetBuilder.stableOrder() : null;
NestedSetBuilder<Label> transitiveLoadingRootCauses = NestedSetBuilder.stableOrder();
+
ConfiguredTargetKey configuredTargetKey = (ConfiguredTargetKey) key.argument();
Label label = configuredTargetKey.getLabel();
-
- BuildConfiguration configuration = configuredTargetKey.getConfiguration();
-
- PackageValue packageValue =
- (PackageValue) env.getValue(PackageValue.key(label.getPackageIdentifier()));
- if (packageValue == null) {
+ BuildConfiguration configuration = null;
+ ImmutableSet<SkyKey> packageAndMaybeConfiguration;
+ SkyKey packageKey = PackageValue.key(label.getPackageIdentifier());
+ SkyKey configurationKeyMaybe = configuredTargetKey.getConfigurationKey();
+ if (configurationKeyMaybe == null) {
+ packageAndMaybeConfiguration = ImmutableSet.of(packageKey);
+ } else {
+ packageAndMaybeConfiguration = ImmutableSet.of(packageKey, configurationKeyMaybe);
+ }
+ Map<SkyKey, SkyValue> packageAndMaybeConfigurationValues =
+ env.getValues(packageAndMaybeConfiguration);
+ if (env.valuesMissing()) {
return null;
}
+ PackageValue packageValue = (PackageValue) packageAndMaybeConfigurationValues.get(packageKey);
+ if (configurationKeyMaybe != null) {
+ configuration =
+ ((BuildConfigurationValue) packageAndMaybeConfigurationValues.get(configurationKeyMaybe))
+ .getConfiguration();
+ }
// TODO(ulfjack): This tries to match the logic in TransitiveTargetFunction /
// TargetMarkerFunction. Maybe we can merge the two?