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

@ -298,8 +298,8 @@ private:
case schema::Type::FLOAT32: return kj::strTree("float"); case schema::Type::FLOAT32: return kj::strTree("float");
case schema::Type::FLOAT64: return kj::strTree("double"); case schema::Type::FLOAT64: return kj::strTree("double");
case schema::Type::TEXT: return kj::strTree(" org.capnproto.Text.", suffix); case schema::Type::TEXT: return kj::strTree("org.capnproto.Text.", suffix);
case schema::Type::DATA: return kj::strTree(" org.capnproto.Data.", suffix); case schema::Type::DATA: return kj::strTree("org.capnproto.Data.", suffix);
case schema::Type::ENUM: return javaFullName(type.asEnum()); case schema::Type::ENUM: return javaFullName(type.asEnum());
case schema::Type::STRUCT: { case schema::Type::STRUCT: {
@ -758,8 +758,25 @@ 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();
return kj::str(typeName(elementType, kj::str("listFactory"))); 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")));
}
} }
case schema::Type::LIST: case schema::Type::LIST:
return kj::str("new org.capnproto.ListList.Factory<", return kj::str("new org.capnproto.ListList.Factory<",

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));
} }