@VisibleForTesting static <E extends FieldModel> List<FieldModel> responseInitFields(List<E> fields) { HashSet<Oneof> oneofSet = new HashSet<>(); return fields .stream() .filter(f -> f.isPrimitive() && !f.isRepeated()) .filter( f -> { // Includes field if field is not a part of a oneof, or it's the first field of the // oneof. Oneof oneof = f.getOneof(); return oneof == null || oneofSet.add(oneof); }) .collect(Collectors.toList()); }
/** Returns a string representing the ordered fields in a flattening config. */ private static String flatteningConfigToString(FlatteningConfig flatteningConfig) { Iterable<FieldModel> paramList = flatteningConfig.getFlattenedFields(); StringBuilder paramsAsString = new StringBuilder(); paramList.forEach(p -> paramsAsString.append(p.getSimpleName()).append(", ")); return paramsAsString.toString(); } }
/** Get the full name for the given type. */ @Override public String getFullNameFor(FieldModel type) { return getFullNameFor(type.getType()); }
@Override public String getByteLengthFunctionName(FieldModel typeRef) { if (typeRef.isMessage()) { return "gax.createByteLengthFunction(protoFilesRoot.lookup('" + typeRef.getTypeFullName() + "'))"; } else if (typeRef.isString() || typeRef.isBytes()) { return "s => s.length"; } else { // There is no easy way to say the actual length of the numeric fields. // For now throwing an exception. throw new IllegalArgumentException( "Can't determine the byte length function for " + typeRef.getKind()); } }
boolean fieldHasResourceName(FieldModel field) { return fieldHasResourceName(field.getParentFullName(), field.getSimpleName()); }
/** The function name to set the given field. */ public String getFieldSetFunctionName(FieldModel field) { return getFieldSetFunctionName( field.getNameAsParameterName(), MapType.ofMap(field.isMap()), Cardinality.ofRepeated(field.isRepeated())); }
boolean isRequired = false; for (FieldModel f : requiredFields) { if (f.getSimpleName().equals(field.getSimpleName())) { isRequired = true; param.setCallName(namer.getFieldSetFunctionName(featureConfig, fieldConfig)); param.getCallName(namer.getFieldGetFunctionName(featureConfig, fieldConfig)); param.isMap(field.isMap()); param.isArray(!field.isMap() && field.isRepeated()); param.isPrimitive(field.isPrimitive()); param.isOptional(!isRequired); if (!isRequired) {
@Override public String getResourceNameFieldGetFunctionName(FieldConfig fieldConfig) { FieldModel type = fieldConfig.getField(); String fieldName = fieldConfig.getField().getSimpleName(); Name identifier = Name.from(fieldName); Name resourceName; if (type.isMap()) { return getNotImplementedString("SurfaceNamer.getResourceNameFieldGetFunctionName:map-type"); !((type.isRepeated() && fieldName.toLowerCase().equals("names")) || (!type.isRepeated() && fieldName.toLowerCase().equals("name"))); boolean requireAs = requireIdentifier || (fieldConfig.getResourceNameType() == ResourceNameType.ANY); boolean requirePlural = type.isRepeated();
FieldModel field = config.getResourcesField(); InitCodeNode initCodeNode; if (field.isRepeated()) { initCodeNode = InitCodeNode.createSingletonList(config.getResourcesFieldName()); } else { initCodeNode = InitCodeNode.create(field.getNameAsParameter()); if (config.getResourcesField().isMap()) { initCodeNode = InitCodeNode.createWithChildren( config.getResourcesField().getNameAsParameter(), MapInitLine, initCodeNode); String responseTokenName = config.getResponseTokenField().getSimpleName(); additionalSubTrees.add( InitCodeNode.createWithValue( String subResponseFieldName = config.getSubresponseField().getSimpleName(); additionalSubTrees.add(InitCodeNode.createSingletonList(subResponseFieldName)); GrpcStreamingConfig streamingConfig = context.getMethodConfig().getGrpcStreaming(); if (streamingConfig.hasResourceField()) { String resourceFieldName = streamingConfig.getResourcesField().getSimpleName(); additionalSubTrees.add(InitCodeNode.createSingletonList(resourceFieldName));
/** * The function name to get the count of elements in the given field. * * @throws IllegalArgumentException if the field is not a repeated field. */ public String getFieldCountGetFunctionName(FieldModel field) { if (field.isRepeated()) { return publicMethodName(Name.from("get").join(field.getNameAsParameterName()).join("count")); } else { throw new IllegalArgumentException( "Non-repeated field " + field.getSimpleName() + " has no count function."); } }
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 ""; }
@Override public List<String> getParameterList(MethodModel method) { return method .getInputFields() .stream() .filter(f -> f.getOneof() == null && !isIgnoredParameter(f.getSimpleName())) .map(FieldModel::getSimpleName) .collect(Collectors.toList()); } }
paramDoc.typeName(namer.getParamTypeName(context.getTypeTable(), field.getType())); ImmutableList.Builder<String> docLines = ImmutableList.builder(); if (isPageSizeParam(methodConfig, field)) { } else { docLines.addAll(namer.getDocLines(field)); boolean isMessageField = field.isMessage() && !field.isMap(); boolean isMapContainingMessage = field.isMap() && field.getType().getMapValueType().isMessage(); if (isMessageField || isMapContainingMessage) { String messageType; if (isMapContainingMessage) { messageType = context.getTypeTable().getFullNameForElementType(field.getType().getMapValueType()); } else { messageType = context.getTypeTable().getFullNameForElementType(field);
@Override public String getOptionalFieldDefaultValue(FieldConfig fieldConfig, MethodContext context) { // Need to provide defaults for primitives, enums, strings, and repeated (including maps) FieldModel type = fieldConfig.getField(); if (context.getFeatureConfig().useResourceNameFormatOption(fieldConfig)) { if (type.isRepeated()) { TypeNameConverter typeNameConverter = getTypeNameConverter(); TypeName elementTypeName = typeNameConverter.getTypeName(getResourceTypeName(fieldConfig.getResourceNameConfig())); TypeName enumerableTypeName = typeNameConverter.getTypeName("System.Linq.Enumerable"); TypeName emptyTypeName = new TypeName( enumerableTypeName.getFullName(), enumerableTypeName.getNickname(), "%s.Empty<%i>", elementTypeName); return TypedValue.create(emptyTypeName, "%s()") .getValueAndSaveTypeNicknameIn((CSharpTypeTable) typeNameConverter); } else { return null; } } else { if (type.isPrimitive() || type.isEnum() || type.isRepeated()) { return context.getTypeTable().getImplZeroValueAndSaveNicknameFor(type); } else { return null; } } }
if (field.isEnum()) { context.getTypeTable().getFullNameFor(field.getType().makeOptional()); if (field.isRepeated()) { paramDoc.typeName("int[]"); } else {
/** 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); }
List<ResourceProtoFieldView> fieldViews = new ArrayList<>(); for (FieldModel field : fields) { FieldConfig fieldConfig = fieldConfigMap.get(field.getFullName()); ResourceNameConfig resourceNameConfig = fieldConfig.getResourceNameConfig(); String fieldTypeSimpleName = namer.getResourceTypeName(resourceNameConfig); .getImportTypeTable() .getAndSaveNicknameForTypedResourceName(fieldConfig, fieldTypeSimpleName); if (field.isRepeated()) { fieldTypeName = fieldTypeName.replaceFirst( .elementTypeName(fieldElementTypeName) .isAny(fieldConfig.getResourceNameType() == ResourceNameType.ANY) .isRepeated(field.isRepeated()) .isOneof(fieldConfig.getResourceNameType() == ResourceNameType.ONEOF) .propertyName(namer.getResourceNameFieldGetFunctionName(fieldConfig)) .underlyingPropertyName(namer.publicMethodName(Name.from(field.getSimpleName()))) .build(); fieldViews.add(fieldView);
/** The function name to get a field having the given type and name. */ public String getFieldGetFunctionName(FieldModel type, Name identifier) { return getFieldGetFunctionName( identifier, MapType.ofMap(type.isMap()), Cardinality.ofRepeated(type.isRepeated())); }
/** * The function name to get an element by index from the given field. * * @throws IllegalArgumentException if the field is not a repeated field. */ public String getByIndexGetFunctionName(FieldModel field) { if (field.isRepeated()) { return publicMethodName(Name.from("get", field.getSimpleName())); } else { throw new IllegalArgumentException( "Non-repeated field " + field.getSimpleName() + " has no get-by-index function."); } }
/** * Get the paged resource field. We assume it will be the FIRST REPEATED field in the response * message. */ public static FieldModel getResourcesField(MethodModel method) { for (FieldModel field : method.getOutputFields()) { // Return the first repeated field. if (field.isRepeated()) { return field; } } return null; }