/** * Creates an enum value backed up by the given proto. */ public static EnumValue create(EnumType parent, EnumValueDescriptorProto proto, String path) { return new EnumValue(parent, proto, path); }
@Override public String toString() { return "value " + getFullName(); }
/** * Returns whether any of the enum's values are hidden. */ public boolean hasHiddenValue() { for (EnumValue value : values) { if (!value.isReachable()) { return true; } } return false; }
/** * Returns a proto representation that includes visible values only. Enum options and * source location are omitted since visibility isn't applicable for them. */ public com.google.protobuf.Enum getVisibleProto() { com.google.protobuf.Enum.Builder scopedEnum = com.google.protobuf.Enum.newBuilder() .setName(getFullName()); for (EnumValue value : values) { if (value.isReachable()) { scopedEnum.addEnumvalue(com.google.protobuf.EnumValue.newBuilder() .setName(value.getSimpleName()) .setNumber(value.getNumber())); } } return scopedEnum.build(); }
@VisitsBefore void normalize(EnumType enumType) { Enum.Builder coreEnumBuilder = Enum.newBuilder().setName(enumType.getFullName()); coreEnumBuilder.setSourceContext( SourceContext.newBuilder() .setFileName(enumType.getFile().getLocation().getDisplayString())); coreEnumBuilder.setSyntax(enumType.getSyntax()); for (EnumValue value : enumType.getReachableValues()) { com.google.protobuf.EnumValue.Builder coreEnumValueBuilder = com.google.protobuf.EnumValue.newBuilder(); // Use simple name for enum value, as otherwise client has to use // fully qualified name in the request. coreEnumValueBuilder.setName(value.getSimpleName()).setNumber(value.getNumber()); coreEnumValueBuilder.addAllOptions( DescriptorNormalization.getOptions(value.getProto(), includeDefaults)); coreEnumBuilder.addEnumvalue(coreEnumValueBuilder.build()); } coreEnumBuilder.addAllOptions( DescriptorNormalization.getOptions(enumType.getProto(), includeDefaults)); enums.add(coreEnumBuilder.build()); }
@Override public TypedValue getEnumValue(TypeRef type, EnumValue value) { return TypedValue.create(getTypeName(type), String.format("'%s'", value.getSimpleName())); } }
@VisitsBefore void visit(EnumType enumType) { // Add the enum type to the set of known types. addType(enumType.getLocation(), enumType.getFullName(), TypeRef.of(enumType)); // Build the field-by-name map for this enum type. Map<String, EnumValue> valueByName = Maps.newLinkedHashMap(); for (EnumValue value : enumType.getValues()) { EnumValue old = valueByName.put(value.getSimpleName(), value); if (old != null) { model .getDiagReporter() .report( Diag.error( value.getLocation(), "Duplicate declaration of enum value '%s'. Previous location: %s", value.getSimpleName(), old.getLocation().getDisplayString())); } } enumType.setValueByNameMap(ImmutableMap.copyOf(valueByName)); }
private List<GrpcEnumValueDocView> generateEnumValueDocs( SurfaceNamer namer, Collection<EnumValue> values) { ImmutableList.Builder<GrpcEnumValueDocView> valueDocs = ImmutableList.builder(); for (EnumValue value : values) { GrpcEnumValueDocView.Builder doc = GrpcEnumValueDocView.newBuilder(); doc.name(value.getSimpleName()); doc.number(value.getNumber()); doc.lines(namer.getDocLines(GapicParser.getDocString(value))); valueDocs.add(doc.build()); } return valueDocs.build(); } }
@Test public void testGetLocation_enumValue() { EnumValue outerValue = getOuterEnum().getValues().get(0); EnumValue innerValue = getInnerEnum().getValues().get(0); verifyLocation("VALUE1 = 1;", innerValue.getLocation()); verifyLocation("VALUE2 = 2;", outerValue.getLocation()); }
/** * Get the index position of this value in its parent. */ public int getIndex() { if (valueIndex < 0) { valueIndex = ((EnumType) getParent()).getValues().indexOf(this); } return valueIndex; }
private EnumType(ProtoContainerElement parent, EnumDescriptorProto proto, String path) { super(parent, proto.getName(), path); this.proto = proto; // Build values. ImmutableList.Builder<EnumValue> valuesBuilder = ImmutableList.builder(); List<EnumValueDescriptorProto> valueProtos = proto.getValueList(); for (int i = 0; i < valueProtos.size(); i++) { EnumValueDescriptorProto value = valueProtos.get(i); String childPath = buildPath(path, EnumDescriptorProto.VALUE_FIELD_NUMBER, i); valuesBuilder.add(EnumValue.create(this, value, childPath)); } values = valuesBuilder.build(); }
@Visits void reach(EnumType enumType) { markAsReachable(enumType); visitInScope(enumType.getValues()); // Check if default value is hidden, and whether the enum has unreachable descendants. for (EnumValue value : enumType.getValues()) { if (value.getIndex() == 0 && !isReachable(value)) { error( value, "The default value of '%s' cannot be hidden. %s.", enumType.getFullName(), reasonForUnreachable(value)); } if (!isReachable(value)) { hasUnreachableDescendants.add(enumType); } } }
/** * Returns a proto representation that includes visible values only. Enum options and * source location are omitted since visibility isn't applicable for them. */ public com.google.protobuf.Enum getVisibleProto() { com.google.protobuf.Enum.Builder scopedEnum = com.google.protobuf.Enum.newBuilder() .setName(getFullName()); for (EnumValue value : values) { if (value.isReachable()) { scopedEnum.addEnumvalue(com.google.protobuf.EnumValue.newBuilder() .setName(value.getSimpleName()) .setNumber(value.getNumber())); } } return scopedEnum.build(); }
@VisitsBefore void normalize(EnumType enumType) { Enum.Builder coreEnumBuilder = Enum.newBuilder().setName(enumType.getFullName()); coreEnumBuilder.setSourceContext( SourceContext.newBuilder() .setFileName(enumType.getFile().getLocation().getDisplayString())); coreEnumBuilder.setSyntax(enumType.getSyntax()); for (EnumValue value : enumType.getReachableValues()) { com.google.protobuf.EnumValue.Builder coreEnumValueBuilder = com.google.protobuf.EnumValue.newBuilder(); // Use simple name for enum value, as otherwise client has to use // fully qualified name in the request. coreEnumValueBuilder.setName(value.getSimpleName()).setNumber(value.getNumber()); coreEnumValueBuilder.addAllOptions( DescriptorNormalization.getOptions(value.getProto(), includeDefaults)); coreEnumBuilder.addEnumvalue(coreEnumValueBuilder.build()); } coreEnumBuilder.addAllOptions( DescriptorNormalization.getOptions(enumType.getProto(), includeDefaults)); enums.add(coreEnumBuilder.build()); }
@Override public TypedValue getEnumValue(TypeRef type, EnumValue value) { return TypedValue.create(getTypeName(type), "%s::" + value.getSimpleName()); } }
@VisitsBefore void visit(EnumType enumType) { // Add the enum type to the set of known types. addType(enumType.getLocation(), enumType.getFullName(), TypeRef.of(enumType)); // Build the field-by-name map for this enum type. Map<String, EnumValue> valueByName = Maps.newLinkedHashMap(); for (EnumValue value : enumType.getValues()) { EnumValue old = valueByName.put(value.getSimpleName(), value); if (old != null) { model .getDiagReporter() .report( Diag.error( value.getLocation(), "Duplicate declaration of enum value '%s'. Previous location: %s", value.getSimpleName(), old.getLocation().getDisplayString())); } } enumType.setValueByNameMap(ImmutableMap.copyOf(valueByName)); }
/** * Get the index position of this value in its parent. */ public int getIndex() { if (valueIndex < 0) { valueIndex = ((EnumType) getParent()).getValues().indexOf(this); } return valueIndex; }
private EnumType(ProtoContainerElement parent, EnumDescriptorProto proto, String path) { super(parent, proto.getName(), path); this.proto = proto; // Build values. ImmutableList.Builder<EnumValue> valuesBuilder = ImmutableList.builder(); List<EnumValueDescriptorProto> valueProtos = proto.getValueList(); for (int i = 0; i < valueProtos.size(); i++) { EnumValueDescriptorProto value = valueProtos.get(i); String childPath = buildPath(path, EnumDescriptorProto.VALUE_FIELD_NUMBER, i); valuesBuilder.add(EnumValue.create(this, value, childPath)); } values = valuesBuilder.build(); }