use wildcards
This commit is contained in:
parent
a578dd1332
commit
dabb9a6ee6
4 changed files with 50 additions and 29 deletions
|
@ -305,7 +305,6 @@ private:
|
|||
case schema::Type::STRUCT: {
|
||||
auto structSchema = type.asStruct();
|
||||
if (structSchema.getProto().getIsGeneric()) {
|
||||
KJ_LOG(ERROR, suffix);
|
||||
auto typeArgs = getTypeArguments(structSchema, structSchema, kj::str(suffix));
|
||||
return kj::strTree(
|
||||
javaFullName(structSchema), ".", suffix, "<",
|
||||
|
@ -1103,10 +1102,15 @@ private:
|
|||
spaces(indent), " return ",
|
||||
"_getPointerField(", factoryArg, ", ", offset, ", ", defaultParams, ");\n",
|
||||
spaces(indent), " }\n",
|
||||
spaces(indent), " public final void set", titleCase, "(", readerType, " value) {\n",
|
||||
unionDiscrim.set,
|
||||
spaces(indent), " _setPointerField(", factoryArg, ",", offset, ", value);\n",
|
||||
spaces(indent), " }\n",
|
||||
|
||||
// TODO deal with generics here.
|
||||
(field.getType().asStruct().getProto().getIsGeneric() ? kj::strTree() :
|
||||
kj::strTree(
|
||||
spaces(indent), " public final void set", titleCase, "(", readerType, " value) {\n",
|
||||
unionDiscrim.set,
|
||||
spaces(indent), " _setPointerField(", factoryArg, ",", offset, ", value);\n",
|
||||
spaces(indent), " }\n")),
|
||||
|
||||
spaces(indent), " public final ", builderType, " init", titleCase, "() {\n",
|
||||
unionDiscrim.set,
|
||||
spaces(indent), " return ",
|
||||
|
@ -1352,11 +1356,11 @@ private:
|
|||
kj::strTree(
|
||||
spaces(indent+1), "public static final class Builder", builderTypeParams, " extends org.capnproto.StructBuilder {\n",
|
||||
kj::strTree(KJ_MAP(p, typeParamVec) {
|
||||
return kj::strTree(spaces(indent), " final org.capnproto.FromPointerBuilder<", p, "_Builder> ", p, "_Factory;\n");
|
||||
return kj::strTree(spaces(indent), " final org.capnproto.PointerFactory<", p, "_Builder, ?> ", p, "_Factory;\n");
|
||||
}),
|
||||
spaces(indent+1), " Builder(",
|
||||
KJ_MAP(p, typeParamVec) {
|
||||
return kj::strTree("org.capnproto.FromPointerBuilder<", p, "_Builder> ", p, "_Factory,");
|
||||
return kj::strTree("org.capnproto.PointerFactory<", p, "_Builder, ?> ", p, "_Factory,");
|
||||
},
|
||||
"org.capnproto.SegmentBuilder segment, int data, int pointers,",
|
||||
"int dataSize, short pointerCount){\n",
|
||||
|
@ -1384,11 +1388,11 @@ private:
|
|||
kj::strTree(
|
||||
spaces(indent+1), "public static final class Reader", readerTypeParams, " extends org.capnproto.StructReader {\n",
|
||||
KJ_MAP(p, typeParamVec) {
|
||||
return kj::strTree(spaces(indent), " final org.capnproto.FromPointerReader<", p, "_Reader> ", p, "_Factory;\n");
|
||||
return kj::strTree(spaces(indent), " final org.capnproto.PointerFactory<?,", p, "_Reader> ", p, "_Factory;\n");
|
||||
},
|
||||
spaces(indent+1), " Reader(",
|
||||
KJ_MAP(p, typeParamVec) {
|
||||
return kj::strTree("org.capnproto.FromPointerReader<", p, "_Reader> ", p, "_Factory,");
|
||||
return kj::strTree("org.capnproto.PointerFactory<?,", p, "_Reader> ", p, "_Factory,");
|
||||
},
|
||||
"org.capnproto.SegmentReader segment, int data, int pointers,",
|
||||
"int dataSize, short pointerCount, int nestingLimit){\n",
|
||||
|
|
|
@ -58,6 +58,23 @@ class EncodingSuite extends FunSuite {
|
|||
TestUtil.checkTestMessage(reader);
|
||||
}
|
||||
|
||||
test("Generics") {
|
||||
val message = new MessageBuilder();
|
||||
val factory = TestGenerics.newFactory(TestAllTypes.factory, Text.factory);
|
||||
val root = message.initRoot(factory);
|
||||
TestUtil.initTestMessage(root.getFoo());
|
||||
//root.getRev().setFoo(Text.factory, new Text.Reader("Hello"));
|
||||
val bar = root.getRev().initBar(1);
|
||||
bar.set(0, 11);
|
||||
var boolList = root.getDub().getFoo().initBoolList(2);
|
||||
boolList.set(0, false);
|
||||
boolList.set(1, true);
|
||||
|
||||
|
||||
TestUtil.checkTestMessage(root.getFoo());
|
||||
TestUtil.checkTestMessage(root.asReader(factory).getFoo());
|
||||
}
|
||||
|
||||
test("Defaults") {
|
||||
val message = new MessageBuilder();
|
||||
val defaults = message.initRoot(TestDefaults.factory);
|
||||
|
|
|
@ -324,27 +324,28 @@ struct TestNewVersion {
|
|||
|
||||
struct TestGenerics(Foo, Bar) {
|
||||
foo @0 :Foo;
|
||||
rev @1 :TestGenerics(Text, List(UInt8));
|
||||
# dub @2 :TestGenerics(Foo, Bar);
|
||||
bar @1 :Bar;
|
||||
rev @2 :TestGenerics(Text, List(UInt8));
|
||||
dub @3 :TestGenerics(Foo, Bar);
|
||||
|
||||
# struct Inner {
|
||||
# foo @0 :Foo;
|
||||
# bar @1 :Bar;
|
||||
# }
|
||||
struct Inner {
|
||||
foo @0 :Foo;
|
||||
bar @1 :Bar;
|
||||
}
|
||||
|
||||
# struct Inner2(Baz) {
|
||||
# bar @0 :Bar;
|
||||
# baz @1 :Baz;
|
||||
# innerBound @2 :Inner;
|
||||
# innerUnbound @3 :TestGenerics.Inner;
|
||||
struct Inner2(Baz) {
|
||||
bar @0 :Bar;
|
||||
baz @1 :Baz;
|
||||
innerBound @2 :Inner;
|
||||
innerUnbound @3 :TestGenerics.Inner;
|
||||
|
||||
# struct DeepNest(Qux) {
|
||||
# foo @0 :Foo;
|
||||
# bar @1 :Bar;
|
||||
# baz @2 :Baz;
|
||||
# qux @3 :Qux;
|
||||
# }
|
||||
# }
|
||||
struct DeepNest(Qux) {
|
||||
foo @0 :Foo;
|
||||
bar @1 :Bar;
|
||||
baz @2 :Baz;
|
||||
qux @3 :Qux;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,11 +22,10 @@
|
|||
package org.capnproto;
|
||||
|
||||
public abstract class StructFactory<Builder, Reader extends StructReader>
|
||||
implements FromPointerBuilder<Builder>,
|
||||
implements PointerFactory<Builder, Reader>,
|
||||
FromPointerBuilderRefDefault<Builder>,
|
||||
StructBuilder.Factory<Builder>,
|
||||
SetPointerBuilder<Reader>,
|
||||
FromPointerReader<Reader>,
|
||||
FromPointerReaderRefDefault<Reader>,
|
||||
StructReader.Factory<Reader> {
|
||||
public final Reader fromPointerReaderRefDefault(SegmentReader segment, int pointer,
|
||||
|
|
Loading…
Reference in a new issue