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(
|
kj::String defaultParams = defaultOffset == 0 ? kj::str("null, 0") : kj::str(
|
||||||
"Schemas.b_", kj::hex(typeId), ", ", defaultOffset);
|
"Schemas.b_", kj::hex(typeId), ", ", defaultOffset);
|
||||||
|
|
||||||
|
auto typeParamVec = getTypeParameters(field.getContainingStruct());
|
||||||
auto factoryArg = makeFactoryArg(field.getType());
|
auto factoryArg = makeFactoryArg(field.getType());
|
||||||
|
|
||||||
return FieldText {
|
return FieldText {
|
||||||
|
@ -1072,8 +1073,22 @@ private:
|
||||||
"_getPointerField(", factoryArg, ", ", offset, ", ", defaultParams, ");\n",
|
"_getPointerField(", factoryArg, ", ", offset, ", ", defaultParams, ");\n",
|
||||||
spaces(indent), " }\n",
|
spaces(indent), " }\n",
|
||||||
|
|
||||||
// TODO deal with generics here.
|
(field.getType().asStruct().getProto().getIsGeneric() ?
|
||||||
(field.getType().asStruct().getProto().getIsGeneric() ? kj::strTree() :
|
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(
|
kj::strTree(
|
||||||
spaces(indent), " public final void set", titleCase, "(", readerType, " value) {\n",
|
spaces(indent), " public final void set", titleCase, "(", readerType, " value) {\n",
|
||||||
unionDiscrim.set,
|
unionDiscrim.set,
|
||||||
|
|
|
@ -82,6 +82,22 @@ class EncodingSuite extends FunSuite {
|
||||||
barReader.get(0) should equal (11);
|
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") {
|
test("Defaults") {
|
||||||
val message = new MessageBuilder();
|
val message = new MessageBuilder();
|
||||||
val defaults = message.initRoot(TestDefaults.factory);
|
val defaults = message.initRoot(TestDefaults.factory);
|
||||||
|
|
Loading…
Reference in a new issue