@Override public String getApiMethodName(MethodModel method, VisibilityConfig visibility) { // This is defined in grpc/generic/service.rb return method .getSimpleName() .replaceAll("([A-Z]+)([A-Z][a-z])", "$1_$2") .replaceAll("([a-z\\d])([A-Z])", "$1_$2") .replaceAll("-", "_") .toLowerCase(); }
/** The key to use in a dictionary for the given method. */ public String getMethodKey(MethodModel method) { return keyName(method.asName()); }
@Override public String getGrpcStreamingApiReturnTypeName( MethodContext methodContext, ImportTypeTable typeTable) { MethodModel method = methodContext.getMethodModel(); if (method.getRequestStreaming() && method.getResponseStreaming()) { // Bidirectional streaming return typeTable.getAndSaveNicknameForContainer( "Grpc.Core.AsyncDuplexStreamingCall", method.getAndSaveRequestTypeName(typeTable, methodContext.getNamer()), method.getAndSaveResponseTypeName(typeTable, methodContext.getNamer())); } else if (method.getRequestStreaming()) { // Client streaming return typeTable.getAndSaveNicknameForContainer( "Grpc.Core.AsyncClientStreamingCall", method.getAndSaveRequestTypeName(typeTable, methodContext.getNamer()), method.getAndSaveResponseTypeName(typeTable, methodContext.getNamer())); } else if (method.getResponseStreaming()) { // Server streaming return typeTable.getAndSaveNicknameForContainer( "Grpc.Core.AsyncServerStreamingCall", method.getOutputTypeName(methodContext.getTypeTable()).getFullName()); } else { throw new IllegalArgumentException("Expected some sort of streaming here."); } }
@Override public String getExceptionTestCaseName(SymbolTable symbolTable, MethodModel method) { Name testCaseName = symbolTable.getNewSymbol( Name.upperCamel("Test", method.getParentSimpleName(), method.getSimpleName(), "Error")); return publicMethodName(testCaseName); }
@Override public List<String> getDocLines(MethodModel method, MethodConfig methodConfig) { return super.getDocLines( putDocMethodName( method.getSimpleName(), method.getDescription(), methodConfig.getVisibility())); }
@Override public String getStreamingServerName(MethodModel method) { // Unsafe string manipulation: The name looks like "LibraryService_StreamShelvesServer", // neither camel or underscore. return method.getParentNickname(converter) + "_" + publicClassName(Name.upperCamel(method.getSimpleName()).join("server")); }
@Override public String getAndSavePagedResponseTypeName( MethodContext methodContext, FieldConfig resourceFieldConfig) { ImportTypeTable typeTable = methodContext.getTypeTable(); String inputTypeName = methodContext .getMethodModel() .getAndSaveRequestTypeName(methodContext.getTypeTable(), methodContext.getNamer()); String outputTypeName = methodContext .getMethodModel() .getAndSaveResponseTypeName(methodContext.getTypeTable(), methodContext.getNamer()); String resourceTypeName = getResourceTypeName(typeTable, resourceFieldConfig); return typeTable.getAndSaveNicknameForContainer( "Google.Api.Gax.PagedEnumerable", inputTypeName, outputTypeName, resourceTypeName); }
PageStreamingConfigProto pageStreaming = methodConfigProto.getPageStreaming(); String requestTokenFieldName = pageStreaming.getRequest().getTokenField(); FieldModel requestTokenField = method.getInputField(requestTokenFieldName); if (requestTokenField == null) { diagCollector.addDiag( SimpleLocation.TOPLEVEL, "Request field missing for page streaming: method = %s, message type = %s, field = %s", method.getFullName(), method.getInputFullName(), requestTokenFieldName)); FieldModel pageSizeField = null; if (!Strings.isNullOrEmpty(pageSizeFieldName)) { pageSizeField = method.getInputField(pageSizeFieldName); if (pageSizeField == null) { diagCollector.addDiag( SimpleLocation.TOPLEVEL, "Request field missing for page streaming: method = %s, message type = %s, field = %s", method.getFullName(), method.getInputFullName(), pageSizeFieldName)); FieldModel responseTokenField = method.getOutputField(responseTokenFieldName); if (responseTokenField == null) { diagCollector.addDiag( SimpleLocation.TOPLEVEL,
String batchedFieldName = batchDescriptor.getBatchedField(); FieldModel batchedField; batchedField = method.getInputField(batchedFieldName); if (batchedField == null) { diagCollector.addDiag( SimpleLocation.TOPLEVEL, "Batched field missing for batch config: method = %s, message type = %s, field = %s", method.getFullName(), method.getInputFullName(), batchedFieldName)); GenericFieldSelector selector = method.getInputFieldSelector(discriminatorName); if (selector == null) { diagCollector.addDiag( "Discriminator field missing for batch config: method = %s, message type = %s, " + "field = %s", method.getFullName(), method.getInputFullName(), discriminatorName)); FieldModel subresponseField = null; if (!subresponseFieldName.isEmpty()) { subresponseField = method.getOutputField(subresponseFieldName);
private ListItemConfigNode generateMethodNode( int startLine, MethodModel method, Map<String, String> collectionNameMap) { ListItemConfigNode methodNode = new ListItemConfigNode(startLine); ConfigNode nameNode = FieldConfigNode.createStringPair(startLine, "name", method.getSimpleName()); methodNode.setChild(nameNode); ConfigNode prevNode = generateField(nameNode, method); prevNode = pageStreamingMerger.generatePageStreamingNode(prevNode, method); prevNode = retryMerger.generateRetryNamesNode(prevNode, method); prevNode = generateFieldNamePatterns(prevNode, method, collectionNameMap); if (method.getOutputType().toString().contains("google.longrunning.Operation")) { prevNode = generateLongRunningNode(prevNode, method); } generateTimeout(prevNode, method); return methodNode; }
private MethodDescriptorView generateMethodDescriptor(MethodContext context) { ImportTypeTable typeTable = context.getTypeTable(); MethodModel method = context.getMethodModel(); MethodConfig methodConfig = context.getMethodConfig(); SurfaceNamer namer = context.getNamer(); MethodDescriptorView.Builder methodDescriptorBuilder = MethodDescriptorView.newBuilder(); if (methodConfig.isGrpcStreaming()) { methodDescriptorBuilder.grpcStreamingType(methodConfig.getGrpcStreaming().getType()); } methodDescriptorBuilder.requestTypeName(method.getAndSaveRequestTypeName(typeTable, namer)); methodDescriptorBuilder.responseTypeName(method.getAndSaveResponseTypeName(typeTable, namer)); methodDescriptorBuilder.hasResponse(!method.isOutputTypeEmpty()); methodDescriptorBuilder.name(namer.getMethodDescriptorName(method)); methodDescriptorBuilder.protoMethodName(method.getSimpleName()); methodDescriptorBuilder.fullServiceName(context.getTargetInterface().getFullName()); methodDescriptorBuilder.transportSettingsVar(namer.getTransportSettingsVar(method)); methodDescriptorBuilder.headerRequestParams( headerRequestParamTransformer.generateHeaderRequestParams(context)); methodDescriptorBuilder.httpMethod(generateHttpFields(context)); return methodDescriptorBuilder.build(); } }
String callerResponseTypeName; String fullyQualifiedResponseTypeName = methodContext.getMethodModel().getOutputTypeName(typeTable).getFullName(); } else if (clientMethodType == ClientMethodType.CallableMethod) { clientMethodName = namer.getCallableMethodName(method); responseTypeName = method.getAndSaveResponseTypeName(typeTable, namer); callerResponseTypeName = responseTypeName; } else { ? namer.getApiMethodName(method, methodConfig.getVisibility()) : namer.getAsyncApiMethodName(method, methodConfig.getVisibility()); responseTypeName = method.getAndSaveResponseTypeName(typeTable, namer); callerResponseTypeName = responseTypeName; boolean hasReturnValue = !method.isOutputTypeEmpty(); if (methodConfig.isLongRunningOperation()) { hasReturnValue = !methodConfig.getLongRunningConfig().getReturnType().isEmptyType(); .pageStreamingResponseViews(createPageStreamingResponseViews(methodContext)) .grpcStreamingView(grpcStreamingView) .requestTypeName(method.getAndSaveRequestTypeName(typeTable, namer)) .responseTypeName(responseTypeName) .callerResponseTypeName(callerResponseTypeName) .fullyQualifiedRequestTypeName(method.getInputTypeName(typeTable).getFullName()) .fullyQualifiedResponseTypeName(fullyQualifiedResponseTypeName) .serviceConstructorName(
Set<String> oneofNames = new HashSet<>(); List<String> flattenedParams = Lists.newArrayList(flatteningGroup.getParametersList()); if (method.hasExtraFieldMask()) { flattenedParams.add(DiscoveryMethodTransformer.FIELDMASK_STRING); FieldModel parameterField = method.getInputField(parameter); if (parameterField == null) { diagCollector.addDiag( SimpleLocation.TOPLEVEL, "Field missing for flattening: method = %s, message type = %s, field = %s", method.getFullName(), method.getInputFullName(), parameter)); return null; "Value from oneof already specifed for flattening:%n" + "method = %s, message type = %s, oneof = %s", method.getFullName(), method.getInputFullName(), oneofName)); return null;
private String getResourcesFieldName(MethodModel method, ConfigHelper helper) { FieldModel resourcesField = getResourcesField(method); if (resourcesField != null) { return resourcesField.getSimpleName(); } helper.error( method.getFullName(), "Page streaming resources field could not be heuristically determined for " + "method '%s'%n", method.getSimpleName()); return null; } }
apiMethod.requestVariableName(namer.getRequestVariableName(method)); apiMethod.requestTypeName( namer.getAndSaveTypeName(context.getTypeTable(), context.getMethodModel().getInputType())); apiMethod.responseTypeName( namer.getAndSaveTypeName(context.getTypeTable(), context.getMethodModel().getOutputType())); apiMethod.hasReturnValue(!ServiceMessages.s_isEmptyType(context.getMethod().getOutputType())); apiMethod.key(namer.getMethodKey(method)); context.getMethodModel().getRequestStreaming() ? InitCodeOutputType.SingleObject : InitCodeOutputType.FieldList;
Method method = methodConfig.getMethod(); MethodModel methodModel = methodConfig.getMethodModel(); String classInfo = getParamTypeName(typeTable, methodModel.getOutputType()); String callbackType; if (isProtobufEmpty(method.getOutputMessage())) { " parameter is set to be used for the next request object. The fourth parameter keeps", " the raw response object of " + getTypeNameDoc(typeTable, methodModel.getOutputType()) + ".");
/** * Gets the ProtoFile objects in which the fields of the reachable methods in the model are * defined. */ public static Iterable<ProtoFile> getProtoFiles(GapicProductConfig productConfig) { Set<ProtoFile> files = newFileSet(); for (InterfaceConfig interfaceConfig : productConfig.getInterfaceConfigMap().values()) { for (MethodConfig methodConfig : interfaceConfig.getMethodConfigs()) { MethodModel method = methodConfig.getMethodModel(); files.addAll( getFilesForMessage( ((ProtoTypeRef) method.getInputType()).getProtoType().getMessageType(), false)); files.addAll( getFilesForMessage( ((ProtoTypeRef) method.getOutputType()).getProtoType().getMessageType(), false)); } } return files; }
private SmokeTestClassView createSmokeTestClassView(InterfaceContext context) { SurfaceNamer namer = context.getNamer(); MethodModel method = context.getInterfaceConfig().getSmokeTestConfig().getMethod(); MethodContext methodContext = context.asRequestMethodContext(method); SmokeTestClassView.Builder testClass = SmokeTestClassView.newBuilder(); StaticLangApiMethodView apiMethodView = createSmokeTestCaseApiMethodView(methodContext); testClass.apiSettingsClassName(namer.getApiSettingsClassName(context.getInterfaceConfig())); testClass.apiClassName(namer.getApiWrapperClassName(context.getInterfaceConfig())); testClass.name(namer.getSmokeTestClassName(context.getInterfaceConfig())); testClass.outputPath( context.getProductConfig().getPackageName() + File.separator + method.getSimpleName() + "_smoke_test.go"); testClass.templateFileName(SMOKE_TEST_TEMPLATE_FILE); testClass.apiMethod(apiMethodView); testClass.requireProjectId( testCaseTransformer.requireProjectIdInSmokeTest( apiMethodView.initCode(), context.getNamer())); // The shared code above add imports both for input and output. // Since we use short decls, we don't need to import anything for output. context.getImportTypeTable().getImports().clear(); method.getAndSaveRequestTypeName(methodContext.getTypeTable(), methodContext.getNamer()); FileHeaderView fileHeader = fileHeaderTransformer.generateFileHeader(context); testClass.fileHeader(fileHeader); return testClass.build(); }
@Override public String getAndSavePagedResponseTypeName( MethodContext methodContext, FieldConfig resourcesFieldConfig) { return methodContext .getMethodModel() .getAndSaveResponseTypeName(methodContext.getTypeTable(), methodContext.getNamer()); }
static Iterable<FieldModel> getRequiredFields( DiagCollector diagCollector, MethodModel method, List<String> requiredFieldNames) { ImmutableList.Builder<FieldModel> fieldsBuilder = ImmutableList.builder(); for (String fieldName : requiredFieldNames) { FieldModel requiredField = method.getInputField(fieldName); if (requiredField == null) { diagCollector.addDiag( Diag.error( SimpleLocation.TOPLEVEL, "Required field '%s' not found (in method %s)", fieldName, method.getFullName())); return null; } else if (requiredField.getOneof() != null) { diagCollector.addDiag( Diag.error( SimpleLocation.TOPLEVEL, "oneof field %s cannot be required (in method %s)", fieldName, method.getFullName())); return null; } fieldsBuilder.add(requiredField); } return fieldsBuilder.build(); }