aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe
diff options
context:
space:
mode:
authorGravatar Mark Schaller <mschaller@google.com>2015-08-21 17:44:41 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-08-24 14:02:12 +0000
commitf3ec7c4ffd59936b668968d18865f80497e7d544 (patch)
tree555a23ce835772a46c693129a4d425e2d1701de9 /src/main/java/com/google/devtools/build/lib/skyframe
parent65ac3559a0377f3e8df596d63e0d91502bb09a86 (diff)
Implement hashCode, equals for TransitiveTraversalValue and related SkyValues
-- MOS_MIGRATED_REVID=101233095
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java22
3 files changed, 47 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
index fe7a0da76b..9ffac75455 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternValue.java
@@ -32,7 +32,7 @@ import java.util.List;
* invoked only for its side effect (i.e. ensuring the graph contains targets matching the
* pattern and its transitive dependencies), this value carries no information.
*
- * <p>Because the returned value is always the same object, this value and the
+ * <p>Because the returned value is always equal to objects that share its type, this value and the
* {@link PrepareDepsOfPatternFunction} which computes it are incompatible with change pruning. It
* should only be requested by consumers who do not require reevaluation when
* {@link PrepareDepsOfPatternFunction} is reevaluated. Safe consumers include, e.g., top-level
@@ -40,11 +40,23 @@ import java.util.List;
* side-effects.
*/
public class PrepareDepsOfPatternValue implements SkyValue {
+ // Note that this value does not guarantee singleton-like reference equality because we use Java
+ // deserialization. Java deserialization can create other instances.
public static final PrepareDepsOfPatternValue INSTANCE = new PrepareDepsOfPatternValue();
private PrepareDepsOfPatternValue() {
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof PrepareDepsOfPatternValue;
+ }
+
+ @Override
+ public int hashCode() {
+ return 42;
+ }
+
/**
* Returns an iterable of {@link PrepareDepsOfPatternSkyKeyOrException}, with {@link
* TargetPatternKey} arguments. Negative target patterns of type other than {@link
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java
index eef70843fd..d325de5496 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java
@@ -26,11 +26,23 @@ import com.google.devtools.build.skyframe.SkyValue;
@ThreadSafe
public final class TargetMarkerValue implements SkyValue {
+ // Note that this value does not guarantee singleton-like reference equality because we use Java
+ // deserialization. java deserialization can create other instances.
static final TargetMarkerValue TARGET_MARKER_INSTANCE = new TargetMarkerValue();
private TargetMarkerValue() {
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof TargetMarkerValue;
+ }
+
+ @Override
+ public int hashCode() {
+ return 42;
+ }
+
@ThreadSafe
public static SkyKey key(Label label) {
return new SkyKey(SkyFunctions.TARGET_MARKER, label);
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 8216381994..829bc7d7f0 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
@@ -20,6 +20,8 @@ import com.google.devtools.build.lib.syntax.Label;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
+import java.util.Objects;
+
import javax.annotation.Nullable;
/**
@@ -33,6 +35,9 @@ public class TransitiveTraversalValue implements SkyValue {
@Nullable
private final NoSuchTargetException errorLoadingTarget;
+ // Note that this value does not guarantee singleton-like reference equality for successful
+ // {@link TransitiveTraversalValue}s because we use Java deserialization. Java deserialization can
+ // create other instances.
static final TransitiveTraversalValue SUCCESSFUL_TRANSITIVE_TRAVERSAL_VALUE =
new TransitiveTraversalValue(null);
@@ -51,6 +56,23 @@ public class TransitiveTraversalValue implements SkyValue {
return errorLoadingTarget;
}
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof TransitiveTraversalValue)) {
+ return false;
+ }
+ TransitiveTraversalValue that = (TransitiveTraversalValue) o;
+ return Objects.equals(this.errorLoadingTarget, that.errorLoadingTarget);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(errorLoadingTarget);
+ }
+
@ThreadSafe
public static SkyKey key(Label label) {
return new SkyKey(SkyFunctions.TRANSITIVE_TRAVERSAL, label);