aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar ulfjack <ulfjack@google.com>2017-10-30 07:05:53 -0400
committerGravatar John Cater <jcater@google.com>2017-10-30 10:41:59 -0400
commitdc73a1d67e351acea7367f7aabb1dfa61c207b01 (patch)
treeb3f5e1f817b4046d8e70bedc4d87e148056a1e8a /src/main/java/com
parentc50cd13c75a2a1685f5ac9bd70561ac1e50722e7 (diff)
Move TransitiveTargetKey to a dedicated top-level class
PiperOrigin-RevId: 173873310
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitor.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetCycleReporter.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetKey.java70
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java5
12 files changed, 103 insertions, 29 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
index 56a11d2ce9..c23d7a8b74 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
@@ -36,6 +36,7 @@ import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.skyframe.BuildConfigurationValue;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
+import com.google.devtools.build.lib.skyframe.TransitiveTargetKey;
import com.google.devtools.build.lib.skyframe.TransitiveTargetValue;
import com.google.devtools.build.lib.util.OrderedSetMultimap;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -386,7 +387,7 @@ public final class ConfigurationResolver {
if (!parentConfig.trimConfigurations()) {
return parentConfig.getAllFragments().keySet();
}
- SkyKey fragmentsKey = TransitiveTargetValue.key(dep);
+ SkyKey fragmentsKey = TransitiveTargetKey.of(dep);
TransitiveTargetValue transitiveDepInfo = (TransitiveTargetValue) env.getValue(fragmentsKey);
if (transitiveDepInfo == null) {
// This should only be possible for tests. In actual runs, this was already called
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
index 96e343c5bb..308e4542f7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -70,6 +70,7 @@ import com.google.devtools.build.lib.skyframe.PrecomputedValue.Precomputed;
import com.google.devtools.build.lib.skyframe.SkyFunctions;
import com.google.devtools.build.lib.skyframe.TargetPatternValue;
import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
+import com.google.devtools.build.lib.skyframe.TransitiveTargetKey;
import com.google.devtools.build.lib.skyframe.TransitiveTargetValue;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.Fingerprint;
@@ -214,7 +215,7 @@ public class GenQuery implements RuleConfiguredTargetFactory {
NestedSetBuilder<Label> validTargets = NestedSetBuilder.stableOrder();
Set<PackageIdentifier> successfulPackageNames = new LinkedHashSet<>();
for (Target target : scope) {
- SkyKey key = TransitiveTargetValue.key(target.getLabel());
+ SkyKey key = TransitiveTargetKey.of(target.getLabel());
TransitiveTargetValue transNode = (TransitiveTargetValue) env.getValue(key);
if (transNode == null) {
return null;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index d1c0eae164..b4a60ef94b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -171,7 +171,7 @@ public final class ConfiguredTargetFunction implements SkyFunction {
// the first TransitiveTargetValue call happens on its dep (in trimConfigurations), so Bazel
// associates the error with the dep, which is misleading.
if (configuration != null && configuration.trimConfigurations()
- && env.getValue(TransitiveTargetValue.key(lc.getLabel())) == null) {
+ && env.getValue(TransitiveTargetKey.of(lc.getLabel())) == null) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
index 7b3874843c..1cf6dad476 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -400,7 +400,7 @@ public final class SkyframeBuildView {
if (culprit.functionName().equals(SkyFunctions.CONFIGURED_TARGET)) {
return ((ConfiguredTargetKey) culprit.argument()).getLabel();
} else if (culprit.functionName().equals(SkyFunctions.TRANSITIVE_TARGET)) {
- return (Label) culprit.argument();
+ return ((TransitiveTargetKey) culprit).getLabel();
} else {
return labelToLoad;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 7145a1d23c..0a5162387a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -1449,7 +1449,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
fragmentsMap.put(key.getLabel(), allFragments);
} else {
depsToEvaluate.add(key);
- transitiveFragmentSkyKeys.add(TransitiveTargetValue.key(key.getLabel()));
+ transitiveFragmentSkyKeys.add(TransitiveTargetKey.of(key.getLabel()));
}
}
EvaluationResult<SkyValue> fragmentsResult = evaluateSkyKeys(
@@ -1460,11 +1460,11 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
for (Dependency key : keys) {
if (!depsToEvaluate.contains(key)) {
// No fragments to compute here.
- } else if (fragmentsResult.getError(TransitiveTargetValue.key(key.getLabel())) != null) {
+ } else if (fragmentsResult.getError(TransitiveTargetKey.of(key.getLabel())) != null) {
labelsWithErrors.add(key.getLabel());
} else {
TransitiveTargetValue ttv =
- (TransitiveTargetValue) fragmentsResult.get(TransitiveTargetValue.key(key.getLabel()));
+ (TransitiveTargetValue) fragmentsResult.get(TransitiveTargetKey.of(key.getLabel()));
fragmentsMap.put(key.getLabel(), ttv.getTransitiveConfigFragments().toSet());
}
}
@@ -1683,7 +1683,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
throws InterruptedException {
List<SkyKey> valueNames = new ArrayList<>();
for (Label label : labelsToVisit) {
- valueNames.add(TransitiveTargetValue.key(label));
+ valueNames.add(TransitiveTargetKey.of(label));
}
return buildDriver.evaluate(valueNames, keepGoing, parallelThreads, eventHandler);
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitor.java
index 742d2fa2d9..1ffb935c35 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitor.java
@@ -66,7 +66,7 @@ final class SkyframeLabelVisitor implements TransitivePackageLoader {
Entry<SkyKey, ErrorInfo> error = errors.iterator().next();
ErrorInfo errorInfo = error.getValue();
SkyKey topLevel = error.getKey();
- Label topLevelLabel = (Label) topLevel.argument();
+ Label topLevelLabel = ((TransitiveTargetKey) topLevel).getLabel();
if (!Iterables.isEmpty(errorInfo.getCycleInfo())) {
skyframeCyclesReporter.get().reportCycles(errorInfo.getCycleInfo(), topLevel, eventHandler);
errorAboutLoadingFailure(topLevelLabel, null, eventHandler);
@@ -84,7 +84,7 @@ final class SkyframeLabelVisitor implements TransitivePackageLoader {
SkyKey key = errorEntry.getKey();
ErrorInfo errorInfo = errorEntry.getValue();
Preconditions.checkState(key.functionName().equals(SkyFunctions.TRANSITIVE_TARGET), errorEntry);
- Label topLevelLabel = (Label) key.argument();
+ Label topLevelLabel = ((TransitiveTargetKey) key).getLabel();
if (!Iterables.isEmpty(errorInfo.getCycleInfo())) {
skyframeCyclesReporter.get().reportCycles(errorInfo.getCycleInfo(), key, eventHandler);
}
@@ -97,11 +97,10 @@ final class SkyframeLabelVisitor implements TransitivePackageLoader {
}
warnAboutLoadingFailure(topLevelLabel, eventHandler);
}
- for (Label topLevelLabel : result.<Label>keyNames()) {
- SkyKey topLevelTransitiveTargetKey = TransitiveTargetValue.key(topLevelLabel);
+ for (TransitiveTargetKey topLevelTransitiveTargetKey : result.<TransitiveTargetKey>keyNames()) {
TransitiveTargetValue topLevelTransitiveTargetValue = result.get(topLevelTransitiveTargetKey);
if (topLevelTransitiveTargetValue.getTransitiveRootCauses() != null) {
- warnAboutLoadingFailure(topLevelLabel, eventHandler);
+ warnAboutLoadingFailure(topLevelTransitiveTargetKey.getLabel(), eventHandler);
}
}
return false;
@@ -122,7 +121,7 @@ final class SkyframeLabelVisitor implements TransitivePackageLoader {
private static boolean isDirectErrorFromTopLevelLabel(Label label, Set<Label> topLevelLabels,
ErrorInfo errorInfo) {
return errorInfo.getException() != null && topLevelLabels.contains(label)
- && Iterables.contains(errorInfo.getRootCauses(), TransitiveTargetValue.key(label));
+ && Iterables.contains(errorInfo.getRootCauses(), TransitiveTargetKey.of(label));
}
private static void errorAboutLoadingFailure(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
index 726672de97..1a3ac1aa25 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
@@ -103,10 +103,12 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
abstract TargetMarkerValue getTargetMarkerValue(SkyKey targetMarkerKey, Environment env)
throws NoSuchTargetException, NoSuchPackageException, InterruptedException;
+ abstract Label argumentFromKey(SkyKey key);
+
@Override
public SkyValue compute(SkyKey key, Environment env)
throws TransitiveBaseTraversalFunctionException, InterruptedException {
- Label label = (Label) key.argument();
+ Label label = argumentFromKey(key);
LoadTargetResults loadTargetResults;
try {
loadTargetResults = loadTarget(env, label);
@@ -153,7 +155,7 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
@Override
public String extractTag(SkyKey skyKey) {
- return Label.print(((Label) skyKey.argument()));
+ return Label.print(argumentFromKey(skyKey));
}
/**
@@ -173,7 +175,7 @@ abstract class TransitiveBaseTraversalFunction<TProcessedTargets> implements Sky
new HashMap<>(depMap.size());
for (Entry<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>> entry :
depMap.entrySet()) {
- labelDepMap.put((Label) entry.getKey().argument(), entry.getValue());
+ labelDepMap.put(argumentFromKey(entry.getKey()), entry.getValue());
}
Multimap<Attribute, Label> transitions =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetCycleReporter.java
index bb2e412bff..a7c9b3126d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetCycleReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetCycleReporter.java
@@ -53,7 +53,7 @@ class TransitiveTargetCycleReporter extends AbstractLabelCycleReporter {
@Override
protected Label getLabel(SkyKey key) {
- return (Label) key.argument();
+ return ((TransitiveTargetKey) key).getLabel();
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java
index 093ec2c534..86146668a1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java
@@ -105,8 +105,13 @@ public class TransitiveTargetFunction
}
@Override
+ Label argumentFromKey(SkyKey key) {
+ return ((TransitiveTargetKey) key).getLabel();
+ }
+
+ @Override
SkyKey getKey(Label label) {
- return TransitiveTargetValue.key(label);
+ return TransitiveTargetKey.of(label);
}
@Override
@@ -130,7 +135,7 @@ public class TransitiveTargetFunction
for (Entry<SkyKey, ValueOrException2<NoSuchPackageException, NoSuchTargetException>> entry :
depEntries) {
- Label depLabel = (Label) entry.getKey().argument();
+ Label depLabel = ((TransitiveTargetKey) entry.getKey()).getLabel();
TransitiveTargetValue transitiveTargetValue;
try {
transitiveTargetValue = (TransitiveTargetValue) entry.getValue().get();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetKey.java
new file mode 100644
index 0000000000..b4e9a61302
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetKey.java
@@ -0,0 +1,70 @@
+// Copyright 2017 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.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// 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.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
+import com.google.devtools.build.lib.util.Preconditions;
+import com.google.devtools.build.skyframe.SkyFunctionName;
+import com.google.devtools.build.skyframe.SkyKey;
+
+/**
+ * A key requesting transitive loading of all dependencies of a given label; see
+ * {@link TransitiveTargetFunction} and {@link TransitiveTargetValue}.
+ */
+@Immutable
+@ThreadSafe
+public final class TransitiveTargetKey implements SkyKey {
+ public static SkyKey of(Label label) {
+ Preconditions.checkArgument(!label.getPackageIdentifier().getRepository().isDefault());
+ return new TransitiveTargetKey(label);
+ }
+
+ private final Label label;
+
+ private TransitiveTargetKey(Label label) {
+ this.label = Preconditions.checkNotNull(label);
+ }
+
+ @Override
+ public SkyFunctionName functionName() {
+ return SkyFunctions.TRANSITIVE_TARGET;
+ }
+
+ @Override
+ public Object argument() {
+ return this;
+ }
+
+ public Label getLabel() {
+ return label;
+ }
+
+ @Override
+ public int hashCode() {
+ return 31 * functionName().hashCode() + label.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ if (!(o instanceof TransitiveTargetKey)) {
+ return false;
+ }
+ return ((TransitiveTargetKey) o).label.equals(label);
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java
index 531d2152f0..c167d40e38 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java
@@ -21,9 +21,6 @@ import com.google.devtools.build.lib.collect.nestedset.Order;
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.NoSuchTargetException;
-import com.google.devtools.build.lib.util.Preconditions;
-import com.google.devtools.build.skyframe.LegacySkyKey;
-import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
import java.io.ObjectInputStream;
@@ -129,10 +126,4 @@ public class TransitiveTargetValue implements SkyValue {
public NestedSet<Class<? extends BuildConfiguration.Fragment>> getTransitiveConfigFragments() {
return transitiveConfigFragments;
}
-
- @ThreadSafe
- public static SkyKey key(Label label) {
- Preconditions.checkArgument(!label.getPackageIdentifier().getRepository().isDefault());
- return LegacySkyKey.create(SkyFunctions.TRANSITIVE_TARGET, label);
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java
index 76730690b8..fd9914158e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalFunction.java
@@ -44,6 +44,11 @@ public class TransitiveTraversalFunction
extends TransitiveBaseTraversalFunction<FirstErrorMessageAccumulator> {
@Override
+ Label argumentFromKey(SkyKey key) {
+ return (Label) key.argument();
+ }
+
+ @Override
SkyKey getKey(Label label) {
return TransitiveTraversalValue.key(label);
}