aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java')
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java66
1 files changed, 30 insertions, 36 deletions
diff --git a/src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java b/src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java
index 79ed64056a..ef9616707f 100644
--- a/src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/skyframe/QueryableGraphBackedSkyFunctionEnvironment.java
@@ -13,19 +13,14 @@
// limitations under the License.
package com.google.devtools.build.skyframe;
-import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.skyframe.QueryableGraph.Reason;
-import java.util.HashMap;
import java.util.Map;
import java.util.Set;
-import javax.annotation.Nullable;
-
/**
* A {@link SkyFunction.Environment} backed by a {@link QueryableGraph}. For use when a single
* SkyFunction needs recomputation, and its dependencies do not need to be evaluated. Any missing
@@ -41,41 +36,40 @@ public class QueryableGraphBackedSkyFunctionEnvironment extends AbstractSkyFunct
this.eventHandler = eventHandler;
}
- private static final Function<NodeEntry, ValueOrUntypedException> NODE_ENTRY_TO_UNTYPED_VALUE =
- new Function<NodeEntry, ValueOrUntypedException>() {
- @Override
- public ValueOrUntypedException apply(@Nullable NodeEntry nodeEntry) {
- if (nodeEntry == null || !nodeEntry.isDone()) {
- return ValueOrExceptionUtils.ofNull();
- }
- SkyValue maybeWrappedValue = nodeEntry.getValueMaybeWithMetadata();
- SkyValue justValue = ValueWithMetadata.justValue(maybeWrappedValue);
- if (justValue != null) {
- return ValueOrExceptionUtils.ofValueUntyped(justValue);
- }
- ErrorInfo errorInfo =
- Preconditions.checkNotNull(ValueWithMetadata.getMaybeErrorInfo(maybeWrappedValue));
- Exception exception = errorInfo.getException();
+ private static ValueOrUntypedException toUntypedValue(NodeEntry nodeEntry)
+ throws InterruptedException {
+ if (nodeEntry == null || !nodeEntry.isDone()) {
+ return ValueOrExceptionUtils.ofNull();
+ }
+ SkyValue maybeWrappedValue = nodeEntry.getValueMaybeWithMetadata();
+ SkyValue justValue = ValueWithMetadata.justValue(maybeWrappedValue);
+ if (justValue != null) {
+ return ValueOrExceptionUtils.ofValueUntyped(justValue);
+ }
+ ErrorInfo errorInfo =
+ Preconditions.checkNotNull(ValueWithMetadata.getMaybeErrorInfo(maybeWrappedValue));
+ Exception exception = errorInfo.getException();
- if (exception != null) {
- // Give SkyFunction#compute a chance to handle this exception.
- return ValueOrExceptionUtils.ofExn(exception);
- }
- // In a cycle.
- Preconditions.checkState(
- !Iterables.isEmpty(errorInfo.getCycleInfo()), "%s %s", errorInfo, maybeWrappedValue);
- return ValueOrExceptionUtils.ofNull();
- }
- };
+ if (exception != null) {
+ // Give SkyFunction#compute a chance to handle this exception.
+ return ValueOrExceptionUtils.ofExn(exception);
+ }
+ // In a cycle.
+ Preconditions.checkState(
+ !Iterables.isEmpty(errorInfo.getCycleInfo()), "%s %s", errorInfo, maybeWrappedValue);
+ return ValueOrExceptionUtils.ofNull();
+ }
@Override
- protected Map<SkyKey, ValueOrUntypedException> getValueOrUntypedExceptions(Set<SkyKey> depKeys) {
- Map<SkyKey, NodeEntry> resultMap = queryableGraph.getBatch(null, Reason.DEP_REQUESTED, depKeys);
- Map<SkyKey, NodeEntry> resultWithMissingKeys = new HashMap<>(resultMap);
- for (SkyKey missingDep : Sets.difference(depKeys, resultMap.keySet())) {
- resultWithMissingKeys.put(missingDep, null);
+ protected Map<SkyKey, ValueOrUntypedException> getValueOrUntypedExceptions(Set<SkyKey> depKeys)
+ throws InterruptedException {
+ Map<SkyKey, ? extends NodeEntry> resultMap =
+ queryableGraph.getBatch(null, Reason.DEP_REQUESTED, depKeys);
+ Map<SkyKey, ValueOrUntypedException> result = Maps.newHashMapWithExpectedSize(depKeys.size());
+ for (SkyKey dep : depKeys) {
+ result.put(dep, toUntypedValue(resultMap.get(dep)));
}
- return Maps.transformValues(resultWithMissingKeys, NODE_ENTRY_TO_UNTYPED_VALUE);
+ return result;
}
@Override