@Override
            public T read() throws IOException {
              try {
                if (constructor == null)  {
                  // first element
                  ExternalizableGraphElement factorData = readGraphElement();
                  constructor = ourLookup.findConstructor(elemType, MethodType.methodType(void.class, factorData.getClass(), GraphDataInput.class)).bindTo(factorData);
                }
                //noinspection unchecked
                return GraphDataInputImpl.this.processLoadedGraphElement((T)constructor.invoke(GraphDataInputImpl.this));
              }
              catch (IOException e) {
                throw e;
              }
              catch (Throwable e) {
                throw new IOException(e);
              }
            }
@Override
            public T read()