list of generic structs

This commit is contained in:
David Renshaw 2014-10-29 10:28:25 -04:00
parent 46e5e77cc8
commit 18b03eae8a
2 changed files with 23 additions and 4 deletions

View file

@ -758,9 +758,26 @@ private:
auto elementType = type.asList().getElementType(); auto elementType = type.asList().getElementType();
switch (elementType.which()) { switch (elementType.which()) {
case schema::Type::STRUCT: { case schema::Type::STRUCT: {
// XXX auto elementStructSchema = elementType.asStruct();
auto elementNode = elementStructSchema.getProto();
if (elementNode.getIsGeneric()) {
auto factoryArgs = getFactoryArguments(elementStructSchema, elementStructSchema);
return kj::strTree(
"new org.capnproto.StructList.Factory<",
typeName(elementType, kj::str("Builder")), ", ",
typeName(elementType, kj::str("Reader")),
">(",
javaFullName(elementStructSchema), ".newFactory(",
kj::StringTree(
KJ_MAP(arg, factoryArgs) {
return kj::strTree(arg);
}, ","),
"))"
).flatten();
} else {
return kj::str(typeName(elementType, kj::str("listFactory"))); return kj::str(typeName(elementType, kj::str("listFactory")));
} }
}
case schema::Type::LIST: case schema::Type::LIST:
return kj::str("new org.capnproto.ListList.Factory<", return kj::str("new org.capnproto.ListList.Factory<",
typeName(elementType, kj::str("Builder")),", ", typeName(elementType, kj::str("Builder")),", ",

View file

@ -373,6 +373,8 @@ struct TestUseGenerics {
(value = (foo = "text", rev = (foo = (int16Field = 321)))); (value = (foo = "text", rev = (foo = (int16Field = 321))));
defaultWrapper2 @10 :TestGenericsWrapper2 = defaultWrapper2 @10 :TestGenericsWrapper2 =
(value = (value = (foo = "text", rev = (foo = (int16Field = 321))))); (value = (value = (foo = "text", rev = (foo = (int16Field = 321)))));
listOfGenerics @11 :List(TestGenerics(TestAllTypes, Text));
} }