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 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); } }
@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); }
FieldModel field = Preconditions.checkNotNull( type.getField(fieldName), "%s:%s: type %s does not have field %s", context.getMethodModel().getSimpleName(),