/** Get the full name for the given type. */ @Override public String getFullNameFor(FieldModel type) { return getFullNameFor(type.getType()); }
/** Returns the nickname for the given type (without adding the full name to the import set). */ @Override public String getNicknameFor(FieldModel type) { return getNicknameFor(type.getType()); }
@Override public TypeName getTypeNameForElementType(FieldModel type) { return getTypeNameForElementType(type.getType()); }
@Override public boolean isPrimitive(FieldModel type) { return isPrimitive(type.getType()); }
/** The type name for the message property */ public String getMessagePropertyTypeName(ImportTypeTable typeTable, FieldModel type) { return getParamTypeName(typeTable, type.getType()); }
@Override public TypedValue getSnippetZeroValue(FieldModel type) { return getSnippetZeroValue(type.getType()); }
@Override public TypeName getTypeNameForTypedResourceName( FieldConfig fieldConfig, String typedResourceShortName) { return getTypeNameForTypedResourceName( fieldConfig, fieldConfig.getField().getType(), typedResourceShortName); }
@Override public TypeName getTypeNameForResourceNameElementType( FieldConfig fieldConfig, String typedResourceShortName) { return getTypeNameForTypedResourceName( fieldConfig, fieldConfig.getField().getType().makeOptional(), typedResourceShortName); }
@Override public TypeName getTypeNameForTypedResourceName( FieldConfig fieldConfig, String typedResourceShortName) { TypeRef typeRef = ((ProtoTypeRef) fieldConfig.getField().getType()).getProtoType(); return getTypeNameForTypedResourceName( fieldConfig.getResourceNameConfig(), typeRef, typedResourceShortName); }
private static TypeModel getChildType(TypeModel parentType, String key) { if (parentType.isMap()) { return parentType.getMapValueType(); } else if (parentType.isRepeated()) { // Using the Optional cardinality replaces the Repeated cardinality return parentType.makeOptional(); } else if (parentType.isMessage()) { FieldModel childField = parentType.getField(key); if (childField == null) { throw new IllegalArgumentException( "Message type " + parentType + " does not have field " + key); } return childField.getType(); } else { throw new IllegalArgumentException( "Primitive type " + parentType + " cannot have children. Child key: " + key); } }
@Override public TypeName getTypeNameForResourceNameElementType( FieldConfig fieldConfig, String typedResourceShortName) { TypeRef typeRef = ((ProtoTypeRef) fieldConfig.getField().getType()).getProtoType(); return getTypeNameForTypedResourceName( fieldConfig.getResourceNameConfig(), typeRef.makeOptional(), typedResourceShortName); }
private String getExtraFieldDescription(FieldModel field) { boolean fieldIsMessage = field.isMessage() && !field.isMap(); boolean fieldIsEnum = field.isEnum(); if (fieldIsMessage) { return "This object should have the same structure as " + commentReformatter.getLinkedElementName( ((ProtoTypeRef) field.getType()).getProtoType().getMessageType()); } else if (fieldIsEnum) { return "The number should be among the values of " + commentReformatter.getLinkedElementName( ((ProtoTypeRef) field.getType()).getProtoType().getEnumType()); } return ""; }
String typeName = namer.getParamTypeName(context.getTypeTable(), field.getType()); paramDoc.typeName(typeName); List<String> fieldDocLines = namer.getDocLines(field);
private String returnTypeDoc(ImportTypeTable typeTable, GapicMethodConfig methodConfig) { String returnTypeDoc = ""; if (methodConfig.isPageStreaming()) { returnTypeDoc = "Array of "; FieldModel resourcesType = methodConfig.getPageStreaming().getResourcesField(); if (resourcesType.isMessage()) { returnTypeDoc += commentReformatter.getLinkedElementName( ((ProtoTypeRef) resourcesType.getType()).getProtoType().getMessageType()); } else if (resourcesType.isEnum()) { returnTypeDoc += commentReformatter.getLinkedElementName( ((ProtoTypeRef) resourcesType.getType()).getProtoType().getEnumType()); } else { // Converting to lowercase because "String" is capitalized in NodeJSModelTypeNameConverter. returnTypeDoc += getParamTypeNoCardinality(typeTable, resourcesType.getType()).toLowerCase(); } } else if (methodConfig.isLongRunningOperation()) { returnTypeDoc = "a [gax.Operation]{@link https://googleapis.github.io/gax-nodejs/Operation} object"; } else { returnTypeDoc = getTypeNameDoc(typeTable, ProtoTypeRef.create(methodConfig.getMethod().getOutputType())); } return returnTypeDoc; }
@Test public void testAccessorNewVariablePageStreamingResponse() { Scanner scanner = new Scanner("$resp"); when(config.getPageStreaming()).thenReturn(pageStreamingConfig); when(pageStreamingConfig.getResourcesFieldConfig()).thenReturn(resourceFieldConfig); when(featureConfig.useResourceNameFormatOption(resourceFieldConfig)).thenReturn(false); FieldModel fieldModel = mock(FieldModel.class); when(resourceFieldConfig.getField()).thenReturn(fieldModel); TypeModel typeModel = mock(TypeModel.class); when(fieldModel.getType()).thenReturn(typeModel); when(typeModel.makeOptional()).thenReturn(typeModel); when(namer.getAndSaveTypeName(typeTable, typeModel)).thenReturn("TypeName"); OutputView.VariableView variableView = accessorNewVariable(scanner, context, valueSet, parent, "newVar", false); assertThat(variableView.variable()).isEqualTo("sampleResponseVarName"); assertThat(variableView.accessors()).isEmpty(); assertThat(parent.getTypeName("newVar")).isEqualTo("TypeName"); assertThat(parent.getTypeModel("newVar")).isEqualTo(typeModel); }
@Test public void testAccessorNewVariableWithAccessors() { Scanner scanner = new Scanner("old_var.property"); when(namer.localVarName(Name.from("old_var"))).thenReturn("oldVar"); TypeModel oldVarTypeModel = mock(TypeModel.class); assertThat(parent.put("old_var", oldVarTypeModel, "OldVarType")).isTrue(); when(oldVarTypeModel.isMessage()).thenReturn(true); when(oldVarTypeModel.isRepeated()).thenReturn(false); when(oldVarTypeModel.isMap()).thenReturn(false); FieldModel propertyFieldModel = mock(FieldModel.class); when(oldVarTypeModel.getField("property")).thenReturn(propertyFieldModel); TypeModel propertyTypeModel = mock(TypeModel.class); when(namer.getFieldGetFunctionName(propertyFieldModel)).thenReturn("getProperty"); when(namer.getAndSaveTypeName(typeTable, propertyTypeModel)).thenReturn("PropertyTypeName"); when(propertyFieldModel.getType()).thenReturn(propertyTypeModel); OutputView.VariableView variableView = accessorNewVariable(scanner, context, valueSet, parent, "newVar", false); assertThat(variableView.variable()).isEqualTo("oldVar"); assertThat(variableView.accessors()) .containsExactly(AccessorView.FieldView.newBuilder().field("getProperty").build()) .inOrder(); assertThat(parent.getTypeName("newVar")).isEqualTo("PropertyTypeName"); assertThat(parent.getTypeModel("newVar")).isEqualTo(propertyTypeModel); }
@Override public List<String> getReturnDocLines( TransformationContext context, MethodContext methodContext, Synchronicity synchronicity) { MethodConfig methodConfig = methodContext.getMethodConfig(); TypeRef outputType = ((GapicMethodConfig) methodConfig).getMethod().getOutputType(); if (ServiceMessages.s_isEmptyType(outputType)) { return ImmutableList.<String>of(); } String returnTypeName = methodConfig.isLongRunningOperation() ? "google.gax._OperationFuture" : getModelTypeFormatter().getFullNameFor(outputType); String classInfo = PythonDocstringUtil.napoleonType(returnTypeName, getVersionedDirectoryNamespace()); if (((GapicMethodConfig) methodConfig).getMethod().getResponseStreaming()) { return ImmutableList.of("Iterable[" + classInfo + "]."); } if (methodConfig.isPageStreaming()) { FieldModel fieldModel = methodConfig.getPageStreaming().getResourcesField(); return ImmutableList.of( "A :class:`~google.gax.PageIterator` instance. By default, this", "is an iterable of " + annotateWithClass(getResponseTypeNameForElementType(fieldModel.getType())) + " instances.", "This object can also be configured to iterate over the pages", "of the response through the `options` parameter."); } return ImmutableList.of(String.format("A %s instance.", annotateWithClass(classInfo))); }
@Test public void testAccessorNewVariableWithIndex() { Scanner scanner = new Scanner("old_var.property[0]"); when(namer.localVarName(Name.from("old_var"))).thenReturn("oldVar"); TypeModel oldVarTypeModel = mock(TypeModel.class); assertThat(parent.put("old_var", oldVarTypeModel, "OldVarType")).isTrue(); when(oldVarTypeModel.isMessage()).thenReturn(true); when(oldVarTypeModel.isRepeated()).thenReturn(false); when(oldVarTypeModel.isMap()).thenReturn(false); FieldModel propertyFieldModel = mock(FieldModel.class); when(oldVarTypeModel.getField("property")).thenReturn(propertyFieldModel); TypeModel propertyTypeModel = mock(TypeModel.class); when(namer.getFieldGetFunctionName(propertyFieldModel)).thenReturn("getProperty"); when(propertyTypeModel.isRepeated()).thenReturn(true); TypeModel optionalPropertyTypeModel = mock(TypeModel.class); when(propertyTypeModel.makeOptional()).thenReturn(optionalPropertyTypeModel); when(namer.getAndSaveTypeName(typeTable, optionalPropertyTypeModel)) .thenReturn("OptionalPropertyTypeName"); when(propertyFieldModel.getType()).thenReturn(propertyTypeModel); OutputView.VariableView variableView = accessorNewVariable(scanner, context, valueSet, parent, "newVar", false); assertThat(variableView.variable()).isEqualTo("oldVar"); assertThat(variableView.accessors()) .containsExactly( AccessorView.FieldView.newBuilder().field("getProperty").build(), AccessorView.IndexView.newBuilder().index("0").build()) .inOrder(); assertThat(parent.getTypeName("newVar")).isEqualTo("OptionalPropertyTypeName"); assertThat(parent.getTypeModel("newVar")).isEqualTo(optionalPropertyTypeModel); }
/** The type name for the message property */ @Override public String getMessagePropertyTypeName(ImportTypeTable importTypeTable, FieldModel fieldModel) { if (fieldModel.isMap()) { String keyTypeName = importTypeTable.getFullNameForElementType(fieldModel.getType().getMapKeyType()); String valueTypeName = importTypeTable.getFullNameForElementType(fieldModel.getType().getMapValueType()); return new TypeName( importTypeTable.getFullNameFor(fieldModel), importTypeTable.getNicknameFor(fieldModel), "%s{%i => %i}", new TypeName(keyTypeName), new TypeName(valueTypeName)) .getFullName(); } if (fieldModel.isRepeated()) { String elementTypeName = importTypeTable.getFullNameForElementType(fieldModel); return new TypeName( importTypeTable.getFullNameFor(fieldModel), importTypeTable.getNicknameFor(fieldModel), "%s<%i>", new TypeName(elementTypeName)) .getFullName(); } return importTypeTable.getFullNameForElementType(fieldModel); }
private ApiMethodDocView generateMethodDoc(GapicMethodContext context) { ApiMethodDocView.Builder docBuilder = ApiMethodDocView.newBuilder(); SurfaceNamer surfaceNamer = context.getNamer(); MethodModel method = context.getMethodModel(); MethodConfig methodConfig = context.getMethodConfig(); docBuilder.mainDocLines(surfaceNamer.getDocLines(method, methodConfig)); docBuilder.paramDocs(apiMethodParamTransformer.generateParamDocs(context)); docBuilder.returnTypeName(surfaceNamer.getDynamicLangReturnTypeName(context)); docBuilder.returnsDocLines( surfaceNamer.getReturnDocLines( context.getSurfaceInterfaceContext(), context, Synchronicity.Sync)); if (methodConfig.isPageStreaming()) { docBuilder.pageStreamingResourceTypeName( surfaceNamer.getTypeNameDoc( context.getTypeTable(), methodConfig.getPageStreaming().getResourcesField().getType())); } docBuilder.throwsDocLines(surfaceNamer.getThrowsDocLines(methodConfig)); return docBuilder.build(); }