From b38e3af9114ff91906cd1109fba9bddca86db185 Mon Sep 17 00:00:00 2001 From: cpeyser Date: Mon, 11 Sep 2017 16:58:58 +0200 Subject: Toolchain providers are propagated in the ToolchainContext instance made available from BuildViewTestCase#getRuleContext PiperOrigin-RevId: 168231020 --- .../devtools/build/lib/analysis/BuildView.java | 39 +++++++++++++++------- .../build/lib/analysis/DependencyResolver.java | 6 ++-- .../build/lib/analysis/ToolchainContext.java | 7 +++- .../lib/skyframe/PostConfiguredTargetFunction.java | 6 +++- .../devtools/build/lib/analysis/BuildViewTest.java | 2 +- .../build/lib/analysis/DependencyResolverTest.java | 3 +- .../build/lib/skyframe/RuleContextTest.java | 10 ++++++ 7 files changed, 55 insertions(+), 18 deletions(-) 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 d8007c1917..b797532931 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 @@ -1056,9 +1056,12 @@ public class BuildView { throws EvalException, InvalidConfigurationException, InterruptedException, InconsistentAspectOrderException { return skyframeExecutor.getConfiguredTargets( - eventHandler, ct.getConfiguration(), + eventHandler, + ct.getConfiguration(), ImmutableSet.copyOf( - getDirectPrerequisiteDependenciesForTesting(eventHandler, ct, configurations).values()), + getDirectPrerequisiteDependenciesForTesting( + eventHandler, ct, configurations, /*toolchainContext=*/ null) + .values()), false); } @@ -1066,9 +1069,10 @@ public class BuildView { public OrderedSetMultimap getDirectPrerequisiteDependenciesForTesting( final ExtendedEventHandler eventHandler, final ConfiguredTarget ct, - BuildConfigurationCollection configurations) + BuildConfigurationCollection configurations, + ToolchainContext toolchainContext) throws EvalException, InvalidConfigurationException, InterruptedException, - InconsistentAspectOrderException { + InconsistentAspectOrderException { if (!(ct.getTarget() instanceof Rule)) { return OrderedSetMultimap.create(); } @@ -1128,8 +1132,11 @@ public class BuildView { TargetAndConfiguration ctgNode = new TargetAndConfiguration(ct.getTarget(), ct.getConfiguration()); return dependencyResolver.dependentNodeMap( - ctgNode, configurations.getHostConfiguration(), /*aspect=*/ null, - getConfigurableAttributeKeysForTesting(eventHandler, ctgNode)); + ctgNode, + configurations.getHostConfiguration(), + /*aspect=*/ null, + getConfigurableAttributeKeysForTesting(eventHandler, ctgNode), + toolchainContext); } /** @@ -1160,11 +1167,13 @@ public class BuildView { private OrderedSetMultimap getPrerequisiteMapForTesting( final ExtendedEventHandler eventHandler, ConfiguredTarget target, - BuildConfigurationCollection configurations) - throws EvalException, InvalidConfigurationException, - InterruptedException, InconsistentAspectOrderException { + BuildConfigurationCollection configurations, + ToolchainContext toolchainContext) + throws EvalException, InvalidConfigurationException, InterruptedException, + InconsistentAspectOrderException { OrderedSetMultimap depNodeNames = - getDirectPrerequisiteDependenciesForTesting(eventHandler, target, configurations); + getDirectPrerequisiteDependenciesForTesting( + eventHandler, target, configurations, toolchainContext); ImmutableMultimap cts = skyframeExecutor.getConfiguredTargetMap( eventHandler, @@ -1258,6 +1267,9 @@ public class BuildView { ToolchainContext toolchainContext = skyframeExecutor.getToolchainContextForTesting( requiredToolchains, targetConfig, eventHandler); + OrderedSetMultimap prerequisiteMap = + getPrerequisiteMapForTesting(eventHandler, target, configurations, toolchainContext); + toolchainContext.resolveToolchains(prerequisiteMap); return new RuleContext.Builder( env, @@ -1270,7 +1282,8 @@ public class BuildView { .setVisibility( NestedSetBuilder.create( Order.STABLE_ORDER, PackageSpecification.everything())) - .setPrerequisites(getPrerequisiteMapForTesting(eventHandler, target, configurations)) + .setPrerequisites( + getPrerequisiteMapForTesting(eventHandler, target, configurations, toolchainContext)) .setConfigConditions(ImmutableMap.of()) .setUniversalFragment(ruleClassProvider.getUniversalFragment()) .setToolchainContext(toolchainContext) @@ -1290,7 +1303,9 @@ public class BuildView { throws EvalException, InvalidConfigurationException, InterruptedException, InconsistentAspectOrderException { Collection configuredTargets = - getPrerequisiteMapForTesting(eventHandler, dependentTarget, configurations).values(); + getPrerequisiteMapForTesting( + eventHandler, dependentTarget, configurations, /*toolchainContext=*/ null) + .values(); for (ConfiguredTarget ct : configuredTargets) { if (ct.getLabel().equals(desiredTarget)) { return ct; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java index e2380261a8..28ee44deac 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java @@ -91,13 +91,15 @@ public abstract class DependencyResolver { * This is needed to support {@link LateBoundDefault#useHostConfiguration()}. * @param aspect the aspect applied to this target (if any) * @param configConditions resolver for config_setting labels + * @param toolchainContext {@link ToolchainContext} for this target * @return a mapping of each attribute in this rule or aspects to its dependent nodes */ public final OrderedSetMultimap dependentNodeMap( TargetAndConfiguration node, BuildConfiguration hostConfig, @Nullable Aspect aspect, - ImmutableMap configConditions) + ImmutableMap configConditions, + ToolchainContext toolchainContext) throws EvalException, InvalidConfigurationException, InterruptedException, InconsistentAspectOrderException { NestedSetBuilder