You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/12/21 17:20:28 UTC

[1/2] tinkerpop git commit: Moved class/serializer registrations for gryo to GryoVersion.

Repository: tinkerpop
Updated Branches:
  refs/heads/master 445bce2e2 -> e152a5050


Moved class/serializer registrations for gryo to GryoVersion.

This way, the Builder doesn't have to be responsible for constructing that stuff and it doesn't need to be subclassed. As a result the version of gryo can just be passed to the Builder which can then grab the registrations from that. CTR


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

Branch: refs/heads/master
Commit: 11cc9697359bb22be60d219f2ae9adc8e569fb87
Parents: 34d9e58
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Dec 21 11:51:34 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Dec 21 11:51:34 2016 -0500

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   2 +-
 .../gremlin/structure/io/gryo/GryoMapper.java   | 424 +------------------
 .../gremlin/structure/io/gryo/GryoTypeReg.java  | 140 ++++++
 .../gremlin/structure/io/gryo/GryoVersion.java  | 302 ++++++++++++-
 4 files changed, 462 insertions(+), 406 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/11cc9697/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 6fd7255..33ce26e 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,7 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.4 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-* Added `GryoVersion` for future flexibility when introducing a new verison of Gryo.
+* Added `GryoVersion` for future flexibility when introducing a new verison of Gryo and moved serializer registrations to it.
 * Lessened the severity of Gremlin Server logging when it encounters two or more serializers addressing the same mime type.
 * Bumped to Netty 4.0.42.final.
 * Added `ByteBuffer`, `InetAddress`, `Timestamp` to the list of Gryo supported classes.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/11cc9697/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
index cece932..c42a4fc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
@@ -18,125 +18,25 @@
  */
 package org.apache.tinkerpop.gremlin.structure.io.gryo;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.tinkerpop.gremlin.process.computer.GraphFilter;
-import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
-import org.apache.tinkerpop.gremlin.process.computer.util.MapMemory;
-import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
-import org.apache.tinkerpop.gremlin.process.traversal.Contains;
-import org.apache.tinkerpop.gremlin.process.traversal.Operator;
-import org.apache.tinkerpop.gremlin.process.traversal.Order;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-import org.apache.tinkerpop.gremlin.process.traversal.Pop;
-import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupCountStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStepV3d0;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TreeStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_P_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_P_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_OB_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
-import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics;
-import org.apache.tinkerpop.gremlin.process.traversal.util.ImmutableMetrics;
-import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
-import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
-import org.apache.tinkerpop.gremlin.structure.Column;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.structure.Property;
-import org.apache.tinkerpop.gremlin.structure.T;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
 import org.apache.tinkerpop.gremlin.structure.io.Mapper;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.SerializerShim;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.shaded.ShadedSerializerAdapter;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPath;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferencePath;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceProperty;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
-import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraph;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphSerializer;
-import org.apache.tinkerpop.gremlin.util.function.HashSetSupplier;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
 import org.apache.tinkerpop.shaded.kryo.ClassResolver;
 import org.apache.tinkerpop.shaded.kryo.Kryo;
-import org.apache.tinkerpop.shaded.kryo.KryoSerializable;
 import org.apache.tinkerpop.shaded.kryo.Serializer;
-import org.apache.tinkerpop.shaded.kryo.serializers.JavaSerializer;
 import org.apache.tinkerpop.shaded.kryo.util.DefaultStreamFactory;
 import org.apache.tinkerpop.shaded.kryo.util.MapReferenceResolver;
 import org.javatuples.Pair;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.net.URI;
-import java.nio.ByteBuffer;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.MonthDay;
-import java.time.OffsetDateTime;
-import java.time.OffsetTime;
-import java.time.Period;
-import java.time.Year;
-import java.time.YearMonth;
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
-import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Currency;
-import java.util.Date;
-import java.util.EnumSet;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
-import java.util.TimeZone;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Function;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
@@ -177,9 +77,11 @@ public final class GryoMapper implements Mapper<Kryo> {
     private final boolean registrationRequired;
     private final boolean referenceTracking;
     private final Supplier<ClassResolver> classResolver;
+    private final GryoVersion version;
 
     private GryoMapper(final Builder builder) {
         this.typeRegistrations = builder.typeRegistrations;
+        this.version = builder.version;
         validate();
 
         this.registrationRequired = builder.registrationRequired;
@@ -198,6 +100,10 @@ public final class GryoMapper implements Mapper<Kryo> {
         return kryo;
     }
 
+    public GryoVersion getVersion() {
+        return version;
+    }
+
     public List<Class> getRegisteredClasses() {
         return this.typeRegistrations.stream().map(TypeRegistration::getTargetClass).collect(Collectors.toList());
     }
@@ -207,11 +113,7 @@ public final class GryoMapper implements Mapper<Kryo> {
     }
 
     public static Builder build() {
-        return build(GryoVersion.V1_0);
-    }
-
-    public static Builder build(final GryoVersion version) {
-        return new BuilderV1d0();
+        return new Builder();
     }
 
     private void validate() {
@@ -229,185 +131,18 @@ public final class GryoMapper implements Mapper<Kryo> {
             throw new IllegalStateException("There are duplicate kryo identifiers in use: " + duplicates);
     }
 
-    public final static class BuilderV1d0 extends Builder {
-        @Override
-        public List<TypeRegistration<?>> initTypeRegistrations() {
-            return new ArrayList<TypeRegistration<?>>() {{
-                add(GryoTypeReg.of(byte[].class, 25));
-                add(GryoTypeReg.of(char[].class, 26));
-                add(GryoTypeReg.of(short[].class, 27));
-                add(GryoTypeReg.of(int[].class, 28));
-                add(GryoTypeReg.of(long[].class, 29));
-                add(GryoTypeReg.of(float[].class, 30));
-                add(GryoTypeReg.of(double[].class, 31));
-                add(GryoTypeReg.of(String[].class, 32));
-                add(GryoTypeReg.of(Object[].class, 33));
-                add(GryoTypeReg.of(ArrayList.class, 10));
-                add(GryoTypeReg.of(ARRAYS_AS_LIST, 134, new UtilSerializers.ArraysAsListSerializer()));
-                add(GryoTypeReg.of(BigInteger.class, 34));
-                add(GryoTypeReg.of(BigDecimal.class, 35));
-                add(GryoTypeReg.of(Calendar.class, 39));
-                add(GryoTypeReg.of(Class.class, 41, new UtilSerializers.ClassSerializer()));
-                add(GryoTypeReg.of(Collection.class, 37));
-                add(GryoTypeReg.of(Collections.EMPTY_LIST.getClass(), 51));
-                add(GryoTypeReg.of(Collections.EMPTY_MAP.getClass(), 52));
-                add(GryoTypeReg.of(Collections.EMPTY_SET.getClass(), 53));
-                add(GryoTypeReg.of(Collections.singleton(null).getClass(), 54));
-                add(GryoTypeReg.of(Collections.singletonList(null).getClass(), 24));
-                add(GryoTypeReg.of(Collections.singletonMap(null, null).getClass(), 23));
-                add(GryoTypeReg.of(Contains.class, 49));
-                add(GryoTypeReg.of(Currency.class, 40));
-                add(GryoTypeReg.of(Date.class, 38));
-                add(GryoTypeReg.of(Direction.class, 12));
-                add(GryoTypeReg.of(DetachedEdge.class, 21));
-                add(GryoTypeReg.of(DetachedVertexProperty.class, 20));
-                add(GryoTypeReg.of(DetachedProperty.class, 18));
-                add(GryoTypeReg.of(DetachedVertex.class, 19));
-                add(GryoTypeReg.of(DetachedPath.class, 60));
-                // skip 14
-                add(GryoTypeReg.of(EnumSet.class, 46));
-                add(GryoTypeReg.of(HashMap.class, 11));
-                add(GryoTypeReg.of(HashMap.Entry.class, 16));
-                add(GryoTypeReg.of(HASH_MAP_NODE, 92));
-                add(GryoTypeReg.of(KryoSerializable.class, 36));
-                add(GryoTypeReg.of(LinkedHashMap.class, 47));
-                add(GryoTypeReg.of(LinkedHashSet.class, 71));
-                add(GryoTypeReg.of(LinkedList.class, 116));
-                add(GryoTypeReg.of(LINKED_HASH_MAP_ENTRY_CLASS, 15));
-                add(GryoTypeReg.of(Locale.class, 22));
-                add(GryoTypeReg.of(StringBuffer.class, 43));
-                add(GryoTypeReg.of(StringBuilder.class, 44));
-                add(GryoTypeReg.of(T.class, 48));
-                add(GryoTypeReg.of(TimeZone.class, 42));
-                add(GryoTypeReg.of(TreeMap.class, 45));
-                add(GryoTypeReg.of(TreeSet.class, 50));
-                add(GryoTypeReg.of(UUID.class, 17, new UtilSerializers.UUIDSerializer()));
-                add(GryoTypeReg.of(URI.class, 72, new UtilSerializers.URISerializer()));
-                add(GryoTypeReg.of(VertexTerminator.class, 13));
-                add(GryoTypeReg.of(AbstractMap.SimpleEntry.class, 120));
-                add(GryoTypeReg.of(AbstractMap.SimpleImmutableEntry.class, 121));
-                add(GryoTypeReg.of(java.sql.Timestamp.class, 161));
-                add(GryoTypeReg.of(InetAddress.class, 162, new UtilSerializers.InetAddressSerializer()));
-                add(GryoTypeReg.of(ByteBuffer.class, 163, new UtilSerializers.ByteBufferSerializer()));  // ***LAST ID***
-
-                add(GryoTypeReg.of(ReferenceEdge.class, 81));
-                add(GryoTypeReg.of(ReferenceVertexProperty.class, 82));
-                add(GryoTypeReg.of(ReferenceProperty.class, 83));
-                add(GryoTypeReg.of(ReferenceVertex.class, 84));
-                add(GryoTypeReg.of(ReferencePath.class, 85));
-
-                add(GryoTypeReg.of(StarGraph.class, 86, new StarGraphSerializer(Direction.BOTH, new GraphFilter())));
-
-                add(GryoTypeReg.of(Edge.class, 65, new GryoSerializers.EdgeSerializer()));
-                add(GryoTypeReg.of(Vertex.class, 66, new GryoSerializers.VertexSerializer()));
-                add(GryoTypeReg.of(Property.class, 67, new GryoSerializers.PropertySerializer()));
-                add(GryoTypeReg.of(VertexProperty.class, 68, new GryoSerializers.VertexPropertySerializer()));
-                add(GryoTypeReg.of(Path.class, 59, new GryoSerializers.PathSerializer()));
-                // skip 55
-                add(GryoTypeReg.of(B_O_Traverser.class, 75));
-                add(GryoTypeReg.of(O_Traverser.class, 76));
-                add(GryoTypeReg.of(B_LP_O_P_S_SE_SL_Traverser.class, 77));
-                add(GryoTypeReg.of(B_O_S_SE_SL_Traverser.class, 78));
-                add(GryoTypeReg.of(B_LP_O_S_SE_SL_Traverser.class, 87));
-                add(GryoTypeReg.of(O_OB_S_SE_SL_Traverser.class, 89));
-                add(GryoTypeReg.of(LP_O_OB_S_SE_SL_Traverser.class, 90));
-                add(GryoTypeReg.of(LP_O_OB_P_S_SE_SL_Traverser.class, 91));
-                add(GryoTypeReg.of(DefaultRemoteTraverser.class, 123, new GryoSerializers.DefaultRemoteTraverserSerializer()));
-
-                add(GryoTypeReg.of(Bytecode.class, 122, new GryoSerializers.BytecodeSerializer()));
-                add(GryoTypeReg.of(P.class, 124, new GryoSerializers.PSerializer()));
-                add(GryoTypeReg.of(Lambda.class, 125, new GryoSerializers.LambdaSerializer()));
-                add(GryoTypeReg.of(Bytecode.Binding.class, 126, new GryoSerializers.BindingSerializer()));
-                add(GryoTypeReg.of(Order.class, 127));
-                add(GryoTypeReg.of(Scope.class, 128));
-                add(GryoTypeReg.of(AndP.class, 129, new GryoSerializers.AndPSerializer()));
-                add(GryoTypeReg.of(OrP.class, 130, new GryoSerializers.OrPSerializer()));
-                add(GryoTypeReg.of(VertexProperty.Cardinality.class, 131));
-                add(GryoTypeReg.of(Column.class, 132));
-                add(GryoTypeReg.of(Pop.class, 133));
-                add(GryoTypeReg.of(SackFunctions.Barrier.class, 135));
-                add(GryoTypeReg.of(TraversalOptionParent.Pick.class, 137));
-                add(GryoTypeReg.of(HashSetSupplier.class, 136, new UtilSerializers.HashSetSupplierSerializer()));
-
-                add(GryoTypeReg.of(TraverserSet.class, 58));
-                add(GryoTypeReg.of(Tree.class, 61));
-                add(GryoTypeReg.of(HashSet.class, 62));
-                add(GryoTypeReg.of(BulkSet.class, 64));
-                add(GryoTypeReg.of(MutableMetrics.class, 69));
-                add(GryoTypeReg.of(ImmutableMetrics.class, 115));
-                add(GryoTypeReg.of(DefaultTraversalMetrics.class, 70));
-                add(GryoTypeReg.of(MapMemory.class, 73));
-                add(GryoTypeReg.of(MapReduce.NullObject.class, 74));
-                add(GryoTypeReg.of(AtomicLong.class, 79));
-                add(GryoTypeReg.of(Pair.class, 88, new UtilSerializers.PairSerializer()));
-                add(GryoTypeReg.of(TraversalExplanation.class, 106, new JavaSerializer()));
-
-                add(GryoTypeReg.of(Duration.class, 93, new JavaTimeSerializers.DurationSerializer()));
-                add(GryoTypeReg.of(Instant.class, 94, new JavaTimeSerializers.InstantSerializer()));
-                add(GryoTypeReg.of(LocalDate.class, 95, new JavaTimeSerializers.LocalDateSerializer()));
-                add(GryoTypeReg.of(LocalDateTime.class, 96, new JavaTimeSerializers.LocalDateTimeSerializer()));
-                add(GryoTypeReg.of(LocalTime.class, 97, new JavaTimeSerializers.LocalTimeSerializer()));
-                add(GryoTypeReg.of(MonthDay.class, 98, new JavaTimeSerializers.MonthDaySerializer()));
-                add(GryoTypeReg.of(OffsetDateTime.class, 99, new JavaTimeSerializers.OffsetDateTimeSerializer()));
-                add(GryoTypeReg.of(OffsetTime.class, 100, new JavaTimeSerializers.OffsetTimeSerializer()));
-                add(GryoTypeReg.of(Period.class, 101, new JavaTimeSerializers.PeriodSerializer()));
-                add(GryoTypeReg.of(Year.class, 102, new JavaTimeSerializers.YearSerializer()));
-                add(GryoTypeReg.of(YearMonth.class, 103, new JavaTimeSerializers.YearMonthSerializer()));
-                add(GryoTypeReg.of(ZonedDateTime.class, 104, new JavaTimeSerializers.ZonedDateTimeSerializer()));
-                add(GryoTypeReg.of(ZoneOffset.class, 105, new JavaTimeSerializers.ZoneOffsetSerializer()));
-
-                add(GryoTypeReg.of(Operator.class, 107));
-                add(GryoTypeReg.of(FoldStep.FoldBiOperator.class, 108));
-                add(GryoTypeReg.of(GroupCountStep.GroupCountBiOperator.class, 109));
-                add(GryoTypeReg.of(GroupStep.GroupBiOperator.class, 117, new JavaSerializer())); // because they contain traversals
-                add(GryoTypeReg.of(MeanGlobalStep.MeanGlobalBiOperator.class, 110));
-                add(GryoTypeReg.of(MeanGlobalStep.MeanNumber.class, 111));
-                add(GryoTypeReg.of(TreeStep.TreeBiOperator.class, 112));
-                add(GryoTypeReg.of(GroupStepV3d0.GroupBiOperatorV3d0.class, 113));
-                add(GryoTypeReg.of(RangeGlobalStep.RangeBiOperator.class, 114));
-                add(GryoTypeReg.of(OrderGlobalStep.OrderBiOperator.class, 118, new JavaSerializer())); // because they contain traversals
-                add(GryoTypeReg.of(ProfileStep.ProfileBiOperator.class, 119));
-            }};
-        }
-    }
-
     /**
      * A builder to construct a {@link GryoMapper} instance.
      */
-    public abstract static class Builder implements Mapper.Builder<Builder> {
+    public static class Builder implements Mapper.Builder<Builder> {
 
-        /**
-         * Map with one entry that is used so that it is possible to get the class of LinkedHashMap.Entry.
-         */
-        protected static final LinkedHashMap m = new LinkedHashMap() {{
-            put("junk", "dummy");
-        }};
-
-        protected static final Class ARRAYS_AS_LIST = Arrays.asList("dummy").getClass();
-
-        protected static final Class LINKED_HASH_MAP_ENTRY_CLASS = m.entrySet().iterator().next().getClass();
-
-        /**
-         * The {@code HashMap$Node} class comes into serialization play when a {@code Map.entrySet()} is
-         * serialized.
-         */
-        protected static final Class HASH_MAP_NODE;
-
-        static {
-            // have to instantiate this via reflection because it is a private inner class of HashMap
-            final String className = HashMap.class.getName() + "$Node";
-            try {
-                HASH_MAP_NODE = Class.forName(className);
-            } catch (Exception ex) {
-                throw new RuntimeException("Could not access " + className, ex);
-            }
-        }
+        private GryoVersion version = GryoVersion.V1_0;
 
         /**
          * Note that the following are pre-registered boolean, Boolean, byte, Byte, char, Character, double, Double,
          * int, Integer, float, Float, long, Long, short, Short, String, void.
          */
-        private final List<TypeRegistration<?>> typeRegistrations;
+        private List<TypeRegistration<?>> typeRegistrations = version.cloneRegistrations();
 
         private final List<IoRegistry> registries = new ArrayList<>();
 
@@ -420,26 +155,7 @@ public final class GryoMapper implements Mapper<Kryo> {
         private boolean referenceTracking = true;
         private Supplier<ClassResolver> classResolver = GryoClassResolver::new;
 
-        private Builder() {
-            this.typeRegistrations = initTypeRegistrations();
-
-            // Validate the default registrations
-            // For justification of these default registration rules, see TinkerPopKryoRegistrator
-            for (TypeRegistration<?> tr : typeRegistrations) {
-                if (tr.hasSerializer() /* no serializer is acceptable */ &&
-                        null == tr.getSerializerShim() /* a shim serializer is acceptable */ &&
-                        !(tr.getShadedSerializer() instanceof JavaSerializer) /* shaded JavaSerializer is acceptable */) {
-                    // everything else is invalid
-                    final String msg = String.format("The default GryoMapper type registration %s is invalid.  " +
-                                    "It must supply either an implementation of %s or %s, but supplies neither.  " +
-                                    "This is probably a bug in GryoMapper's default serialization class registrations.", tr,
-                            SerializerShim.class.getCanonicalName(), JavaSerializer.class.getCanonicalName());
-                    throw new IllegalStateException(msg);
-                }
-            }
-        }
-
-        public abstract List<TypeRegistration<?>> initTypeRegistrations();
+        private Builder() { }
 
         /**
          * {@inheritDoc}
@@ -452,6 +168,16 @@ public final class GryoMapper implements Mapper<Kryo> {
         }
 
         /**
+         * The version of Gryo to use in the mapper. Defaults to 1.0. Calls to this method will reset values specified
+         * to {@link #addCustom(Class, Function)} and related overloads.
+         */
+        public Builder version(final GryoVersion version) {
+            this.version = version;
+            this.typeRegistrations = version.cloneRegistrations();
+            return this;
+        }
+
+        /**
          * Provides a custom Kryo {@code ClassResolver} to be supplied to a {@code Kryo} instance.  If this value is
          * not supplied then it will default to the {@link GryoClassResolver}. To ensure compatibility with Gryo it
          * is highly recommended that objects passed to this method extend that class.
@@ -578,112 +304,4 @@ public final class GryoMapper implements Mapper<Kryo> {
             typeRegistrations.add(newRegistrationBuilder.apply(registrationId));
         }
     }
-
-    private static class GryoTypeReg<T> implements TypeRegistration<T> {
-
-        private final Class<T> clazz;
-        private final Serializer<T> shadedSerializer;
-        private final SerializerShim<T> serializerShim;
-        private final Function<Kryo, Serializer> functionOfShadedKryo;
-        private final int id;
-
-        private GryoTypeReg(final Class<T> clazz,
-                            final Serializer<T> shadedSerializer,
-                            final SerializerShim<T> serializerShim,
-                            final Function<Kryo, Serializer> functionOfShadedKryo,
-                            final int id) {
-            this.clazz = clazz;
-            this.shadedSerializer = shadedSerializer;
-            this.serializerShim = serializerShim;
-            this.functionOfShadedKryo = functionOfShadedKryo;
-            this.id = id;
-
-            int serializerCount = 0;
-            if (null != this.shadedSerializer)
-                serializerCount++;
-            if (null != this.serializerShim)
-                serializerCount++;
-            if (null != this.functionOfShadedKryo)
-                serializerCount++;
-
-            if (1 < serializerCount) {
-                final String msg = String.format(
-                        "GryoTypeReg accepts at most one kind of serializer, but multiple " +
-                                "serializers were supplied for class %s (id %s).  " +
-                                "Shaded serializer: %s.  Shim serializer: %s.  Shaded serializer function: %s.",
-                        this.clazz.getCanonicalName(), id,
-                        this.shadedSerializer, this.serializerShim, this.functionOfShadedKryo);
-                throw new IllegalArgumentException(msg);
-            }
-        }
-
-        private static <T> GryoTypeReg<T> of(final Class<T> clazz, final int id) {
-            return new GryoTypeReg<>(clazz, null, null, null, id);
-        }
-
-        private static <T> GryoTypeReg<T> of(final Class<T> clazz, final int id, final Serializer<T> shadedSerializer) {
-            return new GryoTypeReg<>(clazz, shadedSerializer, null, null, id);
-        }
-
-        private static <T> GryoTypeReg<T> of(final Class<T> clazz, final int id, final SerializerShim<T> serializerShim) {
-            return new GryoTypeReg<>(clazz, null, serializerShim, null, id);
-        }
-
-        private static <T> GryoTypeReg<T> of(final Class clazz, final int id, final Function<Kryo, Serializer> fct) {
-            return new GryoTypeReg<>(clazz, null, null, fct, id);
-        }
-
-        @Override
-        public Serializer<T> getShadedSerializer() {
-            return shadedSerializer;
-        }
-
-        @Override
-        public SerializerShim<T> getSerializerShim() {
-            return serializerShim;
-        }
-
-        @Override
-        public Function<Kryo, Serializer> getFunctionOfShadedKryo() {
-            return functionOfShadedKryo;
-        }
-
-        @Override
-        public Class<T> getTargetClass() {
-            return clazz;
-        }
-
-        @Override
-        public int getId() {
-            return id;
-        }
-
-        @Override
-        public Kryo registerWith(final Kryo kryo) {
-            if (null != functionOfShadedKryo)
-                kryo.register(clazz, functionOfShadedKryo.apply(kryo), id);
-            else if (null != shadedSerializer)
-                kryo.register(clazz, shadedSerializer, id);
-            else if (null != serializerShim)
-                kryo.register(clazz, new ShadedSerializerAdapter<>(serializerShim), id);
-            else {
-                kryo.register(clazz, kryo.getDefaultSerializer(clazz), id);
-                // Suprisingly, the preceding call is not equivalent to
-                //   kryo.register(clazz, id);
-            }
-
-            return kryo;
-        }
-
-        @Override
-        public String toString() {
-            return new ToStringBuilder(this)
-                    .append("targetClass", clazz)
-                    .append("id", id)
-                    .append("shadedSerializer", shadedSerializer)
-                    .append("serializerShim", serializerShim)
-                    .append("functionOfShadedKryo", functionOfShadedKryo)
-                    .toString();
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/11cc9697/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoTypeReg.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoTypeReg.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoTypeReg.java
new file mode 100644
index 0000000..dd6dbdf
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoTypeReg.java
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.gryo;
+
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.SerializerShim;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.shaded.ShadedSerializerAdapter;
+import org.apache.tinkerpop.shaded.kryo.Kryo;
+import org.apache.tinkerpop.shaded.kryo.Serializer;
+
+import java.util.function.Function;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+final class GryoTypeReg<T> implements TypeRegistration<T> {
+
+    private final Class<T> clazz;
+    private final Serializer<T> shadedSerializer;
+    private final SerializerShim<T> serializerShim;
+    private final Function<Kryo, Serializer> functionOfShadedKryo;
+    private final int id;
+
+    private GryoTypeReg(final Class<T> clazz,
+                        final Serializer<T> shadedSerializer,
+                        final SerializerShim<T> serializerShim,
+                        final Function<Kryo, Serializer> functionOfShadedKryo,
+                        final int id) {
+        if (null == clazz) throw new IllegalArgumentException("clazz cannot be null");
+
+        this.clazz = clazz;
+        this.shadedSerializer = shadedSerializer;
+        this.serializerShim = serializerShim;
+        this.functionOfShadedKryo = functionOfShadedKryo;
+        this.id = id;
+
+        int serializerCount = 0;
+        if (null != this.shadedSerializer)
+            serializerCount++;
+        if (null != this.serializerShim)
+            serializerCount++;
+        if (null != this.functionOfShadedKryo)
+            serializerCount++;
+
+        if (1 < serializerCount) {
+            final String msg = String.format(
+                    "GryoTypeReg accepts at most one kind of serializer, but multiple " +
+                            "serializers were supplied for class %s (id %s).  " +
+                            "Shaded serializer: %s.  Shim serializer: %s.  Shaded serializer function: %s.",
+                    this.clazz.getCanonicalName(), id,
+                    this.shadedSerializer, this.serializerShim, this.functionOfShadedKryo);
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    static <T> GryoTypeReg<T> of(final Class<T> clazz, final int id) {
+        return new GryoTypeReg<>(clazz, null, null, null, id);
+    }
+
+    static <T> GryoTypeReg<T> of(final Class<T> clazz, final int id, final Serializer<T> shadedSerializer) {
+        return new GryoTypeReg<>(clazz, shadedSerializer, null, null, id);
+    }
+
+    static <T> GryoTypeReg<T> of(final Class<T> clazz, final int id, final SerializerShim<T> serializerShim) {
+        return new GryoTypeReg<>(clazz, null, serializerShim, null, id);
+    }
+
+    static <T> GryoTypeReg<T> of(final Class clazz, final int id, final Function<Kryo, Serializer> fct) {
+        return new GryoTypeReg<>(clazz, null, null, fct, id);
+    }
+
+    @Override
+    public Serializer<T> getShadedSerializer() {
+        return shadedSerializer;
+    }
+
+    @Override
+    public SerializerShim<T> getSerializerShim() {
+        return serializerShim;
+    }
+
+    @Override
+    public Function<Kryo, Serializer> getFunctionOfShadedKryo() {
+        return functionOfShadedKryo;
+    }
+
+    @Override
+    public Class<T> getTargetClass() {
+        return clazz;
+    }
+
+    @Override
+    public int getId() {
+        return id;
+    }
+
+    @Override
+    public Kryo registerWith(final Kryo kryo) {
+        if (null != functionOfShadedKryo)
+            kryo.register(clazz, functionOfShadedKryo.apply(kryo), id);
+        else if (null != shadedSerializer)
+            kryo.register(clazz, shadedSerializer, id);
+        else if (null != serializerShim)
+            kryo.register(clazz, new ShadedSerializerAdapter<>(serializerShim), id);
+        else {
+            kryo.register(clazz, kryo.getDefaultSerializer(clazz), id);
+            // Suprisingly, the preceding call is not equivalent to
+            //   kryo.register(clazz, id);
+        }
+
+        return kryo;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this)
+                .append("targetClass", clazz)
+                .append("id", id)
+                .append("shadedSerializer", shadedSerializer)
+                .append("serializerShim", serializerShim)
+                .append("functionOfShadedKryo", functionOfShadedKryo)
+                .toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/11cc9697/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
index 5a52290..0d380b1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
@@ -18,19 +18,317 @@
  */
 package org.apache.tinkerpop.gremlin.structure.io.gryo;
 
+import org.apache.tinkerpop.gremlin.process.computer.GraphFilter;
+import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
+import org.apache.tinkerpop.gremlin.process.computer.util.MapMemory;
+import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
+import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
+import org.apache.tinkerpop.gremlin.process.traversal.Contains;
+import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Order;
+import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Pop;
+import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupCountStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStepV3d0;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.TreeStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_P_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_P_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_OB_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.ImmutableMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
+import org.apache.tinkerpop.gremlin.structure.Column;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.SerializerShim;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPath;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferencePath;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceProperty;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
+import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraph;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphSerializer;
+import org.apache.tinkerpop.gremlin.util.function.HashSetSupplier;
+import org.apache.tinkerpop.gremlin.util.function.Lambda;
+import org.apache.tinkerpop.shaded.kryo.KryoSerializable;
+import org.apache.tinkerpop.shaded.kryo.serializers.JavaSerializer;
+import org.javatuples.Pair;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.net.URI;
+import java.nio.ByteBuffer;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Period;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Currency;
+import java.util.Date;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicLong;
+
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public enum GryoVersion {
-    V1_0("1.0");
+    V1_0("1.0", initV1d0Registrations());
 
     private final String versionNumber;
+    private final List<TypeRegistration<?>> registrations;
 
-    GryoVersion(final String versionNumber) {
+    GryoVersion(final String versionNumber, final List<TypeRegistration<?>> registrations) {
+        // Validate the default registrations
+        // For justification of these default registration rules, see TinkerPopKryoRegistrator
+        for (TypeRegistration<?> tr : registrations) {
+            if (tr.hasSerializer() /* no serializer is acceptable */ &&
+                    null == tr.getSerializerShim() /* a shim serializer is acceptable */ &&
+                    !(tr.getShadedSerializer() instanceof JavaSerializer) /* shaded JavaSerializer is acceptable */) {
+                // everything else is invalid
+                final String msg = String.format("The default GryoMapper type registration %s is invalid.  " +
+                                "It must supply either an implementation of %s or %s, but supplies neither.  " +
+                                "This is probably a bug in GryoMapper's default serialization class registrations.", tr,
+                        SerializerShim.class.getCanonicalName(), JavaSerializer.class.getCanonicalName());
+                throw new IllegalStateException(msg);
+            }
+        }
         this.versionNumber = versionNumber;
+        this.registrations = registrations;
+    }
+
+    public List<TypeRegistration<?>> cloneRegistrations() {
+        return new ArrayList<>(registrations);
+    }
+
+    public List<TypeRegistration<?>> getRegistrations() {
+        return Collections.unmodifiableList(registrations);
     }
 
     public String getVersion() {
         return versionNumber;
     }
+
+    public static List<TypeRegistration<?>> initV1d0Registrations() {
+        return new ArrayList<TypeRegistration<?>>() {{
+            add(GryoTypeReg.of(byte[].class, 25));
+            add(GryoTypeReg.of(char[].class, 26));
+            add(GryoTypeReg.of(short[].class, 27));
+            add(GryoTypeReg.of(int[].class, 28));
+            add(GryoTypeReg.of(long[].class, 29));
+            add(GryoTypeReg.of(float[].class, 30));
+            add(GryoTypeReg.of(double[].class, 31));
+            add(GryoTypeReg.of(String[].class, 32));
+            add(GryoTypeReg.of(Object[].class, 33));
+            add(GryoTypeReg.of(ArrayList.class, 10));
+            add(GryoTypeReg.of(Types.ARRAYS_AS_LIST, 134, new UtilSerializers.ArraysAsListSerializer()));
+            add(GryoTypeReg.of(BigInteger.class, 34));
+            add(GryoTypeReg.of(BigDecimal.class, 35));
+            add(GryoTypeReg.of(Calendar.class, 39));
+            add(GryoTypeReg.of(Class.class, 41, new UtilSerializers.ClassSerializer()));
+            add(GryoTypeReg.of(Collection.class, 37));
+            add(GryoTypeReg.of(Collections.EMPTY_LIST.getClass(), 51));
+            add(GryoTypeReg.of(Collections.EMPTY_MAP.getClass(), 52));
+            add(GryoTypeReg.of(Collections.EMPTY_SET.getClass(), 53));
+            add(GryoTypeReg.of(Collections.singleton(null).getClass(), 54));
+            add(GryoTypeReg.of(Collections.singletonList(null).getClass(), 24));
+            add(GryoTypeReg.of(Collections.singletonMap(null, null).getClass(), 23));
+            add(GryoTypeReg.of(Contains.class, 49));
+            add(GryoTypeReg.of(Currency.class, 40));
+            add(GryoTypeReg.of(Date.class, 38));
+            add(GryoTypeReg.of(Direction.class, 12));
+            add(GryoTypeReg.of(DetachedEdge.class, 21));
+            add(GryoTypeReg.of(DetachedVertexProperty.class, 20));
+            add(GryoTypeReg.of(DetachedProperty.class, 18));
+            add(GryoTypeReg.of(DetachedVertex.class, 19));
+            add(GryoTypeReg.of(DetachedPath.class, 60));
+            // skip 14
+            add(GryoTypeReg.of(EnumSet.class, 46));
+            add(GryoTypeReg.of(HashMap.class, 11));
+            add(GryoTypeReg.of(HashMap.Entry.class, 16));
+            add(GryoTypeReg.of(Types.HASH_MAP_NODE, 92));
+            add(GryoTypeReg.of(KryoSerializable.class, 36));
+            add(GryoTypeReg.of(LinkedHashMap.class, 47));
+            add(GryoTypeReg.of(LinkedHashSet.class, 71));
+            add(GryoTypeReg.of(LinkedList.class, 116));
+            add(GryoTypeReg.of(Types.LINKED_HASH_MAP_ENTRY_CLASS, 15));
+            add(GryoTypeReg.of(Locale.class, 22));
+            add(GryoTypeReg.of(StringBuffer.class, 43));
+            add(GryoTypeReg.of(StringBuilder.class, 44));
+            add(GryoTypeReg.of(T.class, 48));
+            add(GryoTypeReg.of(TimeZone.class, 42));
+            add(GryoTypeReg.of(TreeMap.class, 45));
+            add(GryoTypeReg.of(TreeSet.class, 50));
+            add(GryoTypeReg.of(UUID.class, 17, new UtilSerializers.UUIDSerializer()));
+            add(GryoTypeReg.of(URI.class, 72, new UtilSerializers.URISerializer()));
+            add(GryoTypeReg.of(VertexTerminator.class, 13));
+            add(GryoTypeReg.of(AbstractMap.SimpleEntry.class, 120));
+            add(GryoTypeReg.of(AbstractMap.SimpleImmutableEntry.class, 121));
+            add(GryoTypeReg.of(java.sql.Timestamp.class, 161));
+            add(GryoTypeReg.of(InetAddress.class, 162, new UtilSerializers.InetAddressSerializer()));
+            add(GryoTypeReg.of(ByteBuffer.class, 163, new UtilSerializers.ByteBufferSerializer()));  // ***LAST ID***
+
+            add(GryoTypeReg.of(ReferenceEdge.class, 81));
+            add(GryoTypeReg.of(ReferenceVertexProperty.class, 82));
+            add(GryoTypeReg.of(ReferenceProperty.class, 83));
+            add(GryoTypeReg.of(ReferenceVertex.class, 84));
+            add(GryoTypeReg.of(ReferencePath.class, 85));
+
+            add(GryoTypeReg.of(StarGraph.class, 86, new StarGraphSerializer(Direction.BOTH, new GraphFilter())));
+
+            add(GryoTypeReg.of(Edge.class, 65, new GryoSerializers.EdgeSerializer()));
+            add(GryoTypeReg.of(Vertex.class, 66, new GryoSerializers.VertexSerializer()));
+            add(GryoTypeReg.of(Property.class, 67, new GryoSerializers.PropertySerializer()));
+            add(GryoTypeReg.of(VertexProperty.class, 68, new GryoSerializers.VertexPropertySerializer()));
+            add(GryoTypeReg.of(Path.class, 59, new GryoSerializers.PathSerializer()));
+            // skip 55
+            add(GryoTypeReg.of(B_O_Traverser.class, 75));
+            add(GryoTypeReg.of(O_Traverser.class, 76));
+            add(GryoTypeReg.of(B_LP_O_P_S_SE_SL_Traverser.class, 77));
+            add(GryoTypeReg.of(B_O_S_SE_SL_Traverser.class, 78));
+            add(GryoTypeReg.of(B_LP_O_S_SE_SL_Traverser.class, 87));
+            add(GryoTypeReg.of(O_OB_S_SE_SL_Traverser.class, 89));
+            add(GryoTypeReg.of(LP_O_OB_S_SE_SL_Traverser.class, 90));
+            add(GryoTypeReg.of(LP_O_OB_P_S_SE_SL_Traverser.class, 91));
+            add(GryoTypeReg.of(DefaultRemoteTraverser.class, 123, new GryoSerializers.DefaultRemoteTraverserSerializer()));
+
+            add(GryoTypeReg.of(Bytecode.class, 122, new GryoSerializers.BytecodeSerializer()));
+            add(GryoTypeReg.of(P.class, 124, new GryoSerializers.PSerializer()));
+            add(GryoTypeReg.of(Lambda.class, 125, new GryoSerializers.LambdaSerializer()));
+            add(GryoTypeReg.of(Bytecode.Binding.class, 126, new GryoSerializers.BindingSerializer()));
+            add(GryoTypeReg.of(Order.class, 127));
+            add(GryoTypeReg.of(Scope.class, 128));
+            add(GryoTypeReg.of(AndP.class, 129, new GryoSerializers.AndPSerializer()));
+            add(GryoTypeReg.of(OrP.class, 130, new GryoSerializers.OrPSerializer()));
+            add(GryoTypeReg.of(VertexProperty.Cardinality.class, 131));
+            add(GryoTypeReg.of(Column.class, 132));
+            add(GryoTypeReg.of(Pop.class, 133));
+            add(GryoTypeReg.of(SackFunctions.Barrier.class, 135));
+            add(GryoTypeReg.of(TraversalOptionParent.Pick.class, 137));
+            add(GryoTypeReg.of(HashSetSupplier.class, 136, new UtilSerializers.HashSetSupplierSerializer()));
+
+            add(GryoTypeReg.of(TraverserSet.class, 58));
+            add(GryoTypeReg.of(Tree.class, 61));
+            add(GryoTypeReg.of(HashSet.class, 62));
+            add(GryoTypeReg.of(BulkSet.class, 64));
+            add(GryoTypeReg.of(MutableMetrics.class, 69));
+            add(GryoTypeReg.of(ImmutableMetrics.class, 115));
+            add(GryoTypeReg.of(DefaultTraversalMetrics.class, 70));
+            add(GryoTypeReg.of(MapMemory.class, 73));
+            add(GryoTypeReg.of(MapReduce.NullObject.class, 74));
+            add(GryoTypeReg.of(AtomicLong.class, 79));
+            add(GryoTypeReg.of(Pair.class, 88, new UtilSerializers.PairSerializer()));
+            add(GryoTypeReg.of(TraversalExplanation.class, 106, new JavaSerializer()));
+
+            add(GryoTypeReg.of(Duration.class, 93, new JavaTimeSerializers.DurationSerializer()));
+            add(GryoTypeReg.of(Instant.class, 94, new JavaTimeSerializers.InstantSerializer()));
+            add(GryoTypeReg.of(LocalDate.class, 95, new JavaTimeSerializers.LocalDateSerializer()));
+            add(GryoTypeReg.of(LocalDateTime.class, 96, new JavaTimeSerializers.LocalDateTimeSerializer()));
+            add(GryoTypeReg.of(LocalTime.class, 97, new JavaTimeSerializers.LocalTimeSerializer()));
+            add(GryoTypeReg.of(MonthDay.class, 98, new JavaTimeSerializers.MonthDaySerializer()));
+            add(GryoTypeReg.of(OffsetDateTime.class, 99, new JavaTimeSerializers.OffsetDateTimeSerializer()));
+            add(GryoTypeReg.of(OffsetTime.class, 100, new JavaTimeSerializers.OffsetTimeSerializer()));
+            add(GryoTypeReg.of(Period.class, 101, new JavaTimeSerializers.PeriodSerializer()));
+            add(GryoTypeReg.of(Year.class, 102, new JavaTimeSerializers.YearSerializer()));
+            add(GryoTypeReg.of(YearMonth.class, 103, new JavaTimeSerializers.YearMonthSerializer()));
+            add(GryoTypeReg.of(ZonedDateTime.class, 104, new JavaTimeSerializers.ZonedDateTimeSerializer()));
+            add(GryoTypeReg.of(ZoneOffset.class, 105, new JavaTimeSerializers.ZoneOffsetSerializer()));
+
+            add(GryoTypeReg.of(Operator.class, 107));
+            add(GryoTypeReg.of(FoldStep.FoldBiOperator.class, 108));
+            add(GryoTypeReg.of(GroupCountStep.GroupCountBiOperator.class, 109));
+            add(GryoTypeReg.of(GroupStep.GroupBiOperator.class, 117, new JavaSerializer())); // because they contain traversals
+            add(GryoTypeReg.of(MeanGlobalStep.MeanGlobalBiOperator.class, 110));
+            add(GryoTypeReg.of(MeanGlobalStep.MeanNumber.class, 111));
+            add(GryoTypeReg.of(TreeStep.TreeBiOperator.class, 112));
+            add(GryoTypeReg.of(GroupStepV3d0.GroupBiOperatorV3d0.class, 113));
+            add(GryoTypeReg.of(RangeGlobalStep.RangeBiOperator.class, 114));
+            add(GryoTypeReg.of(OrderGlobalStep.OrderBiOperator.class, 118, new JavaSerializer())); // because they contain traversals
+            add(GryoTypeReg.of(ProfileStep.ProfileBiOperator.class, 119));
+        }};
+    }
+
+    private static final class Types {
+        /**
+         * Map with one entry that is used so that it is possible to get the class of LinkedHashMap.Entry.
+         */
+        private static final LinkedHashMap m = new LinkedHashMap() {{
+            put("junk", "dummy");
+        }};
+
+        private static final Class ARRAYS_AS_LIST = Arrays.asList("dummy").getClass();
+
+        private static final Class LINKED_HASH_MAP_ENTRY_CLASS = m.entrySet().iterator().next().getClass();
+
+        /**
+         * The {@code HashMap$Node} class comes into serialization play when a {@code Map.entrySet()} is
+         * serialized.
+         */
+        private static final Class HASH_MAP_NODE;
+
+        static {
+            // have to instantiate this via reflection because it is a private inner class of HashMap
+            final String className = HashMap.class.getName() + "$Node";
+            try {
+                HASH_MAP_NODE = Class.forName(className);
+            } catch (Exception ex) {
+                throw new RuntimeException("Could not access " + className, ex);
+            }
+        }
+    }
 }


[2/2] tinkerpop git commit: Merge branch 'tp32'

Posted by sp...@apache.org.
Merge branch 'tp32'

Conflicts:
	gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java


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

Branch: refs/heads/master
Commit: e152a5050ec3871a3217677c9ef539576d74b5f7
Parents: 445bce2 11cc969
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Dec 21 12:19:53 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Dec 21 12:19:53 2016 -0500

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   2 +-
 .../gremlin/structure/io/gryo/GryoMapper.java   | 471 +------------------
 .../gremlin/structure/io/gryo/GryoTypeReg.java  | 140 ++++++
 .../gremlin/structure/io/gryo/GryoVersion.java  | 349 +++++++++++++-
 4 files changed, 509 insertions(+), 453 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e152a505/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e152a505/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
index 5a52290,0d380b1..7260478
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java
@@@ -18,6 -18,112 +18,134 @@@
   */
  package org.apache.tinkerpop.gremlin.structure.io.gryo;
  
+ import org.apache.tinkerpop.gremlin.process.computer.GraphFilter;
+ import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
++import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
++import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.GraphFilterStrategy;
+ import org.apache.tinkerpop.gremlin.process.computer.util.MapMemory;
+ import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
+ import org.apache.tinkerpop.gremlin.process.traversal.Contains;
+ import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+ import org.apache.tinkerpop.gremlin.process.traversal.Order;
+ import org.apache.tinkerpop.gremlin.process.traversal.P;
+ import org.apache.tinkerpop.gremlin.process.traversal.Path;
+ import org.apache.tinkerpop.gremlin.process.traversal.Pop;
+ import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
+ import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupCountStep;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStep;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStepV3d0;
++import org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanGlobalStep;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.map.TreeStep;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IncidentToAdjacentStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.InlineFilterStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchPredicateStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RangeByIsCountStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LambdaRestrictionStrategy;
++import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_P_S_SE_SL_Traverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_S_SE_SL_Traverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_P_S_SE_SL_Traverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_S_SE_SL_Traverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_OB_S_SE_SL_Traverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_Traverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.ImmutableMetrics;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
+ import org.apache.tinkerpop.gremlin.structure.Column;
+ import org.apache.tinkerpop.gremlin.structure.Direction;
+ import org.apache.tinkerpop.gremlin.structure.Edge;
+ import org.apache.tinkerpop.gremlin.structure.Property;
+ import org.apache.tinkerpop.gremlin.structure.T;
+ import org.apache.tinkerpop.gremlin.structure.Vertex;
+ import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+ import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.SerializerShim;
+ import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+ import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPath;
+ import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
+ import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
+ import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+ import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge;
+ import org.apache.tinkerpop.gremlin.structure.util.reference.ReferencePath;
+ import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceProperty;
+ import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
+ import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertexProperty;
+ import org.apache.tinkerpop.gremlin.structure.util.star.StarGraph;
+ import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphSerializer;
+ import org.apache.tinkerpop.gremlin.util.function.HashSetSupplier;
+ import org.apache.tinkerpop.gremlin.util.function.Lambda;
+ import org.apache.tinkerpop.shaded.kryo.KryoSerializable;
+ import org.apache.tinkerpop.shaded.kryo.serializers.JavaSerializer;
+ import org.javatuples.Pair;
+ 
+ import java.math.BigDecimal;
+ import java.math.BigInteger;
+ import java.net.InetAddress;
+ import java.net.URI;
+ import java.nio.ByteBuffer;
+ import java.time.Duration;
+ import java.time.Instant;
+ import java.time.LocalDate;
+ import java.time.LocalDateTime;
+ import java.time.LocalTime;
+ import java.time.MonthDay;
+ import java.time.OffsetDateTime;
+ import java.time.OffsetTime;
+ import java.time.Period;
+ import java.time.Year;
+ import java.time.YearMonth;
+ import java.time.ZoneOffset;
+ import java.time.ZonedDateTime;
+ import java.util.AbstractMap;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Calendar;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Currency;
+ import java.util.Date;
+ import java.util.EnumSet;
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.LinkedHashMap;
+ import java.util.LinkedHashSet;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Locale;
+ import java.util.TimeZone;
+ import java.util.TreeMap;
+ import java.util.TreeSet;
+ import java.util.UUID;
+ import java.util.concurrent.atomic.AtomicLong;
+ 
  /**
   * @author Stephen Mallette (http://stephen.genoprime.com)
   */
@@@ -33,4 -163,172 +185,197 @@@ public enum GryoVersion 
      public String getVersion() {
          return versionNumber;
      }
+ 
+     public static List<TypeRegistration<?>> initV1d0Registrations() {
+         return new ArrayList<TypeRegistration<?>>() {{
+             add(GryoTypeReg.of(byte[].class, 25));
+             add(GryoTypeReg.of(char[].class, 26));
+             add(GryoTypeReg.of(short[].class, 27));
+             add(GryoTypeReg.of(int[].class, 28));
+             add(GryoTypeReg.of(long[].class, 29));
+             add(GryoTypeReg.of(float[].class, 30));
+             add(GryoTypeReg.of(double[].class, 31));
+             add(GryoTypeReg.of(String[].class, 32));
+             add(GryoTypeReg.of(Object[].class, 33));
+             add(GryoTypeReg.of(ArrayList.class, 10));
+             add(GryoTypeReg.of(Types.ARRAYS_AS_LIST, 134, new UtilSerializers.ArraysAsListSerializer()));
+             add(GryoTypeReg.of(BigInteger.class, 34));
+             add(GryoTypeReg.of(BigDecimal.class, 35));
+             add(GryoTypeReg.of(Calendar.class, 39));
+             add(GryoTypeReg.of(Class.class, 41, new UtilSerializers.ClassSerializer()));
+             add(GryoTypeReg.of(Collection.class, 37));
+             add(GryoTypeReg.of(Collections.EMPTY_LIST.getClass(), 51));
+             add(GryoTypeReg.of(Collections.EMPTY_MAP.getClass(), 52));
+             add(GryoTypeReg.of(Collections.EMPTY_SET.getClass(), 53));
+             add(GryoTypeReg.of(Collections.singleton(null).getClass(), 54));
+             add(GryoTypeReg.of(Collections.singletonList(null).getClass(), 24));
+             add(GryoTypeReg.of(Collections.singletonMap(null, null).getClass(), 23));
+             add(GryoTypeReg.of(Contains.class, 49));
+             add(GryoTypeReg.of(Currency.class, 40));
+             add(GryoTypeReg.of(Date.class, 38));
+             add(GryoTypeReg.of(Direction.class, 12));
+             add(GryoTypeReg.of(DetachedEdge.class, 21));
+             add(GryoTypeReg.of(DetachedVertexProperty.class, 20));
+             add(GryoTypeReg.of(DetachedProperty.class, 18));
+             add(GryoTypeReg.of(DetachedVertex.class, 19));
+             add(GryoTypeReg.of(DetachedPath.class, 60));
+             // skip 14
+             add(GryoTypeReg.of(EnumSet.class, 46));
+             add(GryoTypeReg.of(HashMap.class, 11));
+             add(GryoTypeReg.of(HashMap.Entry.class, 16));
+             add(GryoTypeReg.of(Types.HASH_MAP_NODE, 92));
+             add(GryoTypeReg.of(KryoSerializable.class, 36));
+             add(GryoTypeReg.of(LinkedHashMap.class, 47));
+             add(GryoTypeReg.of(LinkedHashSet.class, 71));
+             add(GryoTypeReg.of(LinkedList.class, 116));
+             add(GryoTypeReg.of(Types.LINKED_HASH_MAP_ENTRY_CLASS, 15));
+             add(GryoTypeReg.of(Locale.class, 22));
+             add(GryoTypeReg.of(StringBuffer.class, 43));
+             add(GryoTypeReg.of(StringBuilder.class, 44));
+             add(GryoTypeReg.of(T.class, 48));
+             add(GryoTypeReg.of(TimeZone.class, 42));
+             add(GryoTypeReg.of(TreeMap.class, 45));
+             add(GryoTypeReg.of(TreeSet.class, 50));
+             add(GryoTypeReg.of(UUID.class, 17, new UtilSerializers.UUIDSerializer()));
+             add(GryoTypeReg.of(URI.class, 72, new UtilSerializers.URISerializer()));
+             add(GryoTypeReg.of(VertexTerminator.class, 13));
+             add(GryoTypeReg.of(AbstractMap.SimpleEntry.class, 120));
+             add(GryoTypeReg.of(AbstractMap.SimpleImmutableEntry.class, 121));
+             add(GryoTypeReg.of(java.sql.Timestamp.class, 161));
+             add(GryoTypeReg.of(InetAddress.class, 162, new UtilSerializers.InetAddressSerializer()));
 -            add(GryoTypeReg.of(ByteBuffer.class, 163, new UtilSerializers.ByteBufferSerializer()));  // ***LAST ID***
++            add(GryoTypeReg.of(ByteBuffer.class, 163, new UtilSerializers.ByteBufferSerializer()));
+ 
+             add(GryoTypeReg.of(ReferenceEdge.class, 81));
+             add(GryoTypeReg.of(ReferenceVertexProperty.class, 82));
+             add(GryoTypeReg.of(ReferenceProperty.class, 83));
+             add(GryoTypeReg.of(ReferenceVertex.class, 84));
+             add(GryoTypeReg.of(ReferencePath.class, 85));
+ 
+             add(GryoTypeReg.of(StarGraph.class, 86, new StarGraphSerializer(Direction.BOTH, new GraphFilter())));
+ 
+             add(GryoTypeReg.of(Edge.class, 65, new GryoSerializers.EdgeSerializer()));
+             add(GryoTypeReg.of(Vertex.class, 66, new GryoSerializers.VertexSerializer()));
+             add(GryoTypeReg.of(Property.class, 67, new GryoSerializers.PropertySerializer()));
+             add(GryoTypeReg.of(VertexProperty.class, 68, new GryoSerializers.VertexPropertySerializer()));
+             add(GryoTypeReg.of(Path.class, 59, new GryoSerializers.PathSerializer()));
+             // skip 55
+             add(GryoTypeReg.of(B_O_Traverser.class, 75));
+             add(GryoTypeReg.of(O_Traverser.class, 76));
+             add(GryoTypeReg.of(B_LP_O_P_S_SE_SL_Traverser.class, 77));
+             add(GryoTypeReg.of(B_O_S_SE_SL_Traverser.class, 78));
+             add(GryoTypeReg.of(B_LP_O_S_SE_SL_Traverser.class, 87));
+             add(GryoTypeReg.of(O_OB_S_SE_SL_Traverser.class, 89));
+             add(GryoTypeReg.of(LP_O_OB_S_SE_SL_Traverser.class, 90));
+             add(GryoTypeReg.of(LP_O_OB_P_S_SE_SL_Traverser.class, 91));
+             add(GryoTypeReg.of(DefaultRemoteTraverser.class, 123, new GryoSerializers.DefaultRemoteTraverserSerializer()));
+ 
+             add(GryoTypeReg.of(Bytecode.class, 122, new GryoSerializers.BytecodeSerializer()));
+             add(GryoTypeReg.of(P.class, 124, new GryoSerializers.PSerializer()));
+             add(GryoTypeReg.of(Lambda.class, 125, new GryoSerializers.LambdaSerializer()));
+             add(GryoTypeReg.of(Bytecode.Binding.class, 126, new GryoSerializers.BindingSerializer()));
+             add(GryoTypeReg.of(Order.class, 127));
+             add(GryoTypeReg.of(Scope.class, 128));
+             add(GryoTypeReg.of(AndP.class, 129, new GryoSerializers.AndPSerializer()));
+             add(GryoTypeReg.of(OrP.class, 130, new GryoSerializers.OrPSerializer()));
+             add(GryoTypeReg.of(VertexProperty.Cardinality.class, 131));
+             add(GryoTypeReg.of(Column.class, 132));
+             add(GryoTypeReg.of(Pop.class, 133));
+             add(GryoTypeReg.of(SackFunctions.Barrier.class, 135));
+             add(GryoTypeReg.of(TraversalOptionParent.Pick.class, 137));
+             add(GryoTypeReg.of(HashSetSupplier.class, 136, new UtilSerializers.HashSetSupplierSerializer()));
+ 
++            add(GryoTypeReg.of(ConnectiveStrategy.class, 138));
++            add(GryoTypeReg.of(HaltedTraverserStrategy.class, 139));
++            add(GryoTypeReg.of(PartitionStrategy.class, 140, new JavaSerializer()));
++            add(GryoTypeReg.of(SubgraphStrategy.class, 141, new JavaSerializer()));
++            add(GryoTypeReg.of(VertexProgramStrategy.class, 142, new JavaSerializer()));
++            add(GryoTypeReg.of(MatchAlgorithmStrategy.class, 143));
++            add(GryoTypeReg.of(MatchStep.GreedyMatchAlgorithm.class, 144));
++            add(GryoTypeReg.of(AdjacentToIncidentStrategy.class, 145));
++            add(GryoTypeReg.of(FilterRankingStrategy.class, 146));
++            add(GryoTypeReg.of(IdentityRemovalStrategy.class, 147));
++            add(GryoTypeReg.of(IncidentToAdjacentStrategy.class, 148));
++            add(GryoTypeReg.of(InlineFilterStrategy.class, 149));
++            add(GryoTypeReg.of(LazyBarrierStrategy.class, 150));
++            add(GryoTypeReg.of(MatchPredicateStrategy.class, 151));
++            add(GryoTypeReg.of(OrderLimitStrategy.class, 152));
++            add(GryoTypeReg.of(PathProcessorStrategy.class, 153));
++            add(GryoTypeReg.of(PathRetractionStrategy.class, 154));
++            add(GryoTypeReg.of(RangeByIsCountStrategy.class, 155));
++            add(GryoTypeReg.of(RepeatUnrollStrategy.class, 156));
++            add(GryoTypeReg.of(GraphFilterStrategy.class, 157));
++            add(GryoTypeReg.of(LambdaRestrictionStrategy.class, 158));
++            add(GryoTypeReg.of(ReadOnlyStrategy.class, 159));
++            add(GryoTypeReg.of(MatchStep.CountMatchAlgorithm.class, 160));
++            add(GryoTypeReg.of(MatchStep.GreedyMatchAlgorithm.class, 164)); // ### LAST_ID
++
+             add(GryoTypeReg.of(TraverserSet.class, 58));
+             add(GryoTypeReg.of(Tree.class, 61));
+             add(GryoTypeReg.of(HashSet.class, 62));
+             add(GryoTypeReg.of(BulkSet.class, 64));
+             add(GryoTypeReg.of(MutableMetrics.class, 69));
+             add(GryoTypeReg.of(ImmutableMetrics.class, 115));
+             add(GryoTypeReg.of(DefaultTraversalMetrics.class, 70));
+             add(GryoTypeReg.of(MapMemory.class, 73));
+             add(GryoTypeReg.of(MapReduce.NullObject.class, 74));
+             add(GryoTypeReg.of(AtomicLong.class, 79));
+             add(GryoTypeReg.of(Pair.class, 88, new UtilSerializers.PairSerializer()));
+             add(GryoTypeReg.of(TraversalExplanation.class, 106, new JavaSerializer()));
+ 
+             add(GryoTypeReg.of(Duration.class, 93, new JavaTimeSerializers.DurationSerializer()));
+             add(GryoTypeReg.of(Instant.class, 94, new JavaTimeSerializers.InstantSerializer()));
+             add(GryoTypeReg.of(LocalDate.class, 95, new JavaTimeSerializers.LocalDateSerializer()));
+             add(GryoTypeReg.of(LocalDateTime.class, 96, new JavaTimeSerializers.LocalDateTimeSerializer()));
+             add(GryoTypeReg.of(LocalTime.class, 97, new JavaTimeSerializers.LocalTimeSerializer()));
+             add(GryoTypeReg.of(MonthDay.class, 98, new JavaTimeSerializers.MonthDaySerializer()));
+             add(GryoTypeReg.of(OffsetDateTime.class, 99, new JavaTimeSerializers.OffsetDateTimeSerializer()));
+             add(GryoTypeReg.of(OffsetTime.class, 100, new JavaTimeSerializers.OffsetTimeSerializer()));
+             add(GryoTypeReg.of(Period.class, 101, new JavaTimeSerializers.PeriodSerializer()));
+             add(GryoTypeReg.of(Year.class, 102, new JavaTimeSerializers.YearSerializer()));
+             add(GryoTypeReg.of(YearMonth.class, 103, new JavaTimeSerializers.YearMonthSerializer()));
+             add(GryoTypeReg.of(ZonedDateTime.class, 104, new JavaTimeSerializers.ZonedDateTimeSerializer()));
+             add(GryoTypeReg.of(ZoneOffset.class, 105, new JavaTimeSerializers.ZoneOffsetSerializer()));
+ 
+             add(GryoTypeReg.of(Operator.class, 107));
+             add(GryoTypeReg.of(FoldStep.FoldBiOperator.class, 108));
+             add(GryoTypeReg.of(GroupCountStep.GroupCountBiOperator.class, 109));
+             add(GryoTypeReg.of(GroupStep.GroupBiOperator.class, 117, new JavaSerializer())); // because they contain traversals
+             add(GryoTypeReg.of(MeanGlobalStep.MeanGlobalBiOperator.class, 110));
+             add(GryoTypeReg.of(MeanGlobalStep.MeanNumber.class, 111));
+             add(GryoTypeReg.of(TreeStep.TreeBiOperator.class, 112));
+             add(GryoTypeReg.of(GroupStepV3d0.GroupBiOperatorV3d0.class, 113));
+             add(GryoTypeReg.of(RangeGlobalStep.RangeBiOperator.class, 114));
+             add(GryoTypeReg.of(OrderGlobalStep.OrderBiOperator.class, 118, new JavaSerializer())); // because they contain traversals
+             add(GryoTypeReg.of(ProfileStep.ProfileBiOperator.class, 119));
+         }};
+     }
+ 
+     private static final class Types {
+         /**
+          * Map with one entry that is used so that it is possible to get the class of LinkedHashMap.Entry.
+          */
+         private static final LinkedHashMap m = new LinkedHashMap() {{
+             put("junk", "dummy");
+         }};
+ 
+         private static final Class ARRAYS_AS_LIST = Arrays.asList("dummy").getClass();
+ 
+         private static final Class LINKED_HASH_MAP_ENTRY_CLASS = m.entrySet().iterator().next().getClass();
+ 
+         /**
+          * The {@code HashMap$Node} class comes into serialization play when a {@code Map.entrySet()} is
+          * serialized.
+          */
+         private static final Class HASH_MAP_NODE;
+ 
+         static {
+             // have to instantiate this via reflection because it is a private inner class of HashMap
+             final String className = HashMap.class.getName() + "$Node";
+             try {
+                 HASH_MAP_NODE = Class.forName(className);
+             } catch (Exception ex) {
+                 throw new RuntimeException("Could not access " + className, ex);
+             }
+         }
+     }
  }