aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2018-07-17 13:23:44 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-17 13:25:25 -0700
commitdfce7407e6922ca5e070c348ad72a1917a54da82 (patch)
tree92d0f1ba88941dc8366530dcaca55ff09f535368 /src/main/java/com/google/devtools/build/lib
parentfa858918563ba19d0dd3680884c59e92ba4e2a3e (diff)
Move constraint value lookup to a new utility function.
Change-Id: I13645199a21991b1458264f9d9ac2db2736066b2 PiperOrigin-RevId: 204963740
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConstraintValueLookupUtil.java140
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java72
2 files changed, 143 insertions, 69 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConstraintValueLookupUtil.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConstraintValueLookupUtil.java
new file mode 100644
index 0000000000..4d3dc09b43
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConstraintValueLookupUtil.java
@@ -0,0 +1,140 @@
+// 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.
+// 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.actions.MutableActionGraph.ActionConflictException;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
+import com.google.devtools.build.lib.analysis.platform.PlatformProviderUtils;
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.packages.NoSuchThingException;
+import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.ConfiguredValueCreationException;
+import com.google.devtools.build.skyframe.SkyFunction.Environment;
+import com.google.devtools.build.skyframe.SkyFunctionException;
+import com.google.devtools.build.skyframe.SkyKey;
+import com.google.devtools.build.skyframe.ValueOrException3;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Nullable;
+
+/** Helper class that looks up {@link ConstraintValueInfo} data. */
+public class ConstraintValueLookupUtil {
+
+ @Nullable
+ public static List<ConstraintValueInfo> getConstraintValueInfo(
+ Iterable<ConfiguredTargetKey> constraintValueKeys, Environment env)
+ throws InterruptedException, InvalidConstraintValueException {
+
+ Map<
+ SkyKey,
+ ValueOrException3<
+ ConfiguredValueCreationException, NoSuchThingException, ActionConflictException>>
+ values =
+ env.getValuesOrThrow(
+ constraintValueKeys,
+ ConfiguredValueCreationException.class,
+ NoSuchThingException.class,
+ ActionConflictException.class);
+ boolean valuesMissing = env.valuesMissing();
+ List<ConstraintValueInfo> constraintValues = valuesMissing ? null : new ArrayList<>();
+ for (ConfiguredTargetKey key : constraintValueKeys) {
+ ConstraintValueInfo constraintValueInfo = findConstraintValueInfo(key, values.get(key));
+ if (!valuesMissing && constraintValueInfo != null) {
+ constraintValues.add(constraintValueInfo);
+ }
+ }
+ if (valuesMissing) {
+ return null;
+ }
+ return constraintValues;
+ }
+
+ /**
+ * Returns the {@link ConstraintValueInfo} provider from the {@link ConfiguredTarget} in the
+ * {@link ValueOrException3}, or {@code null} if the {@link ConfiguredTarget} is not present. If
+ * the {@link ConfiguredTarget} does not have a {@link ConstraintValueInfo} provider, a {@link
+ * InvalidConstraintValueException} is thrown.
+ */
+ @Nullable
+ private static ConstraintValueInfo findConstraintValueInfo(
+ ConfiguredTargetKey key,
+ ValueOrException3<
+ ConfiguredValueCreationException, NoSuchThingException, ActionConflictException>
+ valueOrException)
+ throws InvalidConstraintValueException {
+
+ try {
+ ConfiguredTargetValue ctv = (ConfiguredTargetValue) valueOrException.get();
+ if (ctv == null) {
+ return null;
+ }
+
+ ConfiguredTarget configuredTarget = ctv.getConfiguredTarget();
+ ConstraintValueInfo constraintValueInfo =
+ PlatformProviderUtils.constraintValue(configuredTarget);
+ if (constraintValueInfo == null) {
+ throw new InvalidConstraintValueException(configuredTarget.getLabel());
+ }
+
+ return constraintValueInfo;
+ } catch (ConfiguredValueCreationException e) {
+ throw new InvalidConstraintValueException(key.getLabel(), e);
+ } catch (NoSuchThingException e) {
+ throw new InvalidConstraintValueException(key.getLabel(), e);
+ } catch (ActionConflictException e) {
+ throw new InvalidConstraintValueException(key.getLabel(), e);
+ }
+ }
+
+ /** Exception used when a constraint value label is not a valid constraint value. */
+ public static final class InvalidConstraintValueException extends ToolchainException {
+ InvalidConstraintValueException(Label label) {
+ super(formatError(label));
+ }
+
+ InvalidConstraintValueException(Label label, ConfiguredValueCreationException e) {
+ super(formatError(label), e);
+ }
+
+ public InvalidConstraintValueException(Label label, NoSuchThingException e) {
+ // Just propagate the inner exception, because it's directly actionable.
+ super(e);
+ }
+
+ public InvalidConstraintValueException(Label label, ActionConflictException e) {
+ super(formatError(label), e);
+ }
+
+ private static String formatError(Label label) {
+ return String.format(
+ "Target %s was referenced as a constraint_value, "
+ + "but does not provide ConstraintValueInfo",
+ label);
+ }
+ }
+
+ /**
+ * Used to declare all the exception types that can be wrapped in the exception thrown by {@link
+ * #compute}.
+ */
+ public static class ConstraintValueLookupFunctionException extends SkyFunctionException {
+
+ public ConstraintValueLookupFunctionException(
+ InvalidConstraintValueException cause, Transience transience) {
+ super(cause, transience);
+ }
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java
index 156f62e05c..443959b284 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ToolchainUtil.java
@@ -24,19 +24,17 @@ import com.google.common.collect.HashBasedTable;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Table;
-import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.PlatformConfiguration;
import com.google.devtools.build.lib.analysis.PlatformOptions;
import com.google.devtools.build.lib.analysis.ToolchainContext;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
-import com.google.devtools.build.lib.analysis.platform.PlatformProviderUtils;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.pkgcache.FilteringPolicy;
-import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.ConfiguredValueCreationException;
+import com.google.devtools.build.lib.skyframe.ConstraintValueLookupUtil.InvalidConstraintValueException;
import com.google.devtools.build.lib.skyframe.PlatformLookupUtil.InvalidPlatformException;
import com.google.devtools.build.lib.skyframe.RegisteredToolchainsFunction.InvalidToolchainLabelException;
import com.google.devtools.build.lib.skyframe.ToolchainResolutionFunction.NoToolchainFoundException;
@@ -419,7 +417,8 @@ public class ToolchainUtil {
if (platformInfoMap == null) {
return null;
}
- List<ConstraintValueInfo> constraints = getConstraintValueInfo(constraintKeys, env);
+ List<ConstraintValueInfo> constraints =
+ ConstraintValueLookupUtil.getConstraintValueInfo(constraintKeys, env);
if (constraints == null) {
return null;
}
@@ -430,53 +429,6 @@ public class ToolchainUtil {
.collect(toImmutableList());
}
- @Nullable
- private static List<ConstraintValueInfo> getConstraintValueInfo(
- ImmutableList<ConfiguredTargetKey> constraintKeys, Environment env)
- throws InterruptedException, InvalidConstraintValueException {
-
- Map<SkyKey, ValueOrException<ConfiguredValueCreationException>> values =
- env.getValuesOrThrow(constraintKeys, ConfiguredValueCreationException.class);
- boolean valuesMissing = env.valuesMissing();
- List<ConstraintValueInfo> constraintValues = valuesMissing ? null : new ArrayList<>();
- for (ConfiguredTargetKey key : constraintKeys) {
- ConstraintValueInfo constraintValueInfo =
- findConstraintValueInfo(key.getLabel(), values.get(key));
- if (!valuesMissing && constraintValueInfo != null) {
- constraintValues.add(constraintValueInfo);
- }
- }
-
- if (valuesMissing) {
- return null;
- }
- return constraintValues;
- }
-
- @Nullable
- private static ConstraintValueInfo findConstraintValueInfo(
- Label label, ValueOrException<ConfiguredValueCreationException> valueOrException)
- throws InvalidConstraintValueException {
-
- try {
- ConfiguredTargetValue configuredTargetValue = (ConfiguredTargetValue) valueOrException.get();
- if (configuredTargetValue == null) {
- return null;
- }
-
- ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget();
- ConstraintValueInfo constraintValueInfo =
- PlatformProviderUtils.constraintValue(configuredTarget);
- if (constraintValueInfo == null) {
- throw new InvalidConstraintValueException(label);
- }
-
- return constraintValueInfo;
- } catch (ConfiguredValueCreationException e) {
- throw new InvalidConstraintValueException(label, e);
- }
- }
-
private static boolean filterPlatform(
PlatformInfo platformInfo,
List<ConstraintValueInfo> constraints,
@@ -566,24 +518,6 @@ public class ToolchainUtil {
}
}
- /** Exception used when a constraint value label is not a valid constraint value. */
- static final class InvalidConstraintValueException extends ToolchainException {
- InvalidConstraintValueException(Label label) {
- super(formatError(label));
- }
-
- InvalidConstraintValueException(Label label, ConfiguredValueCreationException e) {
- super(formatError(label), e);
- }
-
- private static String formatError(Label label) {
- return String.format(
- "Target %s was referenced as a constraint_value,"
- + " but does not provide ConstraintValueInfo",
- label);
- }
- }
-
/** Exception used when a toolchain type is required but no matching toolchain is found. */
public static final class UnresolvedToolchainsException extends ToolchainException {
private final ImmutableList<Label> missingToolchainTypes;