/** * Get the index position of this value in its parent. */ public int getIndex() { if (valueIndex < 0) { valueIndex = ((EnumType) getParent()).getValues().indexOf(this); } return valueIndex; }
/** * Get the index position of this value in its parent. */ public int getIndex() { if (valueIndex < 0) { valueIndex = ((EnumType) getParent()).getValues().indexOf(this); } return valueIndex; }
@Accepts public void accept(EnumType enumType) { acceptElems(enumType.getValues()); }
@Accepts public void accept(EnumType enumType) { acceptElems(enumType.getValues()); }
/** Returns the enum value string */ public String getEnumValue(TypeRef type, String value) { for (EnumValue enumValue : type.getEnumType().getValues()) { if (enumValue.getSimpleName().equals(value)) { return typeNameConverter .getEnumValue(type, enumValue) .getValueAndSaveTypeNicknameIn(typeTable); } } throw new IllegalArgumentException("Unrecognized enum value: " + value); }
@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); } } }
@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); } } }
@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)); }
@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)); }
@Test public void testGetEnumValue() { TypeRef type = ModelTypeNameConverterTestUtil.getTestEnumType(tempDir); EnumValue value = type.getEnumType().getValues().get(0); assertThat(converter.getEnumValue(type, value).getValueAndSaveTypeNicknameIn(new GoTypeTable())) .isEqualTo("librarypb.Book_GOOD"); type = ModelTypeNameConverterTestUtil.getTestType(tempDir, "TopLevelEnum"); value = type.getEnumType().getValues().get(0); assertThat(converter.getEnumValue(type, value).getValueAndSaveTypeNicknameIn(new GoTypeTable())) .isEqualTo("librarypb.TopLevelEnum_FOO"); } }
@Override public TypedValue getSnippetZeroValue(TypeRef type) { // Don't call getTypeName; we don't need to import these. if (type.isMap()) { return TypedValue.create(new TypeName("dict"), "{}"); } if (type.isRepeated()) { return TypedValue.create(new TypeName("list"), "[]"); } if (PRIMITIVE_ZERO_VALUE.containsKey(type.getKind())) { return TypedValue.create(getTypeName(type), PRIMITIVE_ZERO_VALUE.get(type.getKind())); } if (type.isMessage()) { return TypedValue.create(getTypeName(type), "{}"); } if (type.isEnum()) { return getEnumValue(type, type.getEnumType().getValues().get(0)); } return TypedValue.create(new TypeName(""), "None"); }
@Test public void testGetEnumValue() { String packageName = "Google.Example.Library.V1"; TypeRef type = ModelTypeNameConverterTestUtil.getTestEnumType(tempDir); EnumValue value = type.getEnumType().getValues().get(0); CSharpTypeTable typeTable = new CSharpTypeTable(packageName, CSharpAliasMode.Global); CSharpModelTypeNameConverter converter = new CSharpModelTypeNameConverter(typeTable); assertThat(converter.getEnumValue(type, value).getValueAndSaveTypeNicknameIn(typeTable)) .isEqualTo("Book.Types.Rating.Good"); } }
@Test public void testGetEnumValue() { String packageName = "Google\\Example\\Library\\V1"; TypeRef type = ModelTypeNameConverterTestUtil.getTestEnumType(tempDir); EnumValue value = type.getEnumType().getValues().get(0); PhpModelTypeNameConverter converter = new PhpModelTypeNameConverter(packageName); assertThat( converter .getEnumValue(type, value) .getValueAndSaveTypeNicknameIn(new PhpTypeTable(packageName))) .isEqualTo("Book_Rating::GOOD"); } }
/** * Returns the NodeJS representation of a zero value for that type, to be used in code sample doc. */ @Override public TypedValue getSnippetZeroValue(TypeRef type) { // Don't call getTypeName; we don't need to import these. if (type.isMap()) { return TypedValue.create(new TypeName("Object"), "{}"); } if (type.isRepeated()) { return TypedValue.create(new TypeName("Array"), "[]"); } if (PRIMITIVE_ZERO_VALUE.containsKey(type.getKind())) { return TypedValue.create(getTypeName(type), PRIMITIVE_ZERO_VALUE.get(type.getKind())); } if (type.isMessage()) { return TypedValue.create(getTypeName(type), "{}"); } if (type.isEnum()) { return getEnumValue(type, type.getEnumType().getValues().get(0)); } return TypedValue.create(new TypeName(""), "null"); }
/** * Returns the PHP representation of a zero value for that type, to be used in code sample doc. */ @Override public TypedValue getSnippetZeroValue(TypeRef type) { // Don't call getTypeName; we don't need to import these. if (type.isMap()) { return TypedValue.create(new TypeName("array"), "[]"); } if (type.isRepeated()) { return TypedValue.create(new TypeName("array"), "[]"); } if (PRIMITIVE_ZERO_VALUE.containsKey(type.getKind())) { return TypedValue.create(getTypeName(type), PRIMITIVE_ZERO_VALUE.get(type.getKind())); } if (type.isMessage()) { return TypedValue.create(getTypeName(type), "new %s()"); } if (type.isEnum()) { return getEnumValue(type, type.getEnumType().getValues().get(0)); } return TypedValue.create(new TypeName(""), "null"); }
@Test public void testGetEnumValue() { String packageName = "Library::V1"; TypeRef type = ModelTypeNameConverterTestUtil.getTestEnumType(tempDir); EnumValue value = type.getEnumType().getValues().get(0); RubyModelTypeNameConverter converter = new RubyModelTypeNameConverter(packageName); assertThat( converter .getEnumValue(type, value) .getValueAndSaveTypeNicknameIn(new RubyTypeTable(packageName))) .isEqualTo(":GOOD"); } }
@Test public void testGetEnumValue() { String packageName = "library.v1"; TypeRef type = ModelTypeNameConverterTestUtil.getTestEnumType(tempDir); EnumValue value = type.getEnumType().getValues().get(0); NodeJSModelTypeNameConverter converter = new NodeJSModelTypeNameConverter(packageName); assertThat( converter .getEnumValue(type, value) .getValueAndSaveTypeNicknameIn(new JSTypeTable(packageName))) .isEqualTo("'GOOD'"); } }
/** * Returns the Ruby representation of a zero value for that type, to be used in code sample doc. */ @Override public TypedValue getSnippetZeroValue(TypeRef type) { // Don't call getTypeName; we don't need to import these. if (type.isMap()) { return TypedValue.create(new TypeName("Hash"), "{}"); } if (type.isRepeated()) { return TypedValue.create(new TypeName("Array"), "[]"); } if (PRIMITIVE_ZERO_VALUE.containsKey(type.getKind())) { return TypedValue.create(getTypeName(type), PRIMITIVE_ZERO_VALUE.get(type.getKind())); } if (type.isMessage()) { TypeName typeName = getTypeName(type); return TypedValue.create(typeName, "{}"); } if (type.isEnum()) { return getEnumValue(type, type.getEnumType().getValues().get(0)); } return TypedValue.create(new TypeName(""), "nil"); }
/** Return a list of enums, sorted alphabetically by name. */ public List<GrpcEnumDocView> generateEnumDocs( ModelTypeTable typeTable, SurfaceNamer namer, Collection<EnumType> enumElements) { ImmutableSortedSet.Builder<GrpcEnumDocView> enumDocs = ImmutableSortedSet.orderedBy(Comparator.comparing(GrpcEnumDocView::name)); for (EnumType enumElement : enumElements) { if (!enumElement.isReachable()) { continue; } GrpcEnumDocView.Builder doc = GrpcEnumDocView.newBuilder(); doc.name(namer.getEnumTypeName(typeTable, enumElement)); doc.lines(namer.getDocLines(GapicParser.getDocString(enumElement))); doc.values(generateEnumValueDocs(namer, enumElement.getValues())); doc.packageName(enumElement.getFile().getFullName()); enumDocs.add(doc.build()); } return enumDocs.build().asList(); }