in gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializerV4.java [117:177]
protected Class getClassFromObject(final Object o) {
final Class c = o.getClass();
if (classMap.containsKey(c))
return classMap.get(c);
final Class mapped;
if (Map.class.isAssignableFrom(c)) {
if (Tree.class.isAssignableFrom(c))
mapped = Tree.class;
else
mapped = Map.class;
} else if (List.class.isAssignableFrom(c))
mapped = List.class;
else if (Set.class.isAssignableFrom(c) && !BulkSet.class.isAssignableFrom(c)) // we have special handling of BulkSet
mapped = Set.class;
else if (Vertex.class.isAssignableFrom(c))
mapped = Vertex.class;
else if (Edge.class.isAssignableFrom(c))
mapped = Edge.class;
else if (Path.class.isAssignableFrom(c))
mapped = Path.class;
else if (VertexProperty.class.isAssignableFrom(c))
mapped = VertexProperty.class;
else if (Metrics.class.isAssignableFrom(c))
mapped = Metrics.class;
else if (TraversalMetrics.class.isAssignableFrom(c))
mapped = TraversalMetrics.class;
else if (Property.class.isAssignableFrom(c))
mapped = Property.class;
else if (ByteBuffer.class.isAssignableFrom(c))
mapped = ByteBuffer.class;
else if (InetAddress.class.isAssignableFrom(c))
mapped = InetAddress.class;
else if (Lambda.class.isAssignableFrom(c))
mapped = Lambda.class;
else if (VertexProperty.Cardinality.class.isAssignableFrom(c))
mapped = VertexProperty.Cardinality.class;
else if (Column.class.isAssignableFrom(c))
mapped = Column.class;
else if (Direction.class.isAssignableFrom(c))
mapped = Direction.class;
else if (Operator.class.isAssignableFrom(c))
mapped = Operator.class;
else if (Order.class.isAssignableFrom(c))
mapped = Order.class;
else if (Pop.class.isAssignableFrom(c))
mapped = Pop.class;
else if (SackFunctions.Barrier.class.isAssignableFrom(c))
mapped = SackFunctions.Barrier.class;
else if (Pick.class.isAssignableFrom(c))
mapped = Pick.class;
else if (Scope.class.isAssignableFrom(c))
mapped = Scope.class;
else if (T.class.isAssignableFrom(c))
mapped = T.class;
else
mapped = c;
classMap.put(c, mapped);
return mapped;
}