added @pietermartin's direct reference to Step.getLabels() optimization to 
ImmutablePath. Added JavaDoc to Traverser for the dropLabels()/keepLabels() 
method. Fixed a spelling mistake in AbstractTraverser.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/deaf38a7
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/deaf38a7
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/deaf38a7

Branch: refs/heads/TINKERPOP-1490
Commit: deaf38a7ed35f3236614d833eeb0eac2a25334fc
Parents: 3896a98
Author: Marko A. Rodriguez <okramma...@gmail.com>
Authored: Tue Nov 1 08:27:08 2016 -0600
Committer: Marko A. Rodriguez <okramma...@gmail.com>
Committed: Tue Nov 1 08:27:08 2016 -0600

----------------------------------------------------------------------
 .../gremlin/process/traversal/Traverser.java      | 16 ++++++++++++++++
 .../traversal/step/util/ImmutablePath.java        | 18 +++++++++++-------
 .../traverser/util/AbstractTraverser.java         |  2 +-
 .../structure/util/detached/DetachedPath.java     |  8 +++-----
 4 files changed, 31 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/deaf38a7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java
index 0c37a34..93ebe7d 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traverser.java
@@ -183,10 +183,26 @@ public interface Traverser<T> extends Serializable, 
Comparable<Traverser<T>>, Cl
 
         public void addLabels(final Set<String> labels);
 
+        /**
+         * Drop all path information not associated with specified labels.
+         * This is an optimization method that allows a traverser to save 
memory and increase the likelihood of bulking.
+         *
+         * @param labels the labels to keep path information for.
+         */
         public void keepLabels(final Set<String> labels);
 
+        /**
+         * Drop all path information associated with specified labels.
+         * This is an optimization method that allows a traverser to save 
memory and increase the likelihood of bulking.
+         *
+         * @param labels the labels to drop path information for.
+         */
         public void dropLabels(final Set<String> labels);
 
+        /**
+         * Drop the path of the traverser.
+         * This is an optimization method that allows a traverser to save 
memory and increase the likelihood of bulking.
+         */
         public void dropPath();
 
         /**

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/deaf38a7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
index 8afa91c..6b67c45 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ImmutablePath.java
@@ -34,11 +34,11 @@ import java.util.Set;
  */
 public class ImmutablePath implements Path, Serializable, Cloneable {
 
-    private static final ImmutablePath TAIL_PATH = new ImmutablePath(null, 
null, Collections.emptySet());
+    private static final ImmutablePath TAIL_PATH = new ImmutablePath(null, 
null, null);
 
     private ImmutablePath previousPath;
     private Object currentObject;
-    private Set<String> currentLabels = new LinkedHashSet<>();
+    private Set<String> currentLabels;
 
     public static Path make() {
         return TAIL_PATH;
@@ -53,7 +53,7 @@ public class ImmutablePath implements Path, Serializable, 
Cloneable {
     private ImmutablePath(final ImmutablePath previousPath, final Object 
currentObject, final Set<String> currentLabels) {
         this.previousPath = previousPath;
         this.currentObject = currentObject;
-        this.currentLabels.addAll(currentLabels);
+        this.currentLabels = currentLabels;
     }
 
     private final boolean isTail() {
@@ -78,10 +78,14 @@ public class ImmutablePath implements Path, Serializable, 
Cloneable {
 
     @Override
     public Path extend(final Set<String> labels) {
-        final Set<String> newLabels = new LinkedHashSet<>();
-        newLabels.addAll(this.currentLabels);
-        newLabels.addAll(labels);
-        return new ImmutablePath(this.previousPath, this.currentObject, 
newLabels);
+        if (labels.isEmpty())
+            return this;
+        else {
+            final Set<String> newLabels = new LinkedHashSet<>();
+            newLabels.addAll(this.currentLabels);
+            newLabels.addAll(labels);
+            return new ImmutablePath(this.previousPath, this.currentObject, 
newLabels);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/deaf38a7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java
index f23ac6e..50a206b 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractTraverser.java
@@ -83,7 +83,7 @@ public abstract class AbstractTraverser<T> implements 
Traverser<T>, Traverser.Ad
     }
 
     @Override
-    public void dropLabels(final Set<String> labesl) {
+    public void dropLabels(final Set<String> labels) {
 
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/deaf38a7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
index 10f9dfb..3cf946c 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedPath.java
@@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.util.Attachable;
 
+import java.util.LinkedHashSet;
 import java.util.function.Function;
 
 /**
@@ -43,20 +44,17 @@ public class DetachedPath extends MutablePath implements 
Attachable<Path> {
         path.forEach((object, labels) -> {
             if (object instanceof DetachedElement || object instanceof 
DetachedProperty || object instanceof DetachedPath) {
                 this.objects.add(object);
-                this.labels.add(labels);
             } else if (object instanceof Element) {
                 this.objects.add(DetachedFactory.detach((Element) object, 
withProperties));
-                this.labels.add(labels);
             } else if (object instanceof Property) {
                 this.objects.add(DetachedFactory.detach((Property) object));
-                this.labels.add(labels);
             } else if (object instanceof Path) {
                 this.objects.add(DetachedFactory.detach((Path) object, 
withProperties));
-                this.labels.add(labels);
             } else {
                 this.objects.add(object);
-                this.labels.add(labels);
             }
+            //Make a copy of the labels as its an UnmodifiableSet which can 
not be serialized.
+            this.labels.add(new LinkedHashSet<>(labels));
         });
     }
 

Reply via email to