setters for fields of generic structs
This commit is contained in:
parent
5f98572b7c
commit
46e5e77cc8
2 changed files with 33 additions and 2 deletions
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue