Improved equals() inheritance chain in Traverser implementations. We now have fewer checks and fewer casts. Cool!
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f8626ce6 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f8626ce6 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f8626ce6 Branch: refs/heads/TINKERPOP-1759 Commit: f8626ce6d3f6be4dddba09b74c38b49e8d379eb7 Parents: d0659e3 Author: Daniel Kuppitz <[email protected]> Authored: Fri Aug 25 08:43:33 2017 -0700 Committer: Daniel Kuppitz <[email protected]> Committed: Mon Aug 28 07:06:33 2017 -0700 ---------------------------------------------------------------------- .../traverser/B_LP_O_P_S_SE_SL_Traverser.java | 8 +++++--- .../traversal/traverser/B_LP_O_S_SE_SL_Traverser.java | 8 +++++--- .../traversal/traverser/B_O_S_SE_SL_Traverser.java | 10 ++++++---- .../process/traversal/traverser/B_O_Traverser.java | 8 +++++--- .../traverser/LP_O_OB_P_S_SE_SL_Traverser.java | 8 +++++--- .../traversal/traverser/LP_O_OB_S_SE_SL_Traverser.java | 8 +++++--- .../traversal/traverser/O_OB_S_SE_SL_Traverser.java | 11 ++++++----- .../process/traversal/traverser/O_Traverser.java | 13 ++++++------- 8 files changed, 43 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f8626ce6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_P_S_SE_SL_Traverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_P_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_P_S_SE_SL_Traverser.java index 919157c..5507862 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_P_S_SE_SL_Traverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_P_S_SE_SL_Traverser.java @@ -83,10 +83,12 @@ public class B_LP_O_P_S_SE_SL_Traverser<T> extends B_O_S_SE_SL_Traverser<T> { return carriesUnmergeableSack() ? System.identityHashCode(this) : (super.hashCode() ^ this.path.hashCode()); } + protected final boolean equals(final B_LP_O_P_S_SE_SL_Traverser other) { + return super.equals(other) && other.path.equals(this.path); + } + @Override public boolean equals(final Object object) { - return object instanceof B_LP_O_P_S_SE_SL_Traverser && - super.equals(object) && - ((B_LP_O_P_S_SE_SL_Traverser) object).path.equals(this.path); + return object instanceof B_LP_O_P_S_SE_SL_Traverser && this.equals((B_LP_O_P_S_SE_SL_Traverser) object); } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f8626ce6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_S_SE_SL_Traverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_S_SE_SL_Traverser.java index 1e50f3d..35f967a 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_S_SE_SL_Traverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_LP_O_S_SE_SL_Traverser.java @@ -115,10 +115,12 @@ public class B_LP_O_S_SE_SL_Traverser<T> extends B_O_S_SE_SL_Traverser<T> { return carriesUnmergeableSack() ? System.identityHashCode(this) : (super.hashCode() ^ this.path.hashCode()); } + protected final boolean equals(final B_LP_O_S_SE_SL_Traverser other) { + return super.equals(other) && other.path.equals(this.path); + } + @Override public boolean equals(final Object object) { - return object instanceof B_LP_O_S_SE_SL_Traverser && - super.equals(object) && - ((B_LP_O_S_SE_SL_Traverser) object).path.equals(this.path); + return object instanceof B_LP_O_S_SE_SL_Traverser && this.equals((B_LP_O_S_SE_SL_Traverser) object); } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f8626ce6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java index 2612472..0409cd7 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java @@ -113,6 +113,7 @@ public class B_O_S_SE_SL_Traverser<T> extends B_O_Traverser<T> { ///////////////// final boolean carriesUnmergeableSack() { + // hmmm... serialization in OLAP destroys the transient sideEffects return null != this.sack && (null == this.sideEffects || null == this.sideEffects.getSackMerger()); } @@ -121,11 +122,12 @@ public class B_O_S_SE_SL_Traverser<T> extends B_O_Traverser<T> { return carriesUnmergeableSack() ? System.identityHashCode(this) : (super.hashCode() ^ this.loops); } + protected final boolean equals(final B_O_S_SE_SL_Traverser other) { + return super.equals(other) && other.loops == this.loops && !carriesUnmergeableSack(); + } + @Override public boolean equals(final Object object) { - return object instanceof B_O_S_SE_SL_Traverser && - super.equals(object) && - ((B_O_S_SE_SL_Traverser) object).loops == this.loops && - !carriesUnmergeableSack(); // hmmm... serialization in OLAP destroys the transient sideEffects + return object instanceof B_O_S_SE_SL_Traverser && this.equals((B_O_S_SE_SL_Traverser) object); } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f8626ce6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_Traverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_Traverser.java index cef4e96..f4b32f3 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_Traverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_Traverser.java @@ -62,10 +62,12 @@ public class B_O_Traverser<T> extends O_Traverser<T> { this.future = stepId; } + protected final boolean equals(final B_O_Traverser other) { + return super.equals(other) && other.future.equals(this.future); + } + @Override public boolean equals(final Object object) { - return object instanceof B_O_Traverser && - super.equals(object) && - ((B_O_Traverser) object).future.equals(this.future); + return object instanceof B_O_Traverser && this.equals((B_O_Traverser) object); } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f8626ce6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java index b1f4aa7..aa17e57 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_P_S_SE_SL_Traverser.java @@ -112,10 +112,12 @@ public class LP_O_OB_P_S_SE_SL_Traverser<T> extends O_OB_S_SE_SL_Traverser<T> { return super.hashCode() ^ this.path.hashCode(); } + protected final boolean equals(final LP_O_OB_P_S_SE_SL_Traverser other) { + return super.equals(other) && other.path.equals(this.path); + } + @Override public boolean equals(final Object object) { - return object instanceof LP_O_OB_P_S_SE_SL_Traverser && - super.equals(object) && - ((LP_O_OB_P_S_SE_SL_Traverser) object).path.equals(this.path); + return object instanceof LP_O_OB_P_S_SE_SL_Traverser && this.equals((LP_O_OB_P_S_SE_SL_Traverser) object); } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f8626ce6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_S_SE_SL_Traverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_S_SE_SL_Traverser.java index b58560c..1ce6b4d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_S_SE_SL_Traverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/LP_O_OB_S_SE_SL_Traverser.java @@ -92,10 +92,12 @@ public class LP_O_OB_S_SE_SL_Traverser<T> extends O_OB_S_SE_SL_Traverser<T> { return carriesUnmergeableSack() ? System.identityHashCode(this) : (super.hashCode() ^ this.path.hashCode()); } + protected final boolean equals(final LP_O_OB_S_SE_SL_Traverser other) { + return super.equals(other) && other.path.equals(this.path); + } + @Override public boolean equals(final Object object) { - return object instanceof LP_O_OB_S_SE_SL_Traverser && - super.equals(object) && - ((LP_O_OB_S_SE_SL_Traverser) object).path.equals(this.path); + return object instanceof LP_O_OB_S_SE_SL_Traverser && this.equals((LP_O_OB_S_SE_SL_Traverser) object); } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f8626ce6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_OB_S_SE_SL_Traverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_OB_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_OB_S_SE_SL_Traverser.java index d1532bf..d81a564 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_OB_S_SE_SL_Traverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_OB_S_SE_SL_Traverser.java @@ -134,6 +134,7 @@ public class O_OB_S_SE_SL_Traverser<T> extends O_Traverser<T> { ///////////////// final boolean carriesUnmergeableSack() { + // hmmm... serialization in OLAP destroys the transient sideEffects return null != this.sack && (null == this.sideEffects || null == this.sideEffects.getSackMerger()); } @@ -142,12 +143,12 @@ public class O_OB_S_SE_SL_Traverser<T> extends O_Traverser<T> { return carriesUnmergeableSack() ? System.identityHashCode(this) : (super.hashCode() ^ this.loops); } + protected final boolean equals(final O_OB_S_SE_SL_Traverser other) { + return super.equals(other) && other.loops == this.loops && other.future.equals(this.future) && + !carriesUnmergeableSack(); + } @Override public boolean equals(final Object object) { - return object instanceof O_OB_S_SE_SL_Traverser && - super.equals(object) && - ((O_OB_S_SE_SL_Traverser) object).loops == this.loops && - ((O_OB_S_SE_SL_Traverser) object).future.equals(this.future) && - !carriesUnmergeableSack(); // hmmm... serialization in OLAP destroys the transient sideEffects + return object instanceof O_OB_S_SE_SL_Traverser && this.equals((O_OB_S_SE_SL_Traverser) object); } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f8626ce6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_Traverser.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_Traverser.java index b4e1e0d..0c8152e 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_Traverser.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/O_Traverser.java @@ -23,6 +23,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser; import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.AbstractTraverser; import java.util.HashSet; +import java.util.Objects; import java.util.Set; /** @@ -69,14 +70,12 @@ public abstract class O_Traverser<T> extends AbstractTraverser<T> { } } + protected final boolean equals(final O_Traverser other) { + return super.equals(other) && Objects.equals(this.tags, other.tags); + } + @Override public boolean equals(final Object object) { - return object instanceof O_Traverser && - super.equals(object) && - (this.tags == null - ? ((O_Traverser) object).tags == null - : (((O_Traverser) object).tags != null && - ((O_Traverser) object).tags.containsAll(this.tags) && - this.tags.containsAll(((O_Traverser) object).tags))); + return object instanceof O_Traverser && this.equals((O_Traverser) object); } }
