diff options
author | 2018-06-22 09:43:23 -0700 | |
---|---|---|
committer | 2018-06-22 09:44:34 -0700 | |
commit | 39a0a38f1364b5e4056632c731df4b3fe64c13bb (patch) | |
tree | da5eff7d932aab31806ad38070c3e4826dae796c /src/main/java/com/google/devtools/build/lib/skyframe | |
parent | 732dc512801c32207c252a76ca8d9e5544560339 (diff) |
Expose aspect actions from Skylark.
Like with providers, consumers get a merged view of all actions from the merged configured target (all other aspects + the base target).
I had to rejig the aspect value / configured aspect to be symmetric with rule configured targets.
I do not expect significant memory bloat from this. All lists / maps already existed, only extra fields have been added.
RELNOTES: Expose aspect actions provider to Skylark.
PiperOrigin-RevId: 201697923
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
3 files changed, 8 insertions, 30 deletions
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 de5db333d1..e1339795f5 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 @@ -18,8 +18,6 @@ import com.google.common.base.Preconditions; 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.Actions; -import com.google.devtools.build.lib.actions.Actions.GeneratingActions; import com.google.devtools.build.lib.actions.InconsistentFilesystemException; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.AliasProvider; @@ -573,7 +571,6 @@ public final class AspectFunction implements SkyFunction { originalTarget.getLabel(), originalTarget.getLocation(), ConfiguredAspect.forAlias(real.getConfiguredAspect()), - GeneratingActions.EMPTY, transitivePackagesForPackageRootResolution); } @@ -644,23 +641,12 @@ public final class AspectFunction implements SkyFunction { analysisEnvironment.disable(associatedTarget.getTarget()); Preconditions.checkNotNull(configuredAspect); - GeneratingActions generatingActions; - // Check for conflicting actions within this aspect (indicates a bug in the implementation). - try { - generatingActions = - Actions.filterSharedActionsAndThrowActionConflict( - analysisEnvironment.getActionKeyContext(), - analysisEnvironment.getRegisteredActions()); - } catch (ActionConflictException e) { - throw new AspectFunctionException(e); - } return new AspectValue( key, aspect, associatedTarget.getTarget().getLabel(), associatedTarget.getTarget().getLocation(), configuredAspect, - generatingActions, transitivePackagesForPackageRootResolution == null ? null : transitivePackagesForPackageRootResolution.build()); @@ -709,10 +695,8 @@ public final class AspectFunction implements SkyFunction { } } - /** - * Used to indicate errors during the computation of an {@link AspectValue}. - */ - private static final class AspectFunctionException extends SkyFunctionException { + /** Used to indicate errors during the computation of an {@link AspectValue}. */ + public static final class AspectFunctionException extends SkyFunctionException { public AspectFunctionException(NoSuchThingException e) { super(e, Transience.PERSISTENT); } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java index 7096da3a5b..01a0df969b 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java @@ -18,11 +18,7 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Interner; -import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; -import com.google.devtools.build.lib.actions.Actions.GeneratingActions; -import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.BasicActionLookupValue; import com.google.devtools.build.lib.analysis.ConfiguredAspect; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; @@ -441,10 +437,8 @@ public final class AspectValue extends BasicActionLookupValue { Aspect aspect, Label label, Location location, - ConfiguredAspect configuredAspect, - ImmutableList<ActionAnalysisMetadata> actions, - ImmutableMap<Artifact, Integer> generatingActionIndex) { - super(actions, generatingActionIndex); + ConfiguredAspect configuredAspect) { + super(configuredAspect.getActions(), configuredAspect.getGeneratingActionIndex()); this.label = Preconditions.checkNotNull(label, actions); this.aspect = Preconditions.checkNotNull(aspect, label); this.location = Preconditions.checkNotNull(location, label); @@ -459,9 +453,8 @@ public final class AspectValue extends BasicActionLookupValue { Label label, Location location, ConfiguredAspect configuredAspect, - GeneratingActions actions, NestedSet<Package> transitivePackagesForPackageRootResolution) { - super(actions); + super(configuredAspect.getActions(), configuredAspect.getGeneratingActionIndex()); this.label = Preconditions.checkNotNull(label, actions); this.aspect = Preconditions.checkNotNull(aspect, label); this.location = Preconditions.checkNotNull(location, label); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java index 1bb02261b2..2c95721c0b 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkAspectFactory.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.AnalysisEnvironment; import com.google.devtools.build.lib.analysis.ConfiguredAspect; import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory; @@ -49,7 +50,7 @@ public class SkylarkAspectFactory implements ConfiguredAspectFactory { @Override public ConfiguredAspect create( ConfiguredTargetAndData ctadBase, RuleContext ruleContext, AspectParameters parameters) - throws InterruptedException { + throws InterruptedException, ActionConflictException { SkylarkRuleContext skylarkRuleContext = null; try (Mutability mutability = Mutability.create("aspect")) { AspectDescriptor aspectDescriptor = @@ -106,7 +107,7 @@ public class SkylarkAspectFactory implements ConfiguredAspectFactory { private ConfiguredAspect createAspect( Object aspectSkylarkObject, AspectDescriptor aspectDescriptor, RuleContext ruleContext) - throws EvalException { + throws EvalException, ActionConflictException { ConfiguredAspect.Builder builder = new ConfiguredAspect.Builder(aspectDescriptor, ruleContext); |