private void markRoots(Service service) { ProtoType protoType = service.type(); if (identifierSet.includes(protoType)) { marks.root(protoType); queue.add(protoType); } else { for (Rpc rpc : service.rpcs()) { markRoots(ProtoMember.get(protoType, rpc.name())); } } }
for (Rpc rpc : service.rpcs()) { ProtoType requestType = rpc.requestType(); TypeName requestJavaType = javaGenerator.typeName(requestType);
private void markService(Service service) { markOptions(service.options()); if (marks.containsAllMembers(service.type())) { for (Rpc rpc : service.rpcs()) { markRpc(service.type(), rpc); } } }
@Test public void rpcTypeImported() throws Exception { Schema schema = new RepoBuilder() .add("a.proto", "" + "package pa;\n" + "import \"b.proto\";\n" + "service Service {\n" + " rpc Call (pb.B) returns (pb.B);\n" + "}\n") .add("b.proto", "" + "package pb;\n" + "message B {\n" + "}\n") .schema(); Service service = schema.getService("pa.Service"); MessageType b = (MessageType) schema.getType("pb.B"); assertThat(service.rpcs().get(0).requestType()).isEqualTo(b.type()); assertThat(service.rpcs().get(0).responseType()).isEqualTo(b.type()); }
private void markRoots(Service service) { ProtoType protoType = service.type(); if (identifierSet.includes(protoType)) { marks.root(protoType); queue.add(protoType); } else { for (Rpc rpc : service.rpcs()) { markRoots(ProtoMember.get(protoType, rpc.name())); } } }
private void markRoots(Service service) { ProtoType protoType = service.type(); if (identifierSet.includes(protoType)) { marks.root(protoType); queue.add(protoType); } else { for (Rpc rpc : service.rpcs()) { markRoots(ProtoMember.get(protoType, rpc.name())); } } }
private void markService(Service service) { markOptions(service.options()); if (marks.containsAllMembers(service.type())) { for (Rpc rpc : service.rpcs()) { markRpc(service.type(), rpc); } } }
private void markService(Service service) { markOptions(service.options()); if (marks.containsAllMembers(service.type())) { for (Rpc rpc : service.rpcs()) { markRpc(service.type(), rpc); } } }
public TypeSpec generateService(ProtoFile protoFile, Service service) { ClassName apiName = (ClassName) typeName(service.type()); TypeSpec.Builder typeBuilder = TypeSpec.interfaceBuilder(apiName.simpleName()); typeBuilder.addModifiers(PUBLIC); InterfaceMetaInfo interfaceMetaInfo = InterfaceMetaInfo.readFrom(protoFile, service); typeBuilder.addAnnotations(interfaceMetaInfo.generateAnnotations()); if (!service.documentation().isEmpty()) { typeBuilder.addJavadoc("$L\n", service.documentation()); } for (Rpc rpc : service.rpcs()) { ProtoType requestType = rpc.requestType(); TypeName requestJavaType = typeName(requestType); ProtoType responseType = rpc.responseType(); TypeName responseJavaType = typeName(responseType); MethodSpec.Builder rpcBuilder = MethodSpec.methodBuilder(rpc.name()); MethodMetaInfo methodMetaInfo = MethodMetaInfo.readFrom(rpc); rpcBuilder.addAnnotation(serviceAnnotation(rpc, apiName, interfaceMetaInfo)); rpcBuilder.addAnnotation(methodMetaInfo.generateRaptorMethod()); rpcBuilder.addModifiers(PUBLIC, ABSTRACT); rpcBuilder.returns(responseJavaType); ParameterSpec request = ParameterSpec.builder(requestJavaType, "request").build(); rpcBuilder.addParameter(request); if (!rpc.documentation().isEmpty()) { rpcBuilder.addJavadoc("$L\n", rpc.documentation()); } typeBuilder.addMethod(rpcBuilder.build()); } return typeBuilder.build(); }
/** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md#paths-object * * @param protoFile * @param service * @return */ protected Paths getPath(ProtoFile protoFile, Service service) { Paths paths = new Paths(); String basePath = protoFile.packageName(); for (Rpc rpc : service.rpcs()) { String path = PathUtils.collectPath(basePath, rpc.name()); // TODO: 2018/5/23 处理path 相同,方法不同的问题, paths.addPathItem(path, getPathItem(rpc)); } return paths; }
/** * https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md#paths-object * * @param protoFile * @param service * @return */ @Override protected Paths getPath(ProtoFile protoFile, Service service) { Paths paths = new Paths(); String basePath = protoFile.packageName(); InterfaceMetaInfo interfaceMetaInfo = InterfaceMetaInfo.readFrom(protoFile, service); String servicePath = interfaceMetaInfo.getServicePath(); for (Rpc rpc : service.rpcs()) { String defaultName = PathUtils.collectPath(basePath , rpc.name()); MethodMetaInfo methodMetaInfo = MethodMetaInfo.readFrom(rpc); String path = methodMetaInfo.getPath(); path = StringUtils.isBlank(path) && StringUtils.isBlank(servicePath) ? defaultName : PathUtils.collectPath(servicePath, path); // TODO: 2018/5/23 处理path 相同,方法不同的问题, PathItem pathItem = paths.get(path); if(Objects.isNull(pathItem)){ paths.addPathItem(path, getPathItem(rpc)); }else{ addOperation(rpc,pathItem); } } return paths; }