diff options
author | Cal Peyser <cpeyser@google.com> | 2017-03-24 15:44:24 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2017-03-27 11:35:07 +0000 |
commit | 8a638d58259b4251c52cd9561588573911db0c1f (patch) | |
tree | 9f39576aef91c2ade9b6ecd71691390c7203be02 /src/main/java/com/google/devtools/build/lib/analysis/BuildView.java | |
parent | 74e90608de56759247c12f0eabfdcf26b0cfd19f (diff) |
Unit tests respect top-level rule-class transitions.
--
PiperOrigin-RevId: 151129669
MOS_MIGRATED_REVID=151129669
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/BuildView.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/BuildView.java | 35 |
1 files changed, 32 insertions, 3 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 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)); } /** |