@Override
    public <I extends InputShim> StarGraph read(final KryoShim<I, ?> kryo, final I input, final Class<StarGraph> clazz) {
        final StarGraph starGraph = StarGraph.open();
        input.readByte();  // version field ignored for now - for future use with backward compatibility
        starGraph.edgeProperties = kryo.readObjectOrNull(input, HashMap.class);
        starGraph.metaProperties = kryo.readObjectOrNull(input, HashMap.class);
        starGraph.addVertex(T.id, kryo.readClassAndObject(input), T.label, kryo.readObject(input, String.class));
        readEdges(kryo, input, starGraph, Direction.IN);
        readEdges(kryo, input, starGraph, Direction.OUT);
        if (kryo.readObject(input, Boolean.class)) {
            final int numberOfUniqueKeys = kryo.readObject(input, Integer.class);
            for (int i = 0; i < numberOfUniqueKeys; i++) {
                final String vertexPropertyKey = kryo.readObject(input, String.class);
                final int numberOfVertexPropertiesWithKey = kryo.readObject(input, Integer.class);
                for (int j = 0; j < numberOfVertexPropertiesWithKey; j++) {
                    final Object id = kryo.readClassAndObject(input);
                    final Object value = kryo.readClassAndObject(input);
                    starGraph.starVertex.property(VertexProperty.Cardinality.list, vertexPropertyKey, value, T.id, id);
                }
            }
        }
        return this.graphFilter.hasFilter() ? starGraph.applyGraphFilter(this.graphFilter).orElse(null) : starGraph;
    }
If the returned {@link StarGraph} is null, that means that the {@link GraphFilter} filtered the vertex.
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphSerializer.java