private void ValidateEnum(EnumDefinition enumDef) { if (!enumDef.IsValidUnderlyingType()) { _contracts.AddError(enumDef.ParseContext, "Invalid underlying type: {0}", enumDef.UnderlyingType); } if (enumDef.Options.Proto && enumDef.UnderlyingType.NetType != "int") { _contracts.AddError(enumDef.ParseContext, "An enum used in a proto file must have an underlying type of int"); } ValidateAttributes(enumDef.Attributes); var definedMembers = new HashSet <string>(); foreach (var member in enumDef.Members) { if (!definedMembers.Add(member.Name)) { _contracts.AddError(member.ParseContext, "Duplicate enum member: {0}", member.Name); } ValidateAttributes(member.Attributes); } }