aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-09-07 17:17:03 +0200
committerGravatar Yun Peng <pcloudy@google.com>2017-09-08 09:47:23 +0200
commitfb829994988798e3d6663d66497f4614148ea79a (patch)
tree76dbe3bfd1c3ff44ea67750a8bc3c7bef890489b /src/main
parent4e79061f74a03dd9274f88ff42a7e2c0d6adae6c (diff)
Rule classes cannot request duplicate toolchains.
PiperOrigin-RevId: 167861778
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BuildView.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleClass.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java5
8 files changed, 20 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 7797838c06..d8007c1917 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
@@ -1253,7 +1253,7 @@ public class BuildView {
throws EvalException, InvalidConfigurationException, InterruptedException,
InconsistentAspectOrderException, ToolchainContextException {
BuildConfiguration targetConfig = target.getConfiguration();
- List<Label> requiredToolchains =
+ Set<Label> requiredToolchains =
target.getTarget().getAssociatedRule().getRuleClassObject().getRequiredToolchains();
ToolchainContext toolchainContext =
skyframeExecutor.getToolchainContextForTesting(
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java
index 8754c3e892..7327c53da7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainContext.java
@@ -38,7 +38,6 @@ import com.google.devtools.build.lib.syntax.EvalUtils;
import com.google.devtools.build.lib.syntax.SkylarkIndexable;
import com.google.devtools.build.lib.util.OrderedSetMultimap;
import com.google.devtools.build.lib.util.Preconditions;
-import java.util.List;
import java.util.Optional;
import java.util.Set;
import javax.annotation.Nullable;
@@ -54,7 +53,7 @@ import javax.annotation.Nullable;
public class ToolchainContext {
public static ToolchainContext create(
String targetDescription,
- List<Label> requiredToolchains,
+ Set<Label> requiredToolchains,
ImmutableBiMap<Label, Label> resolvedLabels) {
ToolchainContext toolchainContext =
new ToolchainContext(
@@ -76,7 +75,7 @@ public class ToolchainContext {
private ToolchainContext(
String targetDescription,
- List<Label> requiredToolchains,
+ Set<Label> requiredToolchains,
ResolvedToolchainLabels resolvedToolchainLabels) {
this.targetDescription = targetDescription;
this.requiredToolchains = ImmutableList.copyOf(requiredToolchains);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
index 7fcd60f4f7..5570c3f913 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
@@ -60,7 +60,7 @@ public final class AspectDefinition {
private final RequiredProviders requiredProviders;
private final RequiredProviders requiredProvidersForAspects;
private final ImmutableMap<String, Attribute> attributes;
- private final ImmutableList<Label> requiredToolchains;
+ private final ImmutableSet<Label> requiredToolchains;
/**
* Which attributes aspect should propagate along:
@@ -83,7 +83,7 @@ public final class AspectDefinition {
RequiredProviders requiredProviders,
RequiredProviders requiredAspectProviders,
ImmutableMap<String, Attribute> attributes,
- ImmutableList<Label> requiredToolchains,
+ ImmutableSet<Label> requiredToolchains,
@Nullable ImmutableSet<String> restrictToAttributes,
@Nullable ConfigurationFragmentPolicy configurationFragmentPolicy,
boolean applyToFiles) {
@@ -117,7 +117,7 @@ public final class AspectDefinition {
}
/** Returns the required toolchains declared by this aspect. */
- public ImmutableList<Label> getRequiredToolchains() {
+ public ImmutableSet<Label> getRequiredToolchains() {
return requiredToolchains;
}
@@ -485,7 +485,7 @@ public final class AspectDefinition {
requiredProviders.build(),
requiredAspectProviders.build(),
ImmutableMap.copyOf(attributes),
- ImmutableList.copyOf(requiredToolchains),
+ ImmutableSet.copyOf(requiredToolchains),
propagateAlongAttributes == null ? null : ImmutableSet.copyOf(propagateAlongAttributes),
configurationFragmentPolicy.build(),
applyToFiles);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 3a222db401..dcf609261e 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -59,6 +59,7 @@ import java.util.BitSet;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -483,7 +484,7 @@ public class RuleClass {
private boolean supportsConstraintChecking = true;
private final Map<String, Attribute> attributes = new LinkedHashMap<>();
- private final List<Label> requiredToolchains = new ArrayList<>();
+ private final Set<Label> requiredToolchains = new HashSet<>();
/**
* Constructs a new {@code RuleClassBuilder} using all attributes from all
@@ -1115,7 +1116,7 @@ public class RuleClass {
*/
private final boolean supportsConstraintChecking;
- private final ImmutableList<Label> requiredToolchains;
+ private final ImmutableSet<Label> requiredToolchains;
/**
* Constructs an instance of RuleClass whose name is 'name', attributes are 'attributes'. The
@@ -1163,7 +1164,7 @@ public class RuleClass {
String ruleDefinitionEnvironmentHashCode,
ConfigurationFragmentPolicy configurationFragmentPolicy,
boolean supportsConstraintChecking,
- List<Label> requiredToolchains,
+ Set<Label> requiredToolchains,
Attribute... attributes) {
this.name = name;
this.isSkylark = isSkylark;
@@ -1192,7 +1193,7 @@ public class RuleClass {
this.outputsDefaultExecutable = outputsDefaultExecutable;
this.configurationFragmentPolicy = configurationFragmentPolicy;
this.supportsConstraintChecking = supportsConstraintChecking;
- this.requiredToolchains = ImmutableList.copyOf(requiredToolchains);
+ this.requiredToolchains = ImmutableSet.copyOf(requiredToolchains);
// Create the index and collect non-configurable attributes.
int index = 0;
@@ -2002,7 +2003,7 @@ public class RuleClass {
return outputsDefaultExecutable;
}
- public ImmutableList<Label> getRequiredToolchains() {
+ public ImmutableSet<Label> getRequiredToolchains() {
return requiredToolchains;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index f9ae4cf69c..ce8405bafb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -17,6 +17,7 @@ package com.google.devtools.build.lib.skyframe;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
import com.google.devtools.build.lib.actions.ActionLookupValue;
import com.google.devtools.build.lib.analysis.AliasProvider;
@@ -275,7 +276,7 @@ public final class AspectFunction implements SkyFunction {
// Determine what toolchains are needed by this target.
ToolchainContext toolchainContext;
try {
- ImmutableList<Label> requiredToolchains = aspect.getDefinition().getRequiredToolchains();
+ ImmutableSet<Label> requiredToolchains = aspect.getDefinition().getRequiredToolchains();
toolchainContext =
ToolchainUtil.createToolchainContext(
env,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index 7e396ec338..9832487cfc 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -232,7 +232,7 @@ public final class ConfiguredTargetFunction implements SkyFunction {
// Determine what toolchains are needed by this target.
if (target instanceof Rule) {
Rule rule = ((Rule) target);
- ImmutableList<Label> requiredToolchains = rule.getRuleClassObject().getRequiredToolchains();
+ ImmutableSet<Label> requiredToolchains = rule.getRuleClassObject().getRequiredToolchains();
toolchainContext =
ToolchainUtil.createToolchainContext(
env, rule.toString(), requiredToolchains, configuration);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index d6aec311a1..f592d39268 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -834,7 +834,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
@VisibleForTesting
public ToolchainContext getToolchainContextForTesting(
- List<Label> requiredToolchains, BuildConfiguration config, ExtendedEventHandler eventHandler)
+ Set<Label> requiredToolchains, BuildConfiguration config, ExtendedEventHandler eventHandler)
throws ToolchainContextException, InterruptedException {
SkyFunctionEnvironmentForTesting env =
new SkyFunctionEnvironmentForTesting(buildDriver, eventHandler);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java
index 0f2a35238e..13e055b5aa 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java
@@ -38,6 +38,7 @@ import com.google.devtools.build.skyframe.ValueOrException4;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import javax.annotation.Nullable;
/**
@@ -53,7 +54,7 @@ public class ToolchainUtil {
public static ToolchainContext createToolchainContext(
Environment env,
String targetDescription,
- List<Label> requiredToolchains,
+ Set<Label> requiredToolchains,
BuildConfiguration configuration)
throws ToolchainContextException, InterruptedException {
ImmutableBiMap<Label, Label> resolvedLabels =
@@ -131,7 +132,7 @@ public class ToolchainUtil {
@Nullable
private static ImmutableBiMap<Label, Label> resolveToolchainLabels(
- Environment env, List<Label> requiredToolchains, BuildConfiguration configuration)
+ Environment env, Set<Label> requiredToolchains, BuildConfiguration configuration)
throws InterruptedException, ToolchainContextException {
// If there are no required toolchains, bail out early.