aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2017-05-24 19:06:47 +0200
committerGravatar Irina Iancu <elenairina@google.com>2017-05-26 09:35:04 +0200
commit13263f7b799c31ef335078870a905210c14de80d (patch)
tree76fdc628130cd950e61d9c17e58fb1e8becc1c20 /src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
parentcf94053c3403297c18d75eca4a68560a1e131af5 (diff)
Add toolchains attribute to aspect.
Part of #2219. Change-Id: I39ced1f3e2605154771df9424d6ed2f971820baf PiperOrigin-RevId: 157002268
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java26
1 files changed, 20 insertions, 6 deletions
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 1dbb131e06..860e3dff3d 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
@@ -28,9 +28,11 @@ import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.syntax.Type.LabelClass;
import com.google.devtools.build.lib.syntax.Type.LabelVisitor;
import com.google.devtools.build.lib.util.Preconditions;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
@@ -58,6 +60,7 @@ public final class AspectDefinition {
private final RequiredProviders requiredProviders;
private final RequiredProviders requiredProvidersForAspects;
private final ImmutableMap<String, Attribute> attributes;
+ private final ImmutableList<ClassObjectConstructor.Key> requiredToolchains;
/**
* Which attributes aspect should propagate along:
@@ -74,13 +77,13 @@ public final class AspectDefinition {
return advertisedProviders;
}
-
private AspectDefinition(
AspectClass aspectClass,
AdvertisedProviderSet advertisedProviders,
RequiredProviders requiredProviders,
RequiredProviders requiredAspectProviders,
ImmutableMap<String, Attribute> attributes,
+ ImmutableList<ClassObjectConstructor.Key> requiredToolchains,
@Nullable ImmutableSet<String> restrictToAttributes,
@Nullable ConfigurationFragmentPolicy configurationFragmentPolicy,
boolean applyToFiles) {
@@ -90,6 +93,7 @@ public final class AspectDefinition {
this.requiredProvidersForAspects = requiredAspectProviders;
this.attributes = attributes;
+ this.requiredToolchains = requiredToolchains;
this.restrictToAttributes = restrictToAttributes;
this.configurationFragmentPolicy = configurationFragmentPolicy;
this.applyToFiles = applyToFiles;
@@ -112,6 +116,11 @@ public final class AspectDefinition {
return attributes;
}
+ /** Returns the required toolchains declared by this aspect. */
+ public ImmutableList<ClassObjectConstructor.Key> getRequiredToolchains() {
+ return requiredToolchains;
+ }
+
/**
* Returns {@link RequiredProviders} that a configured target must have so that
* this aspect can be applied to it.
@@ -256,6 +265,7 @@ public final class AspectDefinition {
private final ConfigurationFragmentPolicy.Builder configurationFragmentPolicy =
new ConfigurationFragmentPolicy.Builder();
private boolean applyToFiles = false;
+ private final List<ClassObjectConstructor.Key> requiredToolchains = new ArrayList<>();
public Builder(AspectClass aspectClass) {
this.aspectClass = aspectClass;
@@ -456,21 +466,25 @@ public final class AspectDefinition {
return this;
}
-
+ /** Adds the given toolchains as requirements for this aspect. */
+ public Builder addRequiredToolchains(List<ClassObjectConstructor.Key> requiredToolchains) {
+ this.requiredToolchains.addAll(requiredToolchains);
+ return this;
+ }
/**
* Builds the aspect definition.
*
* <p>The builder object is reusable afterwards.
*/
public AspectDefinition build() {
- return new AspectDefinition(aspectClass,
+ return new AspectDefinition(
+ aspectClass,
advertisedProviders.build(),
requiredProviders.build(),
requiredAspectProviders.build(),
ImmutableMap.copyOf(attributes),
- propagateAlongAttributes == null
- ? null
- : ImmutableSet.copyOf(propagateAlongAttributes),
+ ImmutableList.copyOf(requiredToolchains),
+ propagateAlongAttributes == null ? null : ImmutableSet.copyOf(propagateAlongAttributes),
configurationFragmentPolicy.build(),
applyToFiles);
}