Fix generic structs with non-generic interface as type parameter.

This commit is contained in:
jan 2022-03-21 01:27:06 +01:00
parent 88182b9b30
commit 3119bb5fab
2 changed files with 7 additions and 4 deletions

View file

@ -338,18 +338,22 @@ private:
if (liteMode) {
return kj::strTree("org.capnproto.Capability.", suffix);
}
auto interfaceSuffix = kj::str(suffix);
if(suffix == kj::str("Builder") || suffix == kj::str("Reader")) {
interfaceSuffix = kj::str("Client");
}
auto interfaceSchema = type.asInterface();
if (interfaceSchema.getProto().getIsGeneric()) {
auto typeArgs = getTypeArguments(interfaceSchema, interfaceSchema, kj::str(suffix));
return kj::strTree(
javaFullName(interfaceSchema), ".", suffix, "<",
javaFullName(interfaceSchema), ".", interfaceSuffix, "<",
kj::StringTree(KJ_MAP(arg, typeArgs){
return kj::strTree(arg);
}, ", "),
">"
);
} else {
return kj::strTree(javaFullName(type.asInterface()), ".", suffix);
return kj::strTree(javaFullName(type.asInterface()), ".", interfaceSuffix);
}
}
case schema::Type::LIST:

View file

@ -11,8 +11,7 @@ import static org.capnproto.ClientHook.NULL_CAPABILITY_BRAND;
public final class Capability {
public static abstract class Factory<T extends ClientBase>
implements FromPointerReader<T>,
FromPointerBuilder<T>,
implements PointerFactory<T, T>,
SetPointerBuilder<T, T> {
public abstract T newClient(ClientHook hook);