public static string FormatEnumValue(TypeDefinitionData enumType, object value) { var unqualifiedName = enumType.GetDisplayName(fullyQualify: false); foreach (ConstantData constant in enumType.GetMembers()) { if (Object.Equals(constant.Value, value)) { return(unqualifiedName + "." + constant.Name); } } if (enumType.IsFlagsEnum) { var sb = new StringBuilder(); var longValue = Convert.ToUInt64(value); foreach (ConstantData constant in enumType.GetMembers()) { var longFlag = Convert.ToUInt64(constant.Value); if ((longValue & longFlag) == longFlag) { longValue &= ~longFlag; if (sb.Length != 0) { sb.Append(" | "); } sb.AppendFormat("{0}.{1}", unqualifiedName, constant.Name); if (longValue == 0) { return(sb.ToString()); } } } } var rawValue = (ulong)value; return(string.Format("({0}){1}", unqualifiedName, rawValue)); }
private static bool IsMemberKindChangeAllowed(MemberDataBase oldMember, TypeDefinitionData newType, AssemblyFamily newAssemblyFamily) { if (oldMember.MetadataItemKind == MetadataItemKinds.Constant || (oldMember.MetadataItemKind == MetadataItemKinds.Field && ((FieldData)oldMember).IsReadOnly) || (oldMember.MetadataItemKind == MetadataItemKinds.Property && oldMember.CanBeOverridden == false)) { var oldTypedMemer = (TypedMemberDataBase)oldMember; var candidateMembers = newType.GetMembers(oldMember.Name).Where(m => ( m.MetadataItemKind == MetadataItemKinds.Constant || m.MetadataItemKind == MetadataItemKinds.Field || m.MetadataItemKind == MetadataItemKinds.Property ) && oldTypedMemer.Accessibility <= m.Accessibility && m.IsInstance == oldMember.IsInstance && oldTypedMemer.Type.IsEquivalentToNew(((ITypedItem)m).Type, newAssemblyFamily) ).ToList(); if (candidateMembers.Count == 0) { return(false); } Debug.Assert(candidateMembers.Count == 1, "There should only be one member with the same name."); var newMember = candidateMembers[0]; if (oldMember.CanRead() && newMember.CanRead() == false) { return(false); } if (oldMember.CanWrite() && newMember.CanWrite() == false) { return(false); } var newProperty = newMember as PropertyData; if (newProperty != null && newProperty.GetMethodAccessibility < oldMember.Accessibility) { return(false); } return(true); } return(false); }