Fix test configured target creation code that was dropping split deps.
Short story: Dependency -> BuildConfiguration maps can have multiple values
because of split transitions.
This is unfortunately one of those instances where the test logic is forked from
production. So this doesn't actually demonstrate bugs in production code. We
already have tests in ConfigurationsForTargetsTest that directly check the
production logic. So this cl's primary value is to unbreak tests that depend on
the forked logic.
--
PiperOrigin-RevId: 141094830
MOS_MIGRATED_REVID=141094830
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index b9297a2..8f065ef 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -22,6 +22,7 @@
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -865,10 +866,10 @@
new LinkedHashMap<>();
if (!asDeps.isEmpty()) {
for (BuildConfiguration fromConfig : asDeps.keySet()) {
- Map<Dependency, BuildConfiguration> trimmedTargets =
+ Multimap<Dependency, BuildConfiguration> trimmedTargets =
skyframeExecutor.getConfigurations(eventHandler, fromConfig.getOptions(),
asDeps.get(fromConfig));
- for (Map.Entry<Dependency, BuildConfiguration> trimmedTarget : trimmedTargets.entrySet()) {
+ for (Map.Entry<Dependency, BuildConfiguration> trimmedTarget : trimmedTargets.entries()) {
Target target = labelsToTargets.get(trimmedTarget.getKey().getLabel());
successfullyEvaluatedTargets.put(
new TargetAndConfiguration(target, fromConfig),
@@ -1054,13 +1055,13 @@
OrderedSetMultimap<Attribute, Dependency> depNodeNames =
getDirectPrerequisiteDependenciesForTesting(eventHandler, target, configurations);
- ImmutableMap<Dependency, ConfiguredTarget> cts = skyframeExecutor.getConfiguredTargetMap(
+ ImmutableMultimap<Dependency, ConfiguredTarget> cts = skyframeExecutor.getConfiguredTargetMap(
eventHandler,
target.getConfiguration(), ImmutableSet.copyOf(depNodeNames.values()), false);
OrderedSetMultimap<Attribute, ConfiguredTarget> result = OrderedSetMultimap.create();
for (Map.Entry<Attribute, Dependency> entry : depNodeNames.entries()) {
- result.put(entry.getKey(), cts.get(entry.getValue()));
+ result.putAll(entry.getKey(), cts.get(entry.getValue()));
}
return result;
}