From 59701de8482e3a7fc14acc9a332ed78e9cfbe879 Mon Sep 17 00:00:00 2001 From: Vaci Date: Sun, 6 Mar 2022 13:57:25 +0000 Subject: [PATCH 1/6] Provide fallback to original interface. --- runtime/src/main/java/org/capnproto/SetPointerBuilder.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/runtime/src/main/java/org/capnproto/SetPointerBuilder.java b/runtime/src/main/java/org/capnproto/SetPointerBuilder.java index c1566e13..cdc7f72d 100644 --- a/runtime/src/main/java/org/capnproto/SetPointerBuilder.java +++ b/runtime/src/main/java/org/capnproto/SetPointerBuilder.java @@ -22,5 +22,8 @@ package org.capnproto; public interface SetPointerBuilder { + default void setPointerBuilder(SegmentBuilder segment, int pointer, Reader value) { + setPointerBuilder(segment, null, pointer, value); + } void setPointerBuilder(SegmentBuilder segment, CapTableBuilder capTable, int pointer, Reader value); } From 4171577bf0659bdcb133b9e522e578e0a002265c Mon Sep 17 00:00:00 2001 From: Vaci Koblizek Date: Sun, 6 Mar 2022 14:08:13 +0000 Subject: [PATCH 2/6] Move NULL and BROKEN brands to ClientHook --- runtime/src/main/java/org/capnproto/Capability.java | 6 +++--- runtime/src/main/java/org/capnproto/ClientHook.java | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/Capability.java b/runtime/src/main/java/org/capnproto/Capability.java index 8fc0f7a5..722f4781 100644 --- a/runtime/src/main/java/org/capnproto/Capability.java +++ b/runtime/src/main/java/org/capnproto/Capability.java @@ -5,10 +5,10 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; -public final class Capability { +import static org.capnproto.ClientHook.BROKEN_CAPABILITY_BRAND; +import static org.capnproto.ClientHook.NULL_CAPABILITY_BRAND; - static final Object NULL_CAPABILITY_BRAND = new Object(); - static final Object BROKEN_CAPABILITY_BRAND = new Object(); +public final class Capability { public static class BuilderContext { public CapTableBuilder capTable; diff --git a/runtime/src/main/java/org/capnproto/ClientHook.java b/runtime/src/main/java/org/capnproto/ClientHook.java index d04e125c..5f4cdb4d 100644 --- a/runtime/src/main/java/org/capnproto/ClientHook.java +++ b/runtime/src/main/java/org/capnproto/ClientHook.java @@ -5,6 +5,8 @@ public interface ClientHook { + static final Object NULL_CAPABILITY_BRAND = new Object(); + static final Object BROKEN_CAPABILITY_BRAND = new Object(); /** * Start a new call, allowing the client to allocate request/response objects as it sees fit. * This version is used when calls are made from application code in the local process. @@ -70,14 +72,14 @@ default CompletableFuture whenResolved() { * reading a null pointer out of a Cap'n Proto message. */ default boolean isNull() { - return getBrand() == Capability.NULL_CAPABILITY_BRAND; + return getBrand() == NULL_CAPABILITY_BRAND; } /** * Returns true if the capability was created by newBrokenCap(). */ default boolean isError() { - return getBrand() == Capability.BROKEN_CAPABILITY_BRAND; + return getBrand() == BROKEN_CAPABILITY_BRAND; } /** From 8c6b9c8caae7493146599fe43dc10b4699060750 Mon Sep 17 00:00:00 2001 From: Vaci Date: Sun, 6 Mar 2022 14:33:14 +0000 Subject: [PATCH 3/6] Avoid use of var --- runtime/src/main/java/org/capnproto/AnyPointer.java | 8 ++++---- runtime/src/main/java/org/capnproto/ExportTable.java | 6 +++--- runtime/src/main/java/org/capnproto/ImportTable.java | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/AnyPointer.java b/runtime/src/main/java/org/capnproto/AnyPointer.java index 8f750cb0..23a034fd 100644 --- a/runtime/src/main/java/org/capnproto/AnyPointer.java +++ b/runtime/src/main/java/org/capnproto/AnyPointer.java @@ -67,7 +67,7 @@ public Reader(SegmentReader segment, CapTableReader capTable, int pointer, int n } final Reader imbue(CapTableReader capTable) { - var result = new Reader(segment, pointer, nestingLimit); + Reader result = new Reader(segment, pointer, nestingLimit); result.capTable = capTable; return result; } @@ -83,9 +83,9 @@ public final T getAs(FromPointerReader factory) { public final ClientHook getPipelinedCap(short[] ops) { AnyPointer.Reader any = this; - for (var pointerIndex: ops) { + for (short pointerIndex: ops) { if (pointerIndex >= 0) { - var reader = WireHelpers.readStructPointer(any.segment, any.capTable, any.pointer, null, 0, any.nestingLimit); + StructReader reader = WireHelpers.readStructPointer(any.segment, any.capTable, any.pointer, null, 0, any.nestingLimit); any = reader._getPointerField(AnyPointer.factory, pointerIndex); } } @@ -176,7 +176,7 @@ public ClientHook asCap() { } public Pipeline getPointerField(short pointerIndex) { - var newOps = new short[this.ops.length + 1]; + short[] newOps = new short[this.ops.length + 1]; System.arraycopy(this.ops, 0, newOps, 0, this.ops.length); newOps[this.ops.length] = pointerIndex; return new Pipeline(this.hook, newOps); diff --git a/runtime/src/main/java/org/capnproto/ExportTable.java b/runtime/src/main/java/org/capnproto/ExportTable.java index dcd7730d..8cb70896 100644 --- a/runtime/src/main/java/org/capnproto/ExportTable.java +++ b/runtime/src/main/java/org/capnproto/ExportTable.java @@ -19,7 +19,7 @@ public T find(int id) { } public T erase(int id, T entry) { - var value = slots.get(id); + T value = slots.get(id); if (value == entry) { freeIds.add(id); return slots.remove(id); @@ -30,8 +30,8 @@ public T erase(int id, T entry) { public T next() { int id = freeIds.isEmpty() ? max++ : freeIds.remove(); - var value = newExportable(id); - var prev = slots.put(id, value); + T value = newExportable(id); + T prev = slots.put(id, value); assert prev == null; return value; } diff --git a/runtime/src/main/java/org/capnproto/ImportTable.java b/runtime/src/main/java/org/capnproto/ImportTable.java index 69050607..970dee8f 100644 --- a/runtime/src/main/java/org/capnproto/ImportTable.java +++ b/runtime/src/main/java/org/capnproto/ImportTable.java @@ -19,7 +19,7 @@ public T find(int id) { } public T erase(int id, T entry) { - var removed = slots.remove(id, entry); + boolean removed = slots.remove(id, entry); assert removed; return entry; } From f510bd19aa87323dc76e8d895da9059d8fccd6d0 Mon Sep 17 00:00:00 2001 From: Vaci Koblizek Date: Sun, 6 Mar 2022 16:46:39 +0000 Subject: [PATCH 4/6] move captable contexts --- runtime/src/main/java/org/capnproto/AnyPointer.java | 4 ++-- runtime/src/main/java/org/capnproto/CapTableBuilder.java | 5 +++++ runtime/src/main/java/org/capnproto/CapTableReader.java | 5 +++++ runtime/src/main/java/org/capnproto/ListBuilder.java | 8 ++++---- runtime/src/main/java/org/capnproto/ListReader.java | 8 ++++---- runtime/src/main/java/org/capnproto/StructBuilder.java | 8 ++++---- runtime/src/main/java/org/capnproto/StructReader.java | 8 ++++---- 7 files changed, 28 insertions(+), 18 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/AnyPointer.java b/runtime/src/main/java/org/capnproto/AnyPointer.java index 23a034fd..1094d3ac 100644 --- a/runtime/src/main/java/org/capnproto/AnyPointer.java +++ b/runtime/src/main/java/org/capnproto/AnyPointer.java @@ -48,7 +48,7 @@ public void setPointerBuilder(SegmentBuilder segment, CapTableBuilder capTable, } public static final Factory factory = new Factory(); - public final static class Reader extends Capability.ReaderContext { + public final static class Reader extends CapTableReader.ReaderContext { final SegmentReader segment; final int pointer; // offset in words final int nestingLimit; @@ -93,7 +93,7 @@ public final ClientHook getPipelinedCap(short[] ops) { } } - public static final class Builder extends Capability.BuilderContext { + public static final class Builder extends CapTableBuilder.BuilderContext { final SegmentBuilder segment; final int pointer; diff --git a/runtime/src/main/java/org/capnproto/CapTableBuilder.java b/runtime/src/main/java/org/capnproto/CapTableBuilder.java index 01e68255..8f137a70 100644 --- a/runtime/src/main/java/org/capnproto/CapTableBuilder.java +++ b/runtime/src/main/java/org/capnproto/CapTableBuilder.java @@ -1,6 +1,11 @@ package org.capnproto; public interface CapTableBuilder extends CapTableReader { + + class BuilderContext { + public CapTableBuilder capTable; + } + int injectCap(ClientHook cap); void dropCap(int index); diff --git a/runtime/src/main/java/org/capnproto/CapTableReader.java b/runtime/src/main/java/org/capnproto/CapTableReader.java index e8f5be5e..b6d6f8de 100644 --- a/runtime/src/main/java/org/capnproto/CapTableReader.java +++ b/runtime/src/main/java/org/capnproto/CapTableReader.java @@ -1,5 +1,10 @@ package org.capnproto; public interface CapTableReader { + + class ReaderContext { + public CapTableReader capTable; + } + ClientHook extractCap(int index); } diff --git a/runtime/src/main/java/org/capnproto/ListBuilder.java b/runtime/src/main/java/org/capnproto/ListBuilder.java index 19f3c59c..9d200189 100644 --- a/runtime/src/main/java/org/capnproto/ListBuilder.java +++ b/runtime/src/main/java/org/capnproto/ListBuilder.java @@ -23,7 +23,7 @@ import java.util.List; -public class ListBuilder extends Capability.BuilderContext { +public class ListBuilder extends CapTableBuilder.BuilderContext { public interface Factory { T constructBuilder(SegmentBuilder segment, int ptr, int elementCount, int step, @@ -31,9 +31,9 @@ T constructBuilder(SegmentBuilder segment, int ptr, default T constructBuilder(SegmentBuilder segment, CapTableBuilder capTable, int ptr, int elementCount, int step, int structDataSize, short structPointerCount) { - var result = constructBuilder(segment, ptr, elementCount, step, structDataSize, structPointerCount); - if (result instanceof Capability.BuilderContext) { - ((Capability.BuilderContext) result).capTable = capTable; + T result = constructBuilder(segment, ptr, elementCount, step, structDataSize, structPointerCount); + if (result instanceof CapTableBuilder.BuilderContext) { + ((CapTableBuilder.BuilderContext) result).capTable = capTable; } return result; } diff --git a/runtime/src/main/java/org/capnproto/ListReader.java b/runtime/src/main/java/org/capnproto/ListReader.java index bf1f45c6..f63ecfec 100644 --- a/runtime/src/main/java/org/capnproto/ListReader.java +++ b/runtime/src/main/java/org/capnproto/ListReader.java @@ -21,7 +21,7 @@ package org.capnproto; -public class ListReader extends Capability.ReaderContext { +public class ListReader extends CapTableReader.ReaderContext { public interface Factory { T constructReader(SegmentReader segment, int ptr, @@ -31,9 +31,9 @@ T constructReader(SegmentReader segment, default T constructReader(SegmentReader segment, CapTableReader capTable, int ptr, int elementCount, int step, int structDataSize, short structPointerCount, int nestingLimit) { - var result = constructReader(segment, ptr, elementCount, step, structDataSize, structPointerCount, nestingLimit); - if (result instanceof Capability.ReaderContext) { - ((Capability.ReaderContext) result).capTable = capTable; + T result = constructReader(segment, ptr, elementCount, step, structDataSize, structPointerCount, nestingLimit); + if (result instanceof CapTableReader.ReaderContext) { + ((CapTableReader.ReaderContext) result).capTable = capTable; } return result; } diff --git a/runtime/src/main/java/org/capnproto/StructBuilder.java b/runtime/src/main/java/org/capnproto/StructBuilder.java index 6285dce6..f9543771 100644 --- a/runtime/src/main/java/org/capnproto/StructBuilder.java +++ b/runtime/src/main/java/org/capnproto/StructBuilder.java @@ -21,15 +21,15 @@ package org.capnproto; -public class StructBuilder extends Capability.BuilderContext { +public class StructBuilder extends CapTableBuilder.BuilderContext { public interface Factory { T constructBuilder(SegmentBuilder segment, int data, int pointers, int dataSize, short pointerCount); default T constructBuilder(SegmentBuilder segment, CapTableBuilder capTable, int data, int pointers, int dataSize, short pointerCount) { - var result = constructBuilder(segment, data, pointers, dataSize, pointerCount); - if (result instanceof Capability.BuilderContext) { - ((Capability.BuilderContext) result).capTable = capTable; + T result = constructBuilder(segment, data, pointers, dataSize, pointerCount); + if (result instanceof CapTableBuilder.BuilderContext) { + ((CapTableBuilder.BuilderContext) result).capTable = capTable; } return result; } diff --git a/runtime/src/main/java/org/capnproto/StructReader.java b/runtime/src/main/java/org/capnproto/StructReader.java index 3225c712..14532a65 100644 --- a/runtime/src/main/java/org/capnproto/StructReader.java +++ b/runtime/src/main/java/org/capnproto/StructReader.java @@ -21,7 +21,7 @@ package org.capnproto; -public class StructReader extends Capability.ReaderContext { +public class StructReader extends CapTableReader.ReaderContext { public interface Factory { T constructReader(SegmentReader segment, int data, int pointers, int dataSize, short pointerCount, @@ -29,9 +29,9 @@ T constructReader(SegmentReader segment, int data, int pointers, default T constructReader(SegmentReader segment, CapTableReader capTable, int data, int pointers, int dataSize, short pointerCount, int nestingLimit) { - var result = constructReader(segment, data, pointers, dataSize, pointerCount, nestingLimit); - if (result instanceof Capability.ReaderContext) { - ((Capability.ReaderContext) result).capTable = capTable; + T result = constructReader(segment, data, pointers, dataSize, pointerCount, nestingLimit); + if (result instanceof CapTableReader.ReaderContext) { + ((CapTableReader.ReaderContext) result).capTable = capTable; } return result; } From 3ec3dbae570a2a0da706708e89f7164170243e41 Mon Sep 17 00:00:00 2001 From: Vaci Koblizek Date: Sun, 6 Mar 2022 16:47:19 +0000 Subject: [PATCH 5/6] remove captable contexts from capability --- runtime/src/main/java/org/capnproto/Capability.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/Capability.java b/runtime/src/main/java/org/capnproto/Capability.java index 722f4781..4521c541 100644 --- a/runtime/src/main/java/org/capnproto/Capability.java +++ b/runtime/src/main/java/org/capnproto/Capability.java @@ -10,14 +10,6 @@ public final class Capability { - public static class BuilderContext { - public CapTableBuilder capTable; - } - - public static class ReaderContext { - public CapTableReader capTable; - } - public static abstract class Factory implements FromPointerReader, FromPointerBuilder, From 7c521d5840f547b0dbb95f8d51666df46bff343e Mon Sep 17 00:00:00 2001 From: Vaci Koblizek Date: Sun, 6 Mar 2022 16:47:37 +0000 Subject: [PATCH 6/6] avoid var in ClientHook --- runtime/src/main/java/org/capnproto/ClientHook.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/ClientHook.java b/runtime/src/main/java/org/capnproto/ClientHook.java index 5f4cdb4d..ed4b3200 100644 --- a/runtime/src/main/java/org/capnproto/ClientHook.java +++ b/runtime/src/main/java/org/capnproto/ClientHook.java @@ -61,7 +61,7 @@ default CompletableFuture whenMoreResolved() { * Repeatedly calls whenMoreResolved() until it returns nullptr. */ default CompletableFuture whenResolved() { - var promise = whenMoreResolved(); + CompletableFuture promise = whenMoreResolved(); return promise != null ? promise.thenCompose(ClientHook::whenResolved) : CompletableFuture.completedFuture(null); @@ -83,7 +83,7 @@ default boolean isError() { } /** - * Implements {@link Capability.Client.getFd}. If this returns null but whenMoreResolved() returns + * Implements Capability.Client.getFd. If this returns null but whenMoreResolved() returns * non-null, then Capability::Client::getFd() waits for resolution and tries again. */ default FileDescriptor getFd() {