diff --git a/runtime/src/main/java/org/capnproto/StructList.java b/runtime/src/main/java/org/capnproto/StructList.java index 5a6c336..99ed666 100644 --- a/runtime/src/main/java/org/capnproto/StructList.java +++ b/runtime/src/main/java/org/capnproto/StructList.java @@ -37,13 +37,12 @@ public final class StructList { } public final Builder fromPointerBuilder(PointerBuilder builder, SegmentReader defaultSegment, int defaultOffset) { - throw new Error(); - /* return WireHelpers.getWritableStructListPointer(this, - builder.pointer, - builder.segment, - FieldSize.POINTER, - defaultSegment, - defaultOffset,0); */ + return WireHelpers.getWritableStructListPointer(this, + builder.pointer, + builder.segment, + factory.structSize(), + defaultSegment, + defaultOffset); } public final Builder initFromPointerBuilder(PointerBuilder builder, diff --git a/runtime/src/main/java/org/capnproto/WireHelpers.java b/runtime/src/main/java/org/capnproto/WireHelpers.java index cfb7c44..b015e61 100644 --- a/runtime/src/main/java/org/capnproto/WireHelpers.java +++ b/runtime/src/main/java/org/capnproto/WireHelpers.java @@ -296,6 +296,15 @@ final class WireHelpers { } } + static T getWritableStructListPointer(FromPointerBuilder factory, + int origRefOffset, + SegmentBuilder origSegment, + StructSize elementSize, + SegmentReader defaultSegment, + int defaultOffset) { + throw new Error("getWritableStructListPointer is unimplemented"); + } + // size is in bytes static Text.Builder initTextPointer(int refOffset, SegmentBuilder segment, @@ -435,9 +444,11 @@ final class WireHelpers { long ref = WirePointer.get(segment.buffer, refOffset); if (WirePointer.isNull(ref)) { if (defaultSegment == null) { - throw new Error();//return new StructReader(); + return factory.fromStructReader(SegmentReader.EMPTY, 0, 0, 0, (short) 0, (byte) 0, 0x7fffffff); } else { - return (new PointerReader(defaultSegment, defaultOffset, 0x7fffffff)).getStruct(factory); + segment = defaultSegment; + refOffset = defaultOffset; + ref = WirePointer.get(segment.buffer, refOffset); } }