aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-01-11 15:49:42 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-11 15:51:40 -0800
commit3863b536bcab8de2000f342c85c31c7ea91cccbe (patch)
tree4797a2d516587e1cf99cc912bc3a18763c07e0ce /src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
parent1a19b62bc493d83734c34c888401d5c45e8bf55c (diff)
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
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java25
1 files changed, 19 insertions, 6 deletions
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 258223b3f0..4a80c7ab24 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 @@ public final class ConfiguredTargetFunction implements SkyFunction {
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?