From 5014138de738ed5ea9774fd3f8284e16ca1090b9 Mon Sep 17 00:00:00 2001 From: "sandszhou.zj" Date: Wed, 28 Aug 2019 10:37:17 +0800 Subject: [PATCH] fix GraphStep.ids null bug --- .../process/traversal/step/map/GraphStep.java | 18 +++++++++++------- .../step/sideEffect/TinkerGraphStep.java | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java index e0e80f433bc..68d5ec43f25 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java @@ -60,7 +60,7 @@ public class GraphStep extends AbstractStep implemen public GraphStep(final Traversal.Admin traversal, final Class returnClass, final boolean isStart, final Object... ids) { super(traversal); this.returnClass = returnClass; - this.ids = (ids.length == 1 && ids[0] instanceof Collection) ? ((Collection) ids[0]).toArray(new Object[((Collection) ids[0]).size()]) : ids; + this.ids = (ids != null && ids.length == 1 && ids[0] instanceof Collection) ? ((Collection) ids[0]).toArray(new Object[((Collection) ids[0]).size()]) : ids; this.isStart = isStart; this.iteratorSupplier = () -> (Iterator) (Vertex.class.isAssignableFrom(this.returnClass) ? this.getTraversal().getGraph().get().vertices(this.ids) : @@ -100,7 +100,7 @@ public Object[] getIds() { } public void addIds(final Object... newIds) { - if (this.ids.length == 0 && + if ((this.ids == null || this.ids.length == 0) && newIds.length == 1 && newIds[0] instanceof Collection && ((Collection) newIds[0]).isEmpty()) this.ids = null; @@ -122,9 +122,11 @@ public void onGraphComputer() { } public void convertElementsToIds() { - for (int i = 0; i < this.ids.length; i++) { // if this is going to OLAP, convert to ids so you don't serialize elements - if (this.ids[i] instanceof Element) - this.ids[i] = ((Element) this.ids[i]).id(); + if (null != this.ids) { + for (int i = 0; i < this.ids.length; i++) { // if this is going to OLAP, convert to ids so you don't serialize elements + if (this.ids[i] instanceof Element) + this.ids[i] = ((Element) this.ids[i]).id(); + } } } @@ -160,8 +162,10 @@ public void reset() { @Override public int hashCode() { int result = super.hashCode() ^ this.returnClass.hashCode(); - for (final Object id : this.ids) { - result ^= id.hashCode(); + if (null != this.ids) { + for (final Object id : this.ids) { + result ^= id.hashCode(); + } } return result; } diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java index 901591d50f3..6cfe51a4b56 100644 --- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java +++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/step/sideEffect/TinkerGraphStep.java @@ -121,7 +121,7 @@ public String toString() { if (this.hasContainers.isEmpty()) return super.toString(); else - return 0 == this.ids.length ? + return (null == this.ids || 0 == this.ids.length) ? StringFactory.stepString(this, this.returnClass.getSimpleName().toLowerCase(), this.hasContainers) : StringFactory.stepString(this, this.returnClass.getSimpleName().toLowerCase(), Arrays.toString(this.ids), this.hasContainers); }