diff --git a/benchmark/src/main/java/org/capnproto/benchmark/CarSales.java b/benchmark/src/main/java/org/capnproto/benchmark/CarSales.java index 363cc13..03f25c6 100644 --- a/benchmark/src/main/java/org/capnproto/benchmark/CarSales.java +++ b/benchmark/src/main/java/org/capnproto/benchmark/CarSales.java @@ -124,9 +124,9 @@ public class CarSales for (int i = 0; i < 50000; ++i) { MessageBuilder requestMessage = new MessageBuilder(); MessageBuilder responseMessage = new MessageBuilder(); - ParkingLot.Builder request = requestMessage.initRoot(ParkingLot.Builder.factory); + ParkingLot.Builder request = requestMessage.initRoot(ParkingLot.factory); long expected = testCase.setupRequest(rng, request); - TotalValue.Builder response = responseMessage.initRoot(TotalValue.Builder.factory); + TotalValue.Builder response = responseMessage.initRoot(TotalValue.factory); testCase.handleRequest(request.asReader(), response); if (!testCase.checkResponse(response.asReader(), expected)) { System.out.println("mismatch!"); diff --git a/compiler/src/main/cpp/capnpc-java.c++ b/compiler/src/main/cpp/capnpc-java.c++ index 7c2e139..49ee09c 100644 --- a/compiler/src/main/cpp/capnpc-java.c++ +++ b/compiler/src/main/cpp/capnpc-java.c++ @@ -919,7 +919,7 @@ private: spaces(indent), " public ", type, ".Reader", " get", titleCase, "() {\n", spaces(indent), " return ", type, - ".Reader.factory.fromStructReader(_reader.getPointerField(", offset,").getStruct());\n", + ".factory.fromStructReader(_reader.getPointerField(", offset,").getStruct());\n", spaces(indent), " }\n", "\n"), kj::strTree( @@ -929,7 +929,7 @@ private: spaces(indent), " }\n", spaces(indent), " public final ", type, ".Builder get", titleCase, "() {\n", spaces(indent), " return ", type, - ".Builder.factory.fromStructBuilder(_builder.getPointerField(", offset, ").getStruct(", + ".factory.fromStructBuilder(_builder.getPointerField(", offset, ").getStruct(", type, ".STRUCT_SIZE", "));\n", spaces(indent), " }\n", spaces(indent), " public final void set", titleCase, "(", type, ".Reader value) {\n", @@ -938,7 +938,7 @@ private: spaces(indent), " }\n", spaces(indent), " public final ", type, ".Builder init", titleCase, "() {\n", spaces(indent), " return ", - type, ".Builder.factory.fromStructBuilder(_builder.getPointerField(", offset, ").initStruct(", + type, ".factory.fromStructBuilder(_builder.getPointerField(", offset, ").initStruct(", type, ".STRUCT_SIZE", "));\n", spaces(indent), " }\n"), @@ -1065,8 +1065,8 @@ private: readerClass = kj::str("Reader<", elementReaderType, ">"); elementBuilderType = kj::str(typeName(typeBody.getList().getElementType()), ".Builder"); builderClass = kj::str("Builder<", elementBuilderType, ">"); - readerFactoryArg = kj::str(elementReaderType, ".factory,"), - builderFactoryArg = kj::str(elementBuilderType, ".factory,"), + readerFactoryArg = kj::str(typeName(typeBody.getList().getElementType()), ".factory, "); + builderFactoryArg = kj::str(typeName(typeBody.getList().getElementType()), ".factory, "); fieldSize = kj::str(typeName(typeBody.getList().getElementType()),".STRUCT_SIZE.preferredListEncoding"); break; } @@ -1205,14 +1205,6 @@ private: int indent) { return kj::strTree( spaces(indent), "public static final class Reader {\n", - spaces(indent), - " public static class Factory implements org.capnproto.FromStructReader {\n", - spaces(indent), - " public final Reader fromStructReader(org.capnproto.StructReader reader) {\n", - spaces(indent), " return new Reader(reader);\n", - spaces(indent), " }\n", - spaces(indent), " }\n", - spaces(indent), " public static final Factory factory = new Factory();\n", spaces(indent), " public Reader(org.capnproto.StructReader base){ this._reader = base; }\n", "\n", (isUnion ? @@ -1234,15 +1226,6 @@ private: bool isUnion = structNode.getDiscriminantCount() != 0; return kj::strTree( spaces(indent), "public static final class Builder {\n", - spaces(indent), " public static class Factory implements org.capnproto.FromStructBuilder {\n", - spaces(indent), " public final Builder fromStructBuilder(org.capnproto.StructBuilder builder) {\n", - spaces(indent), " return new Builder(builder);\n", - spaces(indent), " }\n", - spaces(indent), " public final org.capnproto.StructSize structSize() {\n", - spaces(indent), " return ", fullName, ".STRUCT_SIZE;\n", - spaces(indent), " }\n", - spaces(indent), " }\n", - spaces(indent), " public static final Factory factory = new Factory();\n", spaces(indent), " public Builder(org.capnproto.StructBuilder base){ this._builder = base; }\n", spaces(indent), " public org.capnproto.StructBuilder _builder;\n", (isUnion ? @@ -1281,6 +1264,21 @@ private: ",(short)", structNode.getPointerCount(), ", org.capnproto.FieldSize.", FIELD_SIZE_NAMES[(int)structNode.getPreferredListEncoding()], ");\n"), + spaces(indent), " public static class Factory implements org.capnproto.StructFactory {\n", + spaces(indent), + " public final Reader fromStructReader(org.capnproto.StructReader reader) {\n", + spaces(indent), " return new Reader(reader);\n", + spaces(indent), " }\n", + spaces(indent), " public final Builder fromStructBuilder(org.capnproto.StructBuilder builder) {\n", + spaces(indent), " return new Builder(builder);\n", + spaces(indent), " }\n", + spaces(indent), " public final org.capnproto.StructSize structSize() {\n", + spaces(indent), " return ", fullName, ".STRUCT_SIZE;\n", + spaces(indent), " }\n", + spaces(indent), " }\n", + spaces(indent), " public static final Factory factory = new Factory();\n", + + kj::strTree(makeReaderDef(fullName, name, structNode.getDiscriminantCount() != 0, structNode.getDiscriminantOffset(), KJ_MAP(f, fieldTexts) { return kj::mv(f.readerMethodDecls); }, diff --git a/compiler/src/test/scala/org/capnproto/EncodingTest.scala b/compiler/src/test/scala/org/capnproto/EncodingTest.scala index a982de4..ad7d0d9 100644 --- a/compiler/src/test/scala/org/capnproto/EncodingTest.scala +++ b/compiler/src/test/scala/org/capnproto/EncodingTest.scala @@ -9,7 +9,7 @@ class EncodingSuite extends FunSuite { test("AllTypes") { val message = new MessageBuilder(); - val allTypes = message.initRoot(TestAllTypes.Builder.factory); + val allTypes = message.initRoot(TestAllTypes.factory); TestUtil.initTestMessage(allTypes); TestUtil.checkTestMessage(allTypes); TestUtil.checkTestMessage(allTypes.asReader()); @@ -17,7 +17,7 @@ class EncodingSuite extends FunSuite { test("AllTypesMultiSegment") { val message = new MessageBuilder(5, BuilderArena.AllocationStrategy.FIXED_SIZE); - val allTypes = message.initRoot(TestAllTypes.Builder.factory); + val allTypes = message.initRoot(TestAllTypes.factory); TestUtil.initTestMessage(allTypes); TestUtil.checkTestMessage(allTypes); diff --git a/examples/src/main/java/org/capnproto/examples/AddressbookMain.java b/examples/src/main/java/org/capnproto/examples/AddressbookMain.java index 225e596..c4a2663 100644 --- a/examples/src/main/java/org/capnproto/examples/AddressbookMain.java +++ b/examples/src/main/java/org/capnproto/examples/AddressbookMain.java @@ -16,7 +16,7 @@ public class AddressbookMain { public static void writeAddressBook() throws java.io.IOException { MessageBuilder message = new MessageBuilder(); - AddressBook.Builder addressbook = message.initRoot(AddressBook.Builder.factory); + AddressBook.Builder addressbook = message.initRoot(AddressBook.factory); StructList.Builder people = addressbook.initPeople(2); Person.Builder alice = people.get(0); @@ -48,7 +48,7 @@ public class AddressbookMain { public static void printAddressBook() throws java.io.IOException { MessageReader message = InputStreamMessageReader.create(System.in); - AddressBook.Reader addressbook = message.getRoot(AddressBook.Reader.factory); + AddressBook.Reader addressbook = message.getRoot(AddressBook.factory); StructList.Reader people = addressbook.getPeople(); int size = people.size(); for(int ii = 0; ii < size; ++ii) { diff --git a/runtime/src/main/java/org/capnproto/StructFactory.java b/runtime/src/main/java/org/capnproto/StructFactory.java new file mode 100644 index 0000000..9bd9c0a --- /dev/null +++ b/runtime/src/main/java/org/capnproto/StructFactory.java @@ -0,0 +1,4 @@ +package org.capnproto; + +public interface StructFactory extends FromStructBuilder, FromStructReader{ +}