From 13263f7b799c31ef335078870a905210c14de80d Mon Sep 17 00:00:00 2001 From: John Cater Date: Wed, 24 May 2017 19:06:47 +0200 Subject: Add toolchains attribute to aspect. Part of #2219. Change-Id: I39ced1f3e2605154771df9424d6ed2f971820baf PiperOrigin-RevId: 157002268 --- .../build/lib/packages/AspectDefinition.java | 26 +++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java') 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 attributes; + private final ImmutableList 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 attributes, + ImmutableList requiredToolchains, @Nullable ImmutableSet 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 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 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 requiredToolchains) { + this.requiredToolchains.addAll(requiredToolchains); + return this; + } /** * Builds the aspect definition. * *

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); } -- cgit v1.2.3