@Override public String getParamTypeName(ImportTypeTable typeTable, TypeModel type) { String cardinalityComment = ""; if (type.isRepeated()) { if (type.isMap()) { String keyType = getParamTypeName(typeTable, type.getMapKeyType()); String valueType = getParamTypeName(typeTable, type.getMapValueType()); return String.format("Object.<%s, %s>", keyType, valueType); } else { cardinalityComment = "[]"; } } return String.format("%s%s", getParamTypeNoCardinality(typeTable, type), cardinalityComment); }
/** The function name to get a field having the given type and name. */ public String getFieldGetFunctionName(TypeModel type, Name identifier) { return getFieldGetFunctionName( identifier, MapType.ofMap(type.isMap()), Cardinality.ofRepeated(type.isRepeated())); }
private static FieldConfig getChildFieldConfig( Map<String, FieldConfig> fieldConfigMap, FieldConfig parentFieldConfig, TypeModel parentType, String key) { if (parentType.isMap()) { return parentFieldConfig; } else if (parentType.isRepeated()) { return parentFieldConfig; } else if (parentType.isMessage()) { FieldModel childField = parentType.getField(key); if (childField == null) { throw new IllegalArgumentException( "Message type " + parentType + " does not have field " + key); } FieldConfig fieldConfig = fieldConfigMap.get(childField.getFullName()); if (fieldConfig == null) { fieldConfig = FieldConfig.createDefaultFieldConfig(childField); } return fieldConfig; } else { throw new IllegalArgumentException( "Primitive type " + parentType + " cannot have children. Child key: " + key); } }
private static void validateKeyValue(TypeModel parentType, String key) { if (parentType.isMap()) { TypeModel keyType = parentType.getMapKeyType(); validateValue(keyType, key); } else if (parentType.isRepeated()) { validateValue(INT_TYPE, key); } else { // Don't validate message types, field will be missing for a bad key } }
/** The function name to set a field having the given type and name. */ public String getFieldSetFunctionName(TypeModel type, Name identifier) { return getFieldSetFunctionName( identifier, MapType.ofMap(type.isMap()), Cardinality.ofRepeated(type.isRepeated())); } /** The function name to get a field having the given name. */
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); } }
private TypeName getTypeNameForTypedResourceName( FieldConfig fieldConfig, TypeModel type, String typedResourceShortName) { String nickName = typeNameConverter.getAndSaveNicknameFor(typedResourceShortName); TypeName simpleTypeName = new TypeName(typedResourceShortName, nickName); if (type.isMap()) { throw new IllegalArgumentException("Map type not supported for typed resource name"); } else if (type.isRepeated()) { TypeName listTypeName = typeNameConverter.getTypeName("System.Collections.Generic.IEnumerable"); return new TypeName( listTypeName.getFullName(), listTypeName.getNickname(), "%s<%i>", simpleTypeName); } else { return simpleTypeName; } }
@Override public String getFieldSetFunctionName(TypeModel type, Name identifier) { if (type.isMap() || type.isRepeated()) { return publicMethodName(Name.from("add").join(identifier)); } else { return publicMethodName(Name.from("set").join(identifier)); } }
@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); }
@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); }
config.input()); Preconditions.checkArgument( !type.isRepeated() && !type.isMap(), "%s:%s: %s is not scalar", context.getMethodModel().getSimpleName(), } else if (token == '[') { Preconditions.checkArgument( type.isRepeated() && !type.isMap(), "%s:%s: %s is not a repeated field", context.getMethodModel().getSimpleName(), type.isRepeated() && !type.isMap(), "%s:%s: %s is not a repeated field", context.getMethodModel().getSimpleName(),
@Override public String getParamTypeName(ImportTypeTable typeTable, TypeModel type) { if (type.isMap()) { TypeName mapTypeName = new TypeName("dict"); TypeName keyTypeName = new TypeName(getParamTypeNameForElementType(type.getMapKeyType())); TypeName valueTypeName = new TypeName(getParamTypeNameForElementType(type.getMapValueType())); return new TypeName( mapTypeName.getFullName(), mapTypeName.getNickname(), "%s[%i -> %i]", keyTypeName, valueTypeName) .getFullName(); } if (type.isRepeated()) { TypeName listTypeName = new TypeName("list"); TypeName elementTypeName = new TypeName(getParamTypeNameForElementType(type)); return new TypeName( listTypeName.getFullName(), listTypeName.getNickname(), "%s[%i]", elementTypeName) .getFullName(); } return getParamTypeNameForElementType(type); }
@Override public String getParamTypeName(ImportTypeTable typeTable, TypeModel type) { if (type.isMap()) { String keyTypeName = typeTable.getFullNameForElementType(type.getMapKeyType()); String valueTypeName = typeTable.getFullNameForElementType(type.getMapValueType()); if (type.getMapValueType().isMessage()) { valueTypeName += " | Hash"; } return new TypeName( typeTable.getFullNameFor(type), typeTable.getNicknameFor(type), "%s{%i => %i}", new TypeName(keyTypeName), new TypeName(valueTypeName)) .getFullName(); } String elementTypeName = typeTable.getFullNameForElementType(type); if (type.isMessage()) { elementTypeName += " | Hash"; } if (type.isRepeated()) { return new TypeName( typeTable.getFullNameFor(type), typeTable.getNicknameFor(type), "%s<%i>", new TypeName(elementTypeName)) .getFullName(); } return elementTypeName; }
fieldSetting.fieldName(context.getNamer().publicFieldName(Name.anyLower(item.getVarName()))); fieldSetting.isMap(item.getType().isMap()); fieldSetting.isArray(!item.getType().isMap() && item.getType().isRepeated()); fieldSetting.elementTypeName(context.getTypeTable().getFullNameFor(item.getType())); if (item.getOneofConfig() != null) {