aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java54
1 files changed, 31 insertions, 23 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
index 483167811a..05b3c6a32c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
@@ -19,7 +19,6 @@ import com.google.common.collect.ImmutableSet;
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.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.util.StringCanonicalizer;
@@ -33,40 +32,41 @@ import java.util.Set;
import javax.annotation.Nullable;
/**
- * A <i>transitive</i> target reference that, when built in skyframe, loads the entire
- * transitive closure of a target. Contains no information about the targets traversed.
+ * A <i>transitive</i> target reference that, when built in skyframe, loads the entire transitive
+ * closure of a target. Retains the first error message found during the transitive traversal,
+ * and a set of names of providers if the target is a {@link Rule}.
*/
@Immutable
@ThreadSafe
public class TransitiveTraversalValue implements SkyValue {
- @Nullable
- private final NoSuchTargetException errorLoadingTarget;
- @Nullable
- private final ImmutableSet<String> providers;
+ @Nullable private final ImmutableSet<String> providers;
+ @Nullable private final String firstErrorMessage;
- private TransitiveTraversalValue(@Nullable Iterable<String> providers,
- @Nullable NoSuchTargetException errorLoadingTarget) {
- this.errorLoadingTarget = errorLoadingTarget;
+ private TransitiveTraversalValue(
+ @Nullable Iterable<String> providers, @Nullable String firstErrorMessage) {
this.providers = (providers == null) ? null : canonicalSet(providers);
+ this.firstErrorMessage =
+ (firstErrorMessage == null) ? null : StringCanonicalizer.intern(firstErrorMessage);
}
- public static TransitiveTraversalValue unsuccessfulTransitiveTraversal(
- NoSuchTargetException errorLoadingTarget) {
- return new TransitiveTraversalValue(null, Preconditions.checkNotNull(errorLoadingTarget));
+ public static TransitiveTraversalValue unsuccessfulTransitiveTraversal(String firstErrorMessage) {
+ return new TransitiveTraversalValue(null, Preconditions.checkNotNull(firstErrorMessage));
}
- public static TransitiveTraversalValue forTarget(Target target) {
+ public static TransitiveTraversalValue forTarget(
+ Target target, @Nullable String firstErrorMessage) {
if (target instanceof Rule) {
Rule rule = (Rule) target;
return new TransitiveTraversalValue(
- toStringSet(rule.getRuleClassObject().getAdvertisedProviders()), null);
+ toStringSet(rule.getRuleClassObject().getAdvertisedProviders()), firstErrorMessage);
}
- return new TransitiveTraversalValue(ImmutableList.<String>of(), null);
+ return new TransitiveTraversalValue(ImmutableList.<String>of(), firstErrorMessage);
}
- public static TransitiveTraversalValue withProviders(Collection<String> vals) {
- return new TransitiveTraversalValue(ImmutableSet.copyOf(vals), null);
+ public static TransitiveTraversalValue withProviders(
+ Collection<String> providers, @Nullable String firstErrorMessage) {
+ return new TransitiveTraversalValue(ImmutableSet.copyOf(providers), firstErrorMessage);
}
private static ImmutableSet<String> canonicalSet(Iterable<String> strIterable) {
@@ -87,14 +87,22 @@ public class TransitiveTraversalValue implements SkyValue {
return pBuilder.build();
}
+ /**
+ * Returns the set of provider names from the target, if the target is a {@link Rule}. If there
+ * were errors loading the target, returns {@code null}.
+ */
+ @Nullable
public Set<String> getProviders() {
return providers;
}
- /** Returns the error, if any, from loading the target. */
+ /**
+ * Returns the first error message, if any, from loading the target and its transitive
+ * dependencies.
+ */
@Nullable
- public NoSuchTargetException getErrorLoadingTarget() {
- return errorLoadingTarget;
+ public String getFirstErrorMessage() {
+ return firstErrorMessage;
}
@Override
@@ -106,13 +114,13 @@ public class TransitiveTraversalValue implements SkyValue {
return false;
}
TransitiveTraversalValue that = (TransitiveTraversalValue) o;
- return Objects.equals(this.errorLoadingTarget, that.errorLoadingTarget)
+ return Objects.equals(this.firstErrorMessage, that.firstErrorMessage)
&& Objects.equals(this.providers, that.providers);
}
@Override
public int hashCode() {
- return 31 * Objects.hashCode(errorLoadingTarget) + Objects.hashCode(providers);
+ return 31 * Objects.hashCode(firstErrorMessage) + Objects.hashCode(providers);
}
@ThreadSafe