aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-03-06 16:15:11 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-06 16:18:46 -0800
commite2d200f32a7242898a5c976837bd3b8e6dfed62c (patch)
tree98a6fb3b0bbe3d8438aff9206d5ff77cf19870c3 /src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java
parenta854d6c0d3d222bbd4ff2a532d48ddd91718908c (diff)
Expose an actions provider on RuleConfiguredTarget instances.
Given a target (for example from a skylark aspect), one will be able to access a list of actions that the target generated using "target.actions". This is without additional memory footprint. Actions themselves are not fully exposed to skylark (and thus there isn't much meaning to gather from them in skylark yet). Access methods will follow soon. RELNOTES: None. PiperOrigin-RevId: 188098079
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java129
1 files changed, 32 insertions, 97 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java
index 341da8a6ec..b527d59f12 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetValue.java
@@ -1,4 +1,4 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
+// Copyright 2018 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -11,75 +11,41 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
+
package com.google.devtools.build.lib.skyframe;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
-import com.google.devtools.build.lib.actions.ActionLookupValue;
-import com.google.devtools.build.lib.actions.Actions.GeneratingActions;
-import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.packages.Package;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.skyframe.SkyKey;
+import com.google.devtools.build.skyframe.SkyValue;
import java.util.List;
-import javax.annotation.Nullable;
-
-/** A configured target in the context of a Skyframe graph. */
-@AutoCodec
-@Immutable
-@ThreadSafe
-@VisibleForTesting
-public final class ConfiguredTargetValue extends ActionLookupValue {
- // These variables are only non-final because they may be clear()ed to save memory.
- // configuredTarget is null only after it is cleared.
- @Nullable private ConfiguredTarget configuredTarget;
-
- // May be null either after clearing or because transitive packages are not tracked.
- @Nullable private NestedSet<Package> transitivePackagesForPackageRootResolution;
- @AutoCodec.Instantiator
- @VisibleForSerialization
- ConfiguredTargetValue(
- List<ActionAnalysisMetadata> actions,
- ImmutableMap<Artifact, Integer> generatingActionIndex,
- ConfiguredTarget configuredTarget,
- NestedSet<Package> transitivePackagesForPackageRootResolution) {
- super(actions, generatingActionIndex);
- this.configuredTarget = configuredTarget;
- this.transitivePackagesForPackageRootResolution = transitivePackagesForPackageRootResolution;
- }
-
- ConfiguredTargetValue(
- ConfiguredTarget configuredTarget,
- GeneratingActions generatingActions,
- @Nullable NestedSet<Package> transitivePackagesForPackageRootResolution,
- boolean removeActionsAfterEvaluation) {
- super(generatingActions, removeActionsAfterEvaluation);
- this.configuredTarget = Preconditions.checkNotNull(configuredTarget, generatingActions);
- this.transitivePackagesForPackageRootResolution = transitivePackagesForPackageRootResolution;
+/**
+ * A {@link SkyValue} for a {@link ConfiguredTarget}.
+ */
+public interface ConfiguredTargetValue extends SkyValue {
+ static SkyKey key(Label label, BuildConfiguration configuration) {
+ return ConfiguredTargetKey.of(label, configuration);
}
- @VisibleForTesting
- public ConfiguredTarget getConfiguredTarget() {
- Preconditions.checkNotNull(configuredTarget);
- return configuredTarget;
+ static ImmutableList<SkyKey> keys(Iterable<ConfiguredTargetKey> lacs) {
+ ImmutableList.Builder<SkyKey> keys = ImmutableList.builder();
+ for (ConfiguredTargetKey lac : lacs) {
+ keys.add(lac);
+ }
+ return keys.build();
}
- @VisibleForTesting
- public List<ActionAnalysisMetadata> getActions() {
- Preconditions.checkNotNull(configuredTarget, this);
- return actions;
- }
+ /**
+ * Returns the configured target for this value.
+ */
+ ConfiguredTarget getConfiguredTarget();
/**
* Returns the set of packages transitively loaded by this value. Must only be used for
@@ -87,9 +53,17 @@ public final class ConfiguredTargetValue extends ActionLookupValue {
* specified that this map needs to be constructed (via the constructor argument in {@link
* ConfiguredTargetFunction#ConfiguredTargetFunction}), calling this will crash.
*/
- public NestedSet<Package> getTransitivePackagesForPackageRootResolution() {
- return Preconditions.checkNotNull(transitivePackagesForPackageRootResolution);
- }
+ NestedSet<Package> getTransitivePackagesForPackageRootResolution();
+
+ /**
+ * Returns the actions registered by the configured target for this value.
+ */
+ List<ActionAnalysisMetadata> getActions();
+
+ /**
+ * Returns the number of {@link Action} objects present in this value.
+ */
+ int getNumActions();
/**
* Clears configured target data from this value, leaving only the artifact->generating action
@@ -98,45 +72,6 @@ public final class ConfiguredTargetValue extends ActionLookupValue {
* <p>Should only be used when user specifies --discard_analysis_cache. Must be called at most
* once per value, after which {@link #getConfiguredTarget} and {@link #getActions} cannot be
* called.
- *
- * @param clearEverything if true, clear the {@link #configuredTarget}. If not, only the {@link
- * #transitivePackagesForPackageRootResolution} field is cleared. Top-level targets need their
- * {@link #configuredTarget} preserved, so should pass false here.
*/
- public void clear(boolean clearEverything) {
- Preconditions.checkNotNull(configuredTarget);
- Preconditions.checkNotNull(transitivePackagesForPackageRootResolution);
- if (clearEverything) {
- configuredTarget = null;
- }
- transitivePackagesForPackageRootResolution = null;
- }
-
- @VisibleForTesting
- public static SkyKey key(Label label, BuildConfiguration configuration) {
- return ConfiguredTargetKey.of(label, configuration);
- }
-
- static ImmutableList<SkyKey> keys(Iterable<ConfiguredTargetKey> lacs) {
- ImmutableList.Builder<SkyKey> keys = ImmutableList.builder();
- for (ConfiguredTargetKey lac : lacs) {
- keys.add(lac);
- }
- return keys.build();
- }
-
- /**
- * Returns a label of ConfiguredTargetValue.
- */
- @ThreadSafe
- static Label extractLabel(SkyKey value) {
- Object valueName = value.argument();
- Preconditions.checkState(valueName instanceof ConfiguredTargetKey, valueName);
- return ((ConfiguredTargetKey) valueName).getLabel();
- }
-
- @Override
- public String toString() {
- return getStringHelper().add("configuredTarget", configuredTarget).toString();
- }
+ void clear(boolean clearEverything);
}