update typeName and javaFullName to take capnp::Type

This commit is contained in:
David Renshaw 2014-10-28 13:17:02 -04:00
parent 4870faf255
commit 6403f605aa

View file

@ -251,84 +251,83 @@ private:
return kj::mv(result); return kj::mv(result);
} }
kj::StringTree typeName(schema::Type::Reader type, kj::String suffix = nullptr) { kj::StringTree typeName(capnp::Type type, kj::String suffix = nullptr) {
switch (type.which()) { switch (type.which()) {
case schema::Type::VOID: return kj::strTree("org.capnproto.Void"); case schema::Type::VOID: return kj::strTree("org.capnproto.Void");
case schema::Type::BOOL: return kj::strTree("boolean"); case schema::Type::BOOL: return kj::strTree("boolean");
case schema::Type::INT8: return kj::strTree("byte"); case schema::Type::INT8: return kj::strTree("byte");
case schema::Type::INT16: return kj::strTree("short"); case schema::Type::INT16: return kj::strTree("short");
case schema::Type::INT32: return kj::strTree("int"); case schema::Type::INT32: return kj::strTree("int");
case schema::Type::INT64: return kj::strTree("long"); case schema::Type::INT64: return kj::strTree("long");
case schema::Type::UINT8: return kj::strTree("byte"); case schema::Type::UINT8: return kj::strTree("byte");
case schema::Type::UINT16: return kj::strTree("short"); case schema::Type::UINT16: return kj::strTree("short");
case schema::Type::UINT32: return kj::strTree("int"); case schema::Type::UINT32: return kj::strTree("int");
case schema::Type::UINT64: return kj::strTree("long"); case schema::Type::UINT64: return kj::strTree("long");
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: case schema::Type::ENUM: return javaFullName(type.asEnum());
return javaFullName(schemaLoader.get(type.getEnum().getTypeId())); case schema::Type::STRUCT:
case schema::Type::STRUCT: return kj::strTree(javaFullName(type.asStruct()), suffix);
return kj::strTree(javaFullName(schemaLoader.get(type.getStruct().getTypeId())), suffix); case schema::Type::INTERFACE:
case schema::Type::INTERFACE: return javaFullName(type.asInterface());
return javaFullName(schemaLoader.get(type.getInterface().getTypeId()));
case schema::Type::LIST:
{
auto elementType = type.asList().getElementType();
switch (elementType.which()) {
case schema::Type::VOID:
return kj::strTree(" org.capnproto.PrimitiveList.Void", suffix);
case schema::Type::BOOL:
return kj::strTree(" org.capnproto.PrimitiveList.Boolean", suffix);
case schema::Type::INT8:
case schema::Type::UINT8:
return kj::strTree(" org.capnproto.PrimitiveList.Byte", suffix);
case schema::Type::INT16:
case schema::Type::UINT16:
return kj::strTree(" org.capnproto.PrimitiveList.Short", suffix);
case schema::Type::INT32:
case schema::Type::UINT32:
return kj::strTree(" org.capnproto.PrimitiveList.Int", suffix);
case schema::Type::INT64:
case schema::Type::UINT64:
return kj::strTree(" org.capnproto.PrimitiveList.Long", suffix);
case schema::Type::FLOAT32:
return kj::strTree(" org.capnproto.PrimitiveList.Float", suffix);
case schema::Type::FLOAT64:
return kj::strTree(" org.capnproto.PrimitiveList.Double", suffix);
case schema::Type::STRUCT:
{
auto inner = typeName(elementType, kj::str(suffix));
return kj::strTree(" org.capnproto.StructList", suffix, "<", kj::mv(inner), ">");
}
case schema::Type::TEXT:
return kj::strTree( "org.capnproto.TextList", suffix);
case schema::Type::DATA:
return kj::strTree( "org.capnproto.DataList", suffix);
case schema::Type::ENUM:
{
auto inner = typeName(elementType, kj::str(suffix));
return kj::strTree("org.capnproto.EnumList", suffix, "<", kj::mv(inner), ">");
}
case schema::Type::LIST: case schema::Type::LIST:
{ {
auto elementType = type.getList().getElementType(); auto inner = typeName(elementType, kj::str(suffix));
switch (elementType.which()) { return kj::strTree("org.capnproto.ListList", suffix, "<", kj::mv(inner), ">");
case schema::Type::VOID:
return kj::strTree(" org.capnproto.PrimitiveList.Void", suffix);
case schema::Type::BOOL:
return kj::strTree(" org.capnproto.PrimitiveList.Boolean", suffix);
case schema::Type::INT8:
case schema::Type::UINT8:
return kj::strTree(" org.capnproto.PrimitiveList.Byte", suffix);
case schema::Type::INT16:
case schema::Type::UINT16:
return kj::strTree(" org.capnproto.PrimitiveList.Short", suffix);
case schema::Type::INT32:
case schema::Type::UINT32:
return kj::strTree(" org.capnproto.PrimitiveList.Int", suffix);
case schema::Type::INT64:
case schema::Type::UINT64:
return kj::strTree(" org.capnproto.PrimitiveList.Long", suffix);
case schema::Type::FLOAT32:
return kj::strTree(" org.capnproto.PrimitiveList.Float", suffix);
case schema::Type::FLOAT64:
return kj::strTree(" org.capnproto.PrimitiveList.Double", suffix);
case schema::Type::STRUCT:
{
auto inner = typeName(elementType, kj::str(suffix));
return kj::strTree(" org.capnproto.StructList", suffix, "<", kj::mv(inner), ">");
}
case schema::Type::TEXT:
return kj::strTree( "org.capnproto.TextList", suffix);
case schema::Type::DATA:
return kj::strTree( "org.capnproto.DataList", suffix);
case schema::Type::ENUM:
{
auto inner = typeName(elementType, kj::str(suffix));
return kj::strTree("org.capnproto.EnumList", suffix, "<", kj::mv(inner), ">");
}
case schema::Type::LIST:
{
auto inner = typeName(elementType, kj::str(suffix));
return kj::strTree("org.capnproto.ListList", suffix, "<", kj::mv(inner), ">");
}
case schema::Type::INTERFACE:
case schema::Type::ANY_POINTER:
KJ_FAIL_REQUIRE("unimplemented");
}
KJ_UNREACHABLE;
} }
case schema::Type::INTERFACE:
case schema::Type::ANY_POINTER: case schema::Type::ANY_POINTER:
// Not used. KJ_FAIL_REQUIRE("unimplemented");
return kj::strTree(); }
KJ_UNREACHABLE;
}
case schema::Type::ANY_POINTER:
// Not used.
return kj::strTree();
} }
KJ_UNREACHABLE; KJ_UNREACHABLE;
} }
@ -669,8 +668,8 @@ private:
); );
} }
kj::String makeListFactoryArg(schema::Type::Reader type) { kj::String makeListFactoryArg(capnp::Type type) {
auto elementType = type.getList().getElementType(); auto elementType = type.asList().getElementType();
switch (elementType.which()) { switch (elementType.which()) {
case schema::Type::STRUCT: case schema::Type::STRUCT:
return kj::str(typeName(elementType, kj::str(".listFactory"))); return kj::str(typeName(elementType, kj::str(".listFactory")));
@ -753,7 +752,7 @@ private:
FieldKind kind = FieldKind::PRIMITIVE; FieldKind kind = FieldKind::PRIMITIVE;
kj::String ownedType; kj::String ownedType;
kj::String type = typeName(slot.getType(), kj::str("")).flatten(); kj::String type = typeName(field.getType(), kj::str("")).flatten();
kj::StringPtr setterDefault; // only for void kj::StringPtr setterDefault; // only for void
kj::String defaultMask; // primitives only kj::String defaultMask; // primitives only
size_t defaultOffset = 0; // pointers only: offset of the default value within the schema. size_t defaultOffset = 0; // pointers only: offset of the default value within the schema.
@ -1075,9 +1074,9 @@ 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);
kj::String listFactory = makeListFactoryArg(typeBody); kj::String listFactory = makeListFactoryArg(field.getType());
kj::String readerClass = kj::str(typeName(typeBody, kj::str(".Reader"))); kj::String readerClass = kj::str(typeName(field.getType(), kj::str(".Reader")));
kj::String builderClass = kj::str(typeName(typeBody, kj::str(".Builder"))); kj::String builderClass = kj::str(typeName(field.getType(), kj::str(".Builder")));
return FieldText { return FieldText {
kj::strTree( kj::strTree(
@ -1336,7 +1335,7 @@ private:
ConstText makeConstText(kj::StringPtr scope, kj::StringPtr name, ConstSchema schema, int indent) { ConstText makeConstText(kj::StringPtr scope, kj::StringPtr name, ConstSchema schema, int indent) {
auto proto = schema.getProto(); auto proto = schema.getProto();
auto constProto = proto.getConst(); auto constProto = proto.getConst();
auto type = constProto.getType(); auto type = schema.getType();
auto typeName_ = typeName(type).flatten(); auto typeName_ = typeName(type).flatten();
auto upperCase = toUpperCase(name); auto upperCase = toUpperCase(name);