From 4cc34896b4d432a8f1cfcdcc6a43f6402a345de7 Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Tue, 12 May 2020 23:29:16 -0400 Subject: [PATCH] add StructList.newFactory method, allowing type parameters to be inferred --- compiler/pom.xml | 9 ++++++ .../test/java/org/capnproto/EncodingTest.java | 32 +++++++++---------- .../main/java/org/capnproto/StructList.java | 5 +++ 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/compiler/pom.xml b/compiler/pom.xml index f4a8cea..b28f99e 100644 --- a/compiler/pom.xml +++ b/compiler/pom.xml @@ -46,6 +46,15 @@ + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + -Xlint:unchecked + + + maven-antrun-plugin 3.0.0 diff --git a/compiler/src/test/java/org/capnproto/EncodingTest.java b/compiler/src/test/java/org/capnproto/EncodingTest.java index ca1a702..fde64a1 100644 --- a/compiler/src/test/java/org/capnproto/EncodingTest.java +++ b/compiler/src/test/java/org/capnproto/EncodingTest.java @@ -204,9 +204,7 @@ public class EncodingTest { segment.order(java.nio.ByteOrder.LITTLE_ENDIAN); MessageReader messageReader = new MessageReader(new ByteBuffer[]{segment}, ReaderOptions.DEFAULT_READER_OPTIONS); - StructList.Factory oldFactory = - new StructList.Factory(Test.TestOldVersion.factory); - StructList.Reader oldVersion = messageReader.getRoot(oldFactory); + StructList.Reader oldVersion = messageReader.getRoot(StructList.newFactory(Test.TestOldVersion.factory)); Assert.assertEquals(oldVersion.size(), 1); Assert.assertEquals(oldVersion.get(0).getOld1(), 91); @@ -215,15 +213,14 @@ public class EncodingTest { // Make the first segment exactly large enough to fit the original message. // This leaves no room for a far pointer landing pad in the first segment. MessageBuilder message = new MessageBuilder(6); - message.setRoot(oldFactory, oldVersion); + message.setRoot(StructList.newFactory(Test.TestOldVersion.factory), oldVersion); ByteBuffer[] segments = message.getSegmentsForOutput(); Assert.assertEquals(segments.length, 1); Assert.assertEquals(segments[0].limit(), 6 * 8); - StructList.Factory newFactory = - new StructList.Factory(Test.TestNewVersion.factory); - StructList.Builder newVersion = message.getRoot(newFactory); + StructList.Builder newVersion = + message.getRoot(new StructList.Factory(Test.TestNewVersion.factory)); Assert.assertEquals(newVersion.size(), 1); Assert.assertEquals(newVersion.get(0).getOld1(), 91); Assert.assertEquals(newVersion.get(0).getOld2().toString(), "hello!!"); @@ -318,7 +315,7 @@ public class EncodingTest { structList2.get(2).setInt16Field((short)4444); ListList.Reader> structListListReader = - structListList.asReader(new StructList.Factory(Test.TestAllTypes.factory)); + structListList.asReader(StructList.newFactory(Test.TestAllTypes.factory)); Assert.assertEquals(structListListReader.size(), 3); StructList.Reader structList0Reader = structListListReader.get(0); Assert.assertEquals(structList0Reader.size(), 1); @@ -334,9 +331,9 @@ public class EncodingTest { @org.junit.Test public void testGenerics() { MessageBuilder message = new MessageBuilder(); - Test.TestGenerics.Factory factory = Test.TestGenerics.newFactory(Test.TestAllTypes.factory, Text.factory); - Test.TestGenerics.Builder root = (Test.TestGenerics.Builder) message.initRoot(factory); + Test.TestGenerics.Builder root = + (Test.TestGenerics.Builder) message.initRoot(Test.TestGenerics.newFactory(Test.TestAllTypes.factory, Text.factory)); TestUtil.initTestMessage(root.getFoo()); root.getDub().setFoo(Text.factory, new Text.Reader("Hello")); @@ -349,7 +346,8 @@ public class EncodingTest { boolList.set(1, true); TestUtil.checkTestMessage(root.getFoo()); - Test.TestGenerics.Reader rootReader = root.asReader(factory); + Test.TestGenerics.Reader rootReader = + root.asReader(Test.TestGenerics.newFactory(Test.TestAllTypes.factory, Text.factory)); TestUtil.checkTestMessage(rootReader.getFoo()); Test.TestGenerics.Builder dubReader = root.getDub(); Assert.assertEquals(dubReader.getFoo().toString(), "Hello"); @@ -570,7 +568,7 @@ public class EncodingTest { MessageReader message = new MessageReader(new ByteBuffer[]{segment}, ReaderOptions.DEFAULT_READER_OPTIONS); Test.TestAnyPointer.Reader root = message.getRoot(Test.TestAnyPointer.factory); - root.getAnyPointerField().getAs(new StructList.Factory(Test.TestAllTypes.factory)); + root.getAnyPointerField().getAs(StructList.newFactory(Test.TestAllTypes.factory)); } @org.junit.Test(expected=DecodeException.class) @@ -599,21 +597,21 @@ public class EncodingTest { MessageReader reader = new MessageReader(segments, ReaderOptions.DEFAULT_READER_OPTIONS); Test.TestAnyPointer.Reader root = reader.getRoot(Test.TestAnyPointer.factory); - root.getAnyPointerField().getAs(new StructList.Factory(Test.TestAllTypes.factory)); + root.getAnyPointerField().getAs(StructList.newFactory(Test.TestAllTypes.factory)); } @org.junit.Test(expected=DecodeException.class) public void testEmptyStructListAmplification() { MessageBuilder builder = new MessageBuilder(); builder.initRoot(Test.TestAnyPointer.factory).getAnyPointerField() - .initAs(new StructList.Factory(Test.TestEmptyStruct.factory), (1 << 29) - 1); + .initAs(StructList.newFactory(Test.TestEmptyStruct.factory), (1 << 29) - 1); ByteBuffer[] segments = builder.getSegmentsForOutput(); Assert.assertEquals(1, segments.length); MessageReader reader = new MessageReader(segments, ReaderOptions.DEFAULT_READER_OPTIONS); Test.TestAnyPointer.Reader root = reader.getRoot(Test.TestAnyPointer.factory); - root.getAnyPointerField().getAs(new StructList.Factory(Test.TestAllTypes.factory)); + root.getAnyPointerField().getAs(StructList.newFactory(Test.TestAllTypes.factory)); } @org.junit.Test @@ -777,11 +775,11 @@ public class EncodingTest { public void testGenericMap() { MessageBuilder builder = new MessageBuilder(); Test.GenericMap.Factory mapFactory - = new Test.GenericMap.Factory(Text.factory, Test.TestAllTypes.factory); + = Test.GenericMap.newFactory(Text.factory, Test.TestAllTypes.factory); StructList.Factory, Test.GenericMap.Entry.Reader> entryFactory - = new StructList.Factory(new Test.GenericMap.Entry.Factory(Text.factory, Test.TestAllTypes.factory)); + = StructList.newFactory(Test.GenericMap.Entry.newFactory(Text.factory, Test.TestAllTypes.factory)); Test.GenericMap.Builder root = builder.initRoot(mapFactory); diff --git a/runtime/src/main/java/org/capnproto/StructList.java b/runtime/src/main/java/org/capnproto/StructList.java index 9ed670d..b97ad92 100644 --- a/runtime/src/main/java/org/capnproto/StructList.java +++ b/runtime/src/main/java/org/capnproto/StructList.java @@ -22,6 +22,11 @@ package org.capnproto; public final class StructList { + public static final Factory + newFactory(StructFactory factory) { + return new Factory(factory); + } + public static final class Factory extends ListFactory, Reader> {