From 8a638d58259b4251c52cd9561588573911db0c1f Mon Sep 17 00:00:00 2001 From: Cal Peyser Date: Fri, 24 Mar 2017 15:44:24 +0000 Subject: Unit tests respect top-level rule-class transitions. -- PiperOrigin-RevId: 151129669 MOS_MIGRATED_REVID=151129669 --- .../devtools/build/lib/analysis/BuildView.java | 35 ++++++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/analysis/BuildView.java') 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 6043cda299..3431013053 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 @@ -54,8 +54,12 @@ import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Attribute; +import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition; +import com.google.devtools.build.lib.packages.Attribute.Transition; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.NativeAspectClass; +import com.google.devtools.build.lib.packages.NoSuchPackageException; +import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.NoSuchThingException; import com.google.devtools.build.lib.packages.PackageSpecification; import com.google.devtools.build.lib.packages.RawAttributeMapper; @@ -1088,14 +1092,39 @@ public class BuildView { return result; } + private Transition getTopLevelTransitionForTarget(Label label, ExtendedEventHandler handler) { + Rule rule; + try { + rule = skyframeExecutor + .getPackageManager() + .getTarget(handler, label) + .getAssociatedRule(); + } catch (NoSuchPackageException | NoSuchTargetException e) { + return ConfigurationTransition.NONE; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new AssertionError("Configuration of " + label + " interrupted"); + } + if (rule == null) { + return ConfigurationTransition.NONE; + } + RuleTransitionFactory factory = rule + .getRuleClassObject() + .getTransitionFactory(); + return (factory == null) ? ConfigurationTransition.NONE : factory.buildTransitionFor(rule); + } + /** - * Returns a configured target for the specified target and configuration. Returns {@code null} if - * something goes wrong. + * Returns a configured target for the specified target and configuration. If dynamic + * configurations are activated, and the target in question has a top-level rule class transition, + * that transition is applied in the returned ConfiguredTarget. Returns {@code null} if something + * goes wrong. */ @VisibleForTesting public ConfiguredTarget getConfiguredTargetForTesting( ExtendedEventHandler eventHandler, Label label, BuildConfiguration config) { - return skyframeExecutor.getConfiguredTargetForTesting(eventHandler, label, config); + return skyframeExecutor.getConfiguredTargetForTesting(eventHandler, label, config, + getTopLevelTransitionForTarget(label, eventHandler)); } /** -- cgit v1.2.3