aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
diff options
context:
space:
mode:
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.java51
1 files changed, 24 insertions, 27 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 a64e031e5f..289cabcfa1 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
@@ -20,12 +20,12 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
-import com.google.common.collect.Multimaps;
import com.google.common.collect.Sets;
import com.google.common.eventbus.EventBus;
import com.google.devtools.build.lib.actions.Action;
@@ -269,8 +269,9 @@ public class BuildView {
public void run() {
clear();
}
- },
- binTools);
+ },
+ binTools,
+ ruleClassProvider);
skyframeExecutor.setSkyframeBuildView(skyframeBuildView);
}
@@ -298,6 +299,7 @@ public class BuildView {
@VisibleForTesting
public void setConfigurationsForTesting(BuildConfigurationCollection configurations) {
this.configurations = configurations;
+ skyframeBuildView.setTopLevelHostConfiguration(configurations.getHostConfiguration());
}
public BuildConfigurationCollection getConfigurationCollection() {
@@ -352,8 +354,8 @@ public class BuildView {
public Iterable<ConfiguredTarget> getDirectPrerequisites(
ConfiguredTarget ct, @Nullable final LoadingCache<Label, Target> targetCache) {
- return skyframeExecutor.getConfiguredTargets(
- getDirectPrerequisiteDependencies(ct, targetCache));
+ return skyframeExecutor.getConfiguredTargets(ct.getConfiguration(),
+ getDirectPrerequisiteDependencies(ct, targetCache), false);
}
public Iterable<Dependency> getDirectPrerequisiteDependencies(
@@ -391,7 +393,8 @@ public class BuildView {
DependencyResolver dependencyResolver = new SilentDependencyResolver();
TargetAndConfiguration ctgNode =
new TargetAndConfiguration(ct.getTarget(), ct.getConfiguration());
- return dependencyResolver.dependentNodes(ctgNode, getConfigurableAttributeKeys(ctgNode));
+ return dependencyResolver.dependentNodes(ctgNode, configurations.getHostConfiguration(),
+ getConfigurableAttributeKeys(ctgNode));
}
/**
@@ -603,6 +606,7 @@ public class BuildView {
skyframeAnalysisWasDiscarded = false;
ImmutableMap<PackageIdentifier, Path> packageRoots = loadingResult.getPackageRoots();
this.configurations = configurations;
+ skyframeBuildView.setTopLevelHostConfiguration(this.configurations.getHostConfiguration());
setArtifactRoots(packageRoots);
// Determine the configurations.
List<TargetAndConfiguration> nodes = nodesForTargets(targets);
@@ -633,7 +637,7 @@ public class BuildView {
}
prepareToBuild(new SkyframePackageRootResolver(skyframeExecutor));
- skyframeExecutor.injectWorkspaceStatusData();
+ skyframeExecutor.injectWorkspaceStatusData(configurations);
SkyframeAnalysisResult skyframeAnalysisResult;
try {
skyframeAnalysisResult =
@@ -843,7 +847,7 @@ public class BuildView {
Label label, BuildConfiguration configuration) {
return Iterables.getFirst(
skyframeExecutor.getConfiguredTargets(
- ImmutableList.of(new Dependency(label, configuration))),
+ configuration, ImmutableList.of(new Dependency(label, configuration)), true),
null);
}
@@ -868,23 +872,21 @@ public class BuildView {
TargetAndConfiguration ctNode = new TargetAndConfiguration(target);
ListMultimap<Attribute, Dependency> depNodeNames;
try {
- depNodeNames = resolver.dependentNodeMap(ctNode, null, getConfigurableAttributeKeys(ctNode));
+ depNodeNames = resolver.dependentNodeMap(ctNode, configurations.getHostConfiguration(), null,
+ getConfigurableAttributeKeys(ctNode));
} catch (EvalException e) {
throw new IllegalStateException(e);
}
- final Map<LabelAndConfiguration, ConfiguredTarget> depMap = new HashMap<>();
- for (ConfiguredTarget dep : skyframeExecutor.getConfiguredTargets(depNodeNames.values())) {
- depMap.put(LabelAndConfiguration.of(dep.getLabel(), dep.getConfiguration()), dep);
- }
+ ImmutableMap<Dependency, ConfiguredTarget> cts = skyframeExecutor.getConfiguredTargetMap(
+ ctNode.getConfiguration(), ImmutableSet.copyOf(depNodeNames.values()), false);
- return Multimaps.transformValues(depNodeNames, new Function<Dependency, ConfiguredTarget>() {
- @Override
- public ConfiguredTarget apply(Dependency depName) {
- return depMap.get(LabelAndConfiguration.of(depName.getLabel(),
- depName.getConfiguration()));
- }
- });
+ ImmutableListMultimap.Builder<Attribute, ConfiguredTarget> builder =
+ ImmutableListMultimap.builder();
+ for (Map.Entry<Attribute, Dependency> entry : depNodeNames.entries()) {
+ builder.put(entry.getKey(), cts.get(entry.getValue()));
+ }
+ return builder.build();
}
/**
@@ -955,7 +957,7 @@ public class BuildView {
/*isSystemEnv=*/false, config.extendedSanityChecks(), eventHandler,
/*skyframeEnv=*/null, config.isActionsEnabled(), binTools);
return new RuleContext.Builder(analysisEnvironment,
- (Rule) target.getTarget(), config, getHostConfigurationForTesting(config),
+ (Rule) target.getTarget(), config, configurations.getHostConfiguration(),
ruleClassProvider.getPrerequisiteValidator())
.setVisibility(NestedSetBuilder.<PackageSpecification>create(
Order.STABLE_ORDER, PackageSpecification.EVERYTHING))
@@ -972,7 +974,7 @@ public class BuildView {
public RuleContext getRuleContextForTesting(ConfiguredTarget target, AnalysisEnvironment env) {
BuildConfiguration targetConfig = target.getConfiguration();
return new RuleContext.Builder(
- env, (Rule) target.getTarget(), targetConfig, getHostConfigurationForTesting(targetConfig),
+ env, (Rule) target.getTarget(), targetConfig, configurations.getHostConfiguration(),
ruleClassProvider.getPrerequisiteValidator())
.setVisibility(NestedSetBuilder.<PackageSpecification>create(
Order.STABLE_ORDER, PackageSpecification.EVERYTHING))
@@ -981,11 +983,6 @@ public class BuildView {
.build();
}
- private BuildConfiguration getHostConfigurationForTesting(BuildConfiguration config) {
- // TODO(bazel-team): support dynamic transitions in tests.
- return config == null ? null : config.getConfiguration(Attribute.ConfigurationTransition.HOST);
- }
-
/**
* For a configured target dependentTarget, returns the desired configured target
* that is depended upon. Useful for obtaining the a target with aspects