private void checkFieldValue(ProtoContext context, Descriptor descriptor, Field field, DynamicMessage.Value value) { String fieldName = field.getName(); FieldType fieldType = field.getType(); DynamicMessage.Value.Type valueType = value.getType(); if (fieldType instanceof ScalarFieldType) { ScalarFieldType scalarFieldType = (ScalarFieldType) fieldType; if (!isAssignableFrom(scalarFieldType, value)) { throw new ParserException(value, "Cannot set option '%s': expected %s value", fieldName, fieldType); } } else if (fieldType instanceof Enum) { Enum anEnum = (Enum) fieldType; Set<String> allowedNames = anEnum.getConstantNames(); if (valueType != DynamicMessage.Value.Type.ENUM || !allowedNames.contains(value.getEnumName())) { throw new ParserException(value, "Cannot set option '%s': expected enum = %s", fieldName, allowedNames); } } else if (fieldType instanceof Message) { if (valueType != DynamicMessage.Value.Type.MESSAGE) { throw new ParserException(value, "Cannot set option '%s': expected message value", fieldName); } Message message = (Message) fieldType; processOptions(context, message, descriptor, value.getMessage()); } else { throw new IllegalStateException("Unknown field type: " + fieldType); } }
private void checkFieldValue(ProtoContext context, Descriptor descriptor, Field field, DynamicMessage.Value value) { String fieldName = field.getName(); FieldType fieldType = field.getType(); DynamicMessage.Value.Type valueType = value.getType(); if (fieldType instanceof ScalarFieldType) { ScalarFieldType scalarFieldType = (ScalarFieldType) fieldType; if (!isAssignableFrom(scalarFieldType, value)) { throw new ParserException(value, "Cannot set option '%s': expected %s value", fieldName, fieldType); } } else if (fieldType instanceof Enum) { Enum anEnum = (Enum) fieldType; Set<String> allowedNames = anEnum.getConstantNames(); if (valueType != DynamicMessage.Value.Type.ENUM || !allowedNames.contains(value.getEnumName())) { throw new ParserException(value, "Cannot set option '%s': expected enum = %s", fieldName, allowedNames); } } else if (fieldType instanceof Message) { if (valueType != DynamicMessage.Value.Type.MESSAGE) { throw new ParserException(value, "Cannot set option '%s': expected message value", fieldName); } Message message = (Message) fieldType; processOptions(context, message, descriptor, value.getMessage()); } else { throw new IllegalStateException("Unknown field type: " + fieldType); } }