setters for fields of generic structs

This commit is contained in:
David Renshaw 2014-10-29 10:03:17 -04:00
parent 5f98572b7c
commit 46e5e77cc8
2 changed files with 33 additions and 2 deletions

View file

@ -1049,6 +1049,7 @@ private:
kj::String defaultParams = defaultOffset == 0 ? kj::str("null, 0") : kj::str(
"Schemas.b_", kj::hex(typeId), ", ", defaultOffset);
auto typeParamVec = getTypeParameters(field.getContainingStruct());
auto factoryArg = makeFactoryArg(field.getType());
return FieldText {
@ -1072,8 +1073,22 @@ private:
"_getPointerField(", factoryArg, ", ", offset, ", ", defaultParams, ");\n",
spaces(indent), " }\n",
// TODO deal with generics here.
(field.getType().asStruct().getProto().getIsGeneric() ? kj::strTree() :
(field.getType().asStruct().getProto().getIsGeneric() ?
kj::strTree(
spaces(indent), " public final ",
(typeParamVec.size() == 0 ? kj::strTree() :
kj::strTree(
"<",
kj::StringTree(KJ_MAP(p, typeParamVec) {
return kj::strTree(p, "_Reader");
}, ", "),
"> ")),
"void set", titleCase,
"(org.capnproto.SetPointerBuilder<", builderType, ", ", readerType, "> factory, ", readerType, " value) {\n",
unionDiscrim.set,
spaces(indent), " _setPointerField(factory, ", offset, ", value);\n",
spaces(indent), " }\n"
) :
kj::strTree(
spaces(indent), " public final void set", titleCase, "(", readerType, " value) {\n",
unionDiscrim.set,

View file

@ -82,6 +82,22 @@ class EncodingSuite extends FunSuite {
barReader.get(0) should equal (11);
}
test("UseGenerics") {
val message = new MessageBuilder();
val root = message.initRoot(TestUseGenerics.factory);
{
val message2 = new MessageBuilder();
val factory2 = TestGenerics.newFactory(AnyPointer.factory, AnyPointer.factory);
val root2 = message2.initRoot(factory2);
val dub2 = root2.initDub().setFoo(Text.factory, new Text.Reader("foobar"));
root.setUnspecified(factory2, root2.asReader(factory2));
}
val rootReader = root.asReader();
root.getUnspecified().getDub().getFoo().toString() should equal ("foobar");
}
test("Defaults") {
val message = new MessageBuilder();
val defaults = message.initRoot(TestDefaults.factory);