public EnumMeta(Field protoField, JavaType javaType) { io.protostuff.compiler.model.Enum enumType = (io.protostuff.compiler.model.Enum) protoField.getType(); for (EnumConstant enumConstant : enumType.getConstants()) { enumNameToValueMap.put(enumConstant.getName(), enumConstant.getValue()); enumValues.put(enumConstant.getValue(), null); } if (!javaType.isEnumType()) { return; } try { Method method = javaType.getRawClass().getMethod("values"); method.setAccessible(true); Object[] values = (Object[]) method.invoke(null); for (Object value : values) { Enum<?> enumValue = (Enum<?>) value; enumValues.put(enumNameToValueMap.get(enumValue.name()), enumValue); } } catch (Throwable e) { throw new IllegalStateException( "Failed to collect enum values, class=" + javaType.getRawClass().getName(), e); } }
protected void enumToString(Enum enumValue, StringBuilder sb) { appendLine(sb, "enum %s {", enumValue.getName()); for (EnumConstant enumConstant : enumValue.getConstants()) { appendLine(sb, " %s = %s;", enumConstant.getName(), enumConstant.getValue()); } sb.append("}\n\n"); }
/** * Get enum constant by it's name. */ public EnumConstant getConstant(String name) { for (EnumConstant enumConstant : getConstants()) { if (enumConstant.getName().equals(name)) { return enumConstant; } } return null; }
private void checkDuplicateEnumConstantNames(List<EnumConstant> constants) { Map<String, EnumConstant> constantByName = new HashMap<>(); for (EnumConstant constant : constants) { String name = constant.getName(); if (constantByName.containsKey(name)) { throw new ParserException(constant, "Duplicate enum constant name: '%s'", name); } constantByName.put(name, constant); } }
/** * Get enum constant by it's name. */ public EnumConstant getConstant(String name) { for (EnumConstant enumConstant : getConstants()) { if (enumConstant.getName().equals(name)) { return enumConstant; } } return null; }
private void checkDuplicateEnumConstantNames(List<EnumConstant> constants) { Map<String, EnumConstant> constantByName = new HashMap<>(); for (EnumConstant constant : constants) { String name = constant.getName(); if (constantByName.containsKey(name)) { throw new ParserException(constant, "Duplicate enum constant name: '%s'", name); } constantByName.put(name, constant); } }
private void checkReservedEnumNames(Enum anEnum, List<EnumConstant> constants) { Set<String> names = new HashSet<>(anEnum.getReservedFieldNames()); for (EnumConstant constant : constants) { String name = constant.getName(); if (names.contains(name)) { throw new ParserException(constant, "Reserved enum name: '%s'", name); } } }
private void checkReservedEnumNames(Enum anEnum, List<EnumConstant> constants) { Set<String> names = new HashSet<>(anEnum.getReservedFieldNames()); for (EnumConstant constant : constants) { String name = constant.getName(); if (names.contains(name)) { throw new ParserException(constant, "Reserved enum name: '%s'", name); } } }
/** * Returns constant name for java enum. */ public static String getName(EnumConstant constant) { String name = constant.getName(); String underscored = Formatter.toUnderscoreCase(name); return Formatter.toUpperCase(underscored); } }
/** * Returns constant name for java enum. */ public static String getName(EnumConstant constant) { String name = constant.getName(); String underscored = Formatter.toUnderscoreCase(name); return Formatter.toUpperCase(underscored); } }
public EnumSerializerSchema(Field field) { super(field); io.protostuff.compiler.model.Enum enumType = (io.protostuff.compiler.model.Enum) field.getType(); for (EnumConstant enumConstant : enumType.getConstants()) { enumNameToValueMap.put(enumConstant.getName(), enumConstant.getValue()); enumValueSet.add(enumConstant.getValue()); } }
protected void enumToString(Enum enumValue, StringBuilder sb) { appendLine(sb, "enum %s {", enumValue.getName()); for (EnumConstant enumConstant : enumValue.getConstants()) { appendLine(sb, " %s = %s;", enumConstant.getName(), enumConstant.getValue()); } sb.append("}\n\n"); }
/** * Returns a java field default value for proto field. */ public static String getDefaultValue(Field field) { FieldType type = field.getType(); if (type instanceof ScalarFieldType) { return ScalarFieldTypeUtil.getDefaultValue((ScalarFieldType) type); } if (type instanceof Message) { Message m = (Message) type; return UserTypeUtil.getCanonicalName(m) + ".getDefaultInstance()"; } if (type instanceof Enum) { Enum anEnum = (Enum) type; String defaultValue; List<EnumConstant> constants = anEnum.getConstants(); if (constants.isEmpty()) { defaultValue = "UNRECOGNIZED"; } else { DynamicMessage options = field.getOptions(); defaultValue = options.containsKey(DEFAULT) ? options.get(DEFAULT).getEnumName() : constants.get(0).getName(); } return UserTypeUtil.getCanonicalName(anEnum) + "." + defaultValue; } throw new IllegalArgumentException(String.valueOf(type)); }
/** * Returns a java field default value for proto field. */ public static String getDefaultValue(Field field) { FieldType type = field.getType(); if (type instanceof ScalarFieldType) { return ScalarFieldTypeUtil.getDefaultValue((ScalarFieldType) type); } if (type instanceof Message) { Message m = (Message) type; return UserTypeUtil.getCanonicalName(m) + ".getDefaultInstance()"; } if (type instanceof Enum) { Enum anEnum = (Enum) type; String defaultValue; List<EnumConstant> constants = anEnum.getConstants(); if (constants.isEmpty()) { defaultValue = "UNRECOGNIZED"; } else { DynamicMessage options = field.getOptions(); defaultValue = options.containsKey(DEFAULT) ? options.get(DEFAULT).getEnumName() : constants.get(0).getName(); } return UserTypeUtil.getCanonicalName(anEnum) + "." + defaultValue; } throw new IllegalArgumentException(String.valueOf(type)); }
private void process(Module module, Enum anEnum) { ImmutableEnumDescriptor descriptor = ImmutableEnumDescriptor.builder() .type(NodeType.ENUM) .name(anEnum.getName()) .canonicalName(anEnum.getCanonicalName()) .description(markdownProcessor.toHtml(anEnum.getComments())) .options(anEnum.getOptions().toMap()) .usages(module.usageIndex().getUsages(anEnum).stream() .map(type -> ImmutableUsageItem.builder() .ref(type.getCanonicalName()) .type(UsageType.from(type)) .build()) .collect(Collectors.toList())) .addAllConstants(anEnum.getConstants().stream() .map(enumConstant -> ImmutableEnumConstant.builder() .name(enumConstant.getName()) .value(enumConstant.getValue()) .description(markdownProcessor.toHtml(enumConstant.getComments())) .options(enumConstant.getOptions().toMap()) .build()) .collect(Collectors.toList())) .build(); String output = "data/type/" + anEnum.getCanonicalName() + ".json"; write(module, output, descriptor); } }
private void process(Module module, Enum anEnum) { ImmutableEnumDescriptor descriptor = ImmutableEnumDescriptor.builder() .type(NodeType.ENUM) .name(anEnum.getName()) .canonicalName(anEnum.getCanonicalName()) .description(markdownProcessor.toHtml(anEnum.getComments())) .options(anEnum.getOptions().toMap()) .usages(module.usageIndex().getUsages(anEnum).stream() .map(type -> ImmutableUsageItem.builder() .ref(type.getCanonicalName()) .type(UsageType.from(type)) .build()) .collect(Collectors.toList())) .addAllConstants(anEnum.getConstants().stream() .map(enumConstant -> ImmutableEnumConstant.builder() .name(enumConstant.getName()) .value(enumConstant.getValue()) .description(markdownProcessor.toHtml(enumConstant.getComments())) .options(enumConstant.getOptions().toMap()) .build()) .collect(Collectors.toList())) .build(); String output = "data/type/" + anEnum.getCanonicalName() + ".json"; write(module, output, descriptor); } }