diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java (renamed from src/main/java/com/google/devtools/build/lib/analysis/Aspect.java) | 10 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspectFactory.java | 2 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java | 31 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java | 53 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java | 30 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java | 9 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java | 18 |
7 files changed, 71 insertions, 82 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/Aspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java index 835fb5e7de..d5ef9e846b 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/Aspect.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java @@ -42,12 +42,12 @@ import javax.annotation.Nullable; * <p>Aspects are created alongside configured targets on request from dependents. */ @Immutable -public final class Aspect implements Iterable<TransitiveInfoProvider> { +public final class ConfiguredAspect implements Iterable<TransitiveInfoProvider> { private final String name; private final ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> providers; - private Aspect( + private ConfiguredAspect( String name, ImmutableMap<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> providers) { this.name = name; @@ -84,7 +84,7 @@ public final class Aspect implements Iterable<TransitiveInfoProvider> { } /** - * Builder for {@link Aspect}. + * Builder for {@link ConfiguredAspect}. */ public static class Builder { private final Map<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> @@ -140,7 +140,7 @@ public final class Aspect implements Iterable<TransitiveInfoProvider> { return this; } - public Aspect build() { + public ConfiguredAspect build() { if (!outputGroupBuilders.isEmpty()) { ImmutableMap.Builder<String, NestedSet<Artifact>> outputGroups = ImmutableMap.builder(); for (Map.Entry<String, NestedSetBuilder<Artifact>> entry : outputGroupBuilders.entrySet()) { @@ -159,7 +159,7 @@ public final class Aspect implements Iterable<TransitiveInfoProvider> { providers.put(SkylarkProviders.class, new SkylarkProviders(skylarkProvidersMap)); } - return new Aspect(name, ImmutableMap.copyOf(providers)); + return new ConfiguredAspect(name, ImmutableMap.copyOf(providers)); } } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspectFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspectFactory.java index 667164001b..c983764d65 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspectFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspectFactory.java @@ -28,6 +28,6 @@ public interface ConfiguredAspectFactory { * @param parameters information from attributes of the rule that have requested this * aspect */ - Aspect create(ConfiguredTarget base, RuleContext context, AspectParameters parameters) + ConfiguredAspect create(ConfiguredTarget base, RuleContext context, AspectParameters parameters) throws InterruptedException; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java index b52f5a65e3..e90971403a 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.analysis; -import com.google.devtools.build.lib.packages.AspectWithParameters; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.collect.ListMultimap; @@ -33,7 +32,7 @@ import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; -import com.google.devtools.build.lib.packages.AspectParameters; +import com.google.devtools.build.lib.packages.Aspect; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy; import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy; @@ -56,7 +55,6 @@ import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; -import java.util.Map; import java.util.Set; import javax.annotation.Nullable; @@ -284,36 +282,37 @@ public final class ConfiguredTargetFactory { } /** - * Constructs an {@link Aspect}. Returns null if an error occurs; in that case, + * Constructs an {@link ConfiguredAspect}. Returns null if an error occurs; in that case, * {@code aspectFactory} should call one of the error reporting methods of {@link RuleContext}. */ - public Aspect createAspect( + public ConfiguredAspect createAspect( AnalysisEnvironment env, RuleConfiguredTarget associatedTarget, ConfiguredAspectFactory aspectFactory, - AspectWithParameters aspectWithParameters, + Aspect aspect, ListMultimap<Attribute, ConfiguredTarget> prerequisiteMap, Set<ConfigMatchingProvider> configConditions, BuildConfiguration hostConfiguration) - throws InterruptedException { + throws InterruptedException { RuleContext.Builder builder = new RuleContext.Builder(env, associatedTarget.getTarget(), associatedTarget.getConfiguration(), hostConfiguration, ruleClassProvider.getPrerequisiteValidator()); - RuleContext ruleContext = builder - .setVisibility(convertVisibility( - prerequisiteMap, env.getEventHandler(), associatedTarget.getTarget(), null)) - .setPrerequisites(prerequisiteMap) - .setAspectAttributes(aspectWithParameters.getDefinition().getAttributes()) - .setConfigConditions(configConditions) - .build(); + RuleContext ruleContext = + builder + .setVisibility( + convertVisibility( + prerequisiteMap, env.getEventHandler(), associatedTarget.getTarget(), null)) + .setPrerequisites(prerequisiteMap) + .setAspectAttributes(aspect.getDefinition().getAttributes()) + .setConfigConditions(configConditions) + .build(); if (ruleContext.hasErrors()) { return null; } - return aspectFactory.create(associatedTarget, ruleContext, - aspectWithParameters.getParameters()); + return aspectFactory.create(associatedTarget, ruleContext, aspect.getParameters()); } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java index fcea1537c2..57a1d92364 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java @@ -25,9 +25,9 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.ImmutableSortedKeyListMultimap; +import com.google.devtools.build.lib.packages.Aspect; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDefinition; -import com.google.devtools.build.lib.packages.AspectWithParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault; import com.google.devtools.build.lib.packages.Attribute.SplitTransition; @@ -102,15 +102,14 @@ public abstract class DependencyResolver { private final Attribute.Transition transition; private final boolean hasStaticConfiguration; - private final ImmutableSet<AspectWithParameters> aspects; + private final ImmutableSet<Aspect> aspects; /** * Constructs a Dependency with a given configuration (suitable for static configuration * builds). */ - public Dependency(Label label, - @Nullable BuildConfiguration configuration, - ImmutableSet<AspectWithParameters> aspects) { + public Dependency( + Label label, @Nullable BuildConfiguration configuration, ImmutableSet<Aspect> aspects) { this.label = Preconditions.checkNotNull(label); this.configuration = configuration; this.transition = null; @@ -123,14 +122,13 @@ public abstract class DependencyResolver { * builds). */ public Dependency(Label label, @Nullable BuildConfiguration configuration) { - this(label, configuration, ImmutableSet.<AspectWithParameters>of()); + this(label, configuration, ImmutableSet.<Aspect>of()); } /** * Constructs a Dependency with a given transition (suitable for dynamic configuration builds). */ - public Dependency(Label label, Attribute.Transition transition, - ImmutableSet<AspectWithParameters> aspects) { + public Dependency(Label label, Attribute.Transition transition, ImmutableSet<Aspect> aspects) { this.label = Preconditions.checkNotNull(label); this.configuration = null; this.transition = Preconditions.checkNotNull(transition); @@ -167,7 +165,7 @@ public abstract class DependencyResolver { return transition; } - public ImmutableSet<AspectWithParameters> getAspects() { + public ImmutableSet<Aspect> getAspects() { return aspects; } @@ -204,7 +202,7 @@ public abstract class DependencyResolver { * represent those edges. Visibility attributes are only visited if {@code visitVisibility} is * {@code true}. * - * <p>If {@code aspectWithParameters} is null, returns the dependent nodes of the configured + * <p>If {@code aspect} is null, returns the dependent nodes of the configured * target node representing the given target and configuration, otherwise that of the aspect * node accompanying the aforementioned configured target node for the specified aspect. * @@ -220,7 +218,7 @@ public abstract class DependencyResolver { public final ListMultimap<Attribute, Dependency> dependentNodeMap( TargetAndConfiguration node, BuildConfiguration hostConfig, - AspectWithParameters aspectWithParameters, + Aspect aspect, Set<ConfigMatchingProvider> configConditions) throws EvalException, InterruptedException { Target target = node.getTarget(); @@ -242,11 +240,11 @@ public abstract class DependencyResolver { ListMultimap<Attribute, LabelAndConfiguration> labelMap = resolveAttributes( rule, - aspectWithParameters != null ? aspectWithParameters.getDefinition() : null, + aspect != null ? aspect.getDefinition() : null, config, hostConfig, configConditions); - visitRule(rule, aspectWithParameters, labelMap, outgoingEdges); + visitRule(rule, aspect, labelMap, outgoingEdges); } else if (target instanceof PackageGroup) { visitPackageGroup(node, (PackageGroup) target, outgoingEdges.get(null)); } else { @@ -555,20 +553,16 @@ public abstract class DependencyResolver { } } - private ImmutableSet<AspectWithParameters> requiredAspects( - AspectWithParameters aspectWithParameters, - Attribute attribute, - Target target, - Rule originalRule) { + private ImmutableSet<Aspect> requiredAspects( + Aspect aspect, Attribute attribute, Target target, Rule originalRule) { if (!(target instanceof Rule)) { return ImmutableSet.of(); } - Set<AspectWithParameters> aspectCandidates = - extractAspectCandidates(aspectWithParameters, attribute, originalRule); + Set<Aspect> aspectCandidates = extractAspectCandidates(aspect, attribute, originalRule); RuleClass ruleClass = ((Rule) target).getRuleClassObject(); - ImmutableSet.Builder<AspectWithParameters> result = ImmutableSet.builder(); - for (AspectWithParameters candidateClass : aspectCandidates) { + ImmutableSet.Builder<Aspect> result = ImmutableSet.builder(); + for (Aspect candidateClass : aspectCandidates) { if (Sets.difference( candidateClass.getDefinition().getRequiredProviders(), ruleClass.getAdvertisedProviders()) @@ -579,19 +573,18 @@ public abstract class DependencyResolver { return result.build(); } - private static Set<AspectWithParameters> extractAspectCandidates( - AspectWithParameters aspectWithParameters, Attribute attribute, Rule originalRule) { + private static Set<Aspect> extractAspectCandidates( + Aspect aspectWithParameters, Attribute attribute, Rule originalRule) { // The order of this set will be deterministic. This is necessary because this order eventually // influences the order in which aspects are merged into the main configured target, which in // turn influences which aspect takes precedence if two emit the same provider (maybe this // should be an error) - Set<AspectWithParameters> aspectCandidates = new LinkedHashSet<>(); - aspectCandidates.addAll(attribute.getAspectsWithParameters(originalRule)); + Set<Aspect> aspectCandidates = new LinkedHashSet<>(); + aspectCandidates.addAll(attribute.getAspects(originalRule)); if (aspectWithParameters != null) { for (AspectClass aspect : aspectWithParameters.getDefinition().getAttributeAspects().get(attribute.getName())) { - aspectCandidates.add( - new AspectWithParameters(aspect, aspectWithParameters.getParameters())); + aspectCandidates.add(new Aspect(aspect, aspectWithParameters.getParameters())); } } return aspectCandidates; @@ -604,7 +597,7 @@ public abstract class DependencyResolver { private void visitRule( Rule rule, - AspectWithParameters aspectWithParameters, + Aspect aspect, ListMultimap<Attribute, LabelAndConfiguration> labelMap, ListMultimap<Attribute, Dependency> outgoingEdges) { Preconditions.checkNotNull(labelMap); @@ -647,7 +640,7 @@ public abstract class DependencyResolver { } for (Dependency dependency : transitionApplier.getDependencies( - label, requiredAspects(aspectWithParameters, attribute, toTarget, rule))) { + label, requiredAspects(aspect, attribute, toTarget, rule))) { outgoingEdges.put( entry.getKey(), dependency); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java index 14ef1550af..3ef5414323 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java @@ -53,7 +53,7 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { private final ImmutableMap<Class<? extends TransitiveInfoProvider>, Object> providers; private final ImmutableList<Artifact> mandatoryStampFiles; private final Set<ConfigMatchingProvider> configConditions; - private final ImmutableList<Aspect> aspects; + private final ImmutableList<ConfiguredAspect> configuredAspects; RuleConfiguredTarget(RuleContext ruleContext, ImmutableList<Artifact> mandatoryStampFiles, @@ -80,7 +80,7 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { this.providers = ImmutableMap.copyOf(providerBuilder); this.mandatoryStampFiles = mandatoryStampFiles; this.configConditions = ruleContext.getConfigConditions(); - this.aspects = ImmutableList.of(); + this.configuredAspects = ImmutableList.of(); // If this rule is the run_under target, then check that we have an executable; note that // run_under is only set in the target configuration, and the target must also be analyzed for @@ -108,7 +108,7 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { * an input or an output file). */ public static ConfiguredTarget mergeAspects( - ConfiguredTarget base, Iterable<Aspect> aspects) { + ConfiguredTarget base, Iterable<ConfiguredAspect> aspects) { if (Iterables.isEmpty(aspects)) { // If there are no aspects, don't bother with creating a proxy object return base; @@ -122,7 +122,7 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { /** * Creates an instance based on a configured target and a set of aspects. */ - private RuleConfiguredTarget(RuleConfiguredTarget base, Iterable<Aspect> aspects) { + private RuleConfiguredTarget(RuleConfiguredTarget base, Iterable<ConfiguredAspect> aspects) { super(base.getTarget(), base.getConfiguration()); Set<Class<? extends TransitiveInfoProvider>> providers = new HashSet<>(); @@ -138,8 +138,8 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { SkylarkProviders.merge(getAllProviders(base, aspects, SkylarkProviders.class)); // Validate that all other providers are only provided once. - for (Aspect aspect : aspects) { - for (TransitiveInfoProvider aspectProvider : aspect) { + for (ConfiguredAspect configuredAspect : aspects) { + for (TransitiveInfoProvider aspectProvider : configuredAspect) { Class<? extends TransitiveInfoProvider> aClass = aspectProvider.getClass(); if (OutputGroupProvider.class.equals(aClass)) { continue; @@ -178,21 +178,19 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { } this.mandatoryStampFiles = base.mandatoryStampFiles; this.configConditions = base.configConditions; - this.aspects = ImmutableList.copyOf(aspects); + this.configuredAspects = ImmutableList.copyOf(aspects); } private static <T extends TransitiveInfoProvider> List<T> getAllProviders( - RuleConfiguredTarget base, - Iterable<Aspect> aspects, - Class<T> providerClass) { + RuleConfiguredTarget base, Iterable<ConfiguredAspect> aspects, Class<T> providerClass) { T baseProvider = base.getProvider(providerClass); List<T> providers = new ArrayList<>(); if (baseProvider != null) { providers.add(baseProvider); } - for (Aspect aspect : aspects) { - final T aspectProvider = aspect.getProvider(providerClass); + for (ConfiguredAspect configuredAspect : aspects) { + final T aspectProvider = configuredAspect.getProvider(providerClass); if (aspectProvider == null) { continue; } @@ -215,8 +213,8 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { // class? Object provider = providers.get(providerClass); if (provider == null) { - for (Aspect aspect : aspects) { - provider = aspect.getProviders().get(providerClass); + for (ConfiguredAspect configuredAspect : configuredAspects) { + provider = configuredAspect.getProviders().get(providerClass); if (provider != null) { break; } @@ -247,8 +245,8 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget { public UnmodifiableIterator<TransitiveInfoProvider> iterator() { Map<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> allProviders = new LinkedHashMap<>(); - for (int i = aspects.size() - 1; i >= 0; i++) { - for (TransitiveInfoProvider tip : aspects.get(i)) { + for (int i = configuredAspects.size() - 1; i >= 0; i++) { + for (TransitiveInfoProvider tip : configuredAspects.get(i)) { allProviders.put(tip.getClass(), tip); } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java index d7c9a8a807..bb0922b368 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java @@ -134,12 +134,11 @@ public final class TopLevelArtifactHelper { public static ArtifactsToBuild getAllArtifactsToBuild( AspectValue aspectValue, TopLevelArtifactContext context) { - Aspect aspect = aspectValue.getAspect(); + ConfiguredAspect configuredAspect = aspectValue.getConfiguredAspect(); return getAllArtifactsToBuild( - aspect.getProvider(OutputGroupProvider.class), - aspect.getProvider(FileProvider.class), - context - ); + configuredAspect.getProvider(OutputGroupProvider.class), + configuredAspect.getProvider(FileProvider.class), + context); } public static ArtifactsToBuild getAllArtifactsToBuild( diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java index a5f2c6bfbd..49f71b605b 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java @@ -43,7 +43,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; -import com.google.devtools.build.lib.packages.AspectWithParameters; +import com.google.devtools.build.lib.packages.Aspect; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.Configurator; import com.google.devtools.build.lib.packages.Attribute.SplitTransition; @@ -1466,8 +1466,8 @@ public final class BuildConfiguration { * for each configuration represented by this instance. * TODO(bazel-team): this is a really ugly reverse dependency: factor this away. */ - Iterable<DependencyResolver.Dependency> getDependencies(Label label, - ImmutableSet<AspectWithParameters> aspects); + Iterable<DependencyResolver.Dependency> getDependencies( + Label label, ImmutableSet<Aspect> aspects); } /** @@ -1540,8 +1540,8 @@ public final class BuildConfiguration { } @Override - public Iterable<DependencyResolver.Dependency> getDependencies(Label label, - ImmutableSet<AspectWithParameters> aspects) { + public Iterable<DependencyResolver.Dependency> getDependencies( + Label label, ImmutableSet<Aspect> aspects) { return ImmutableList.of( new DependencyResolver.Dependency(label, currentConfiguration, aspects)); } @@ -1641,8 +1641,8 @@ public final class BuildConfiguration { } @Override - public Iterable<DependencyResolver.Dependency> getDependencies(Label label, - ImmutableSet<AspectWithParameters> aspects) { + public Iterable<DependencyResolver.Dependency> getDependencies( + Label label, ImmutableSet<Aspect> aspects) { return ImmutableList.of(new DependencyResolver.Dependency(label, transition, aspects)); } } @@ -1708,8 +1708,8 @@ public final class BuildConfiguration { @Override - public Iterable<DependencyResolver.Dependency> getDependencies(Label label, - ImmutableSet<AspectWithParameters> aspects) { + public Iterable<DependencyResolver.Dependency> getDependencies( + Label label, ImmutableSet<Aspect> aspects) { ImmutableList.Builder<DependencyResolver.Dependency> builder = ImmutableList.builder(); for (TransitionApplier applier : appliers) { builder.addAll(applier.getDependencies(label, aspects)); |