public static IEnumerable <System.Attribute> ConvertAvailability(CustomAttributeData attribute) { string message = null; if (attribute.NamedArguments.Any(x => x.MemberName == "Message")) { message = (string)attribute.NamedArguments.First(x => x.MemberName == "Message").TypedValue.Value; } foreach (var arg in attribute.NamedArguments) { switch (arg.MemberName) { case "Introduced": { ParsedAvailabilityInfo availInfo = DetermineOldAvailabilityVersion(arg); yield return(AttributeFactory.CreateNewIntroducedAttribute(availInfo.Platform, availInfo.Major, availInfo.Minor, message: message)); continue; } case "Deprecated": { ParsedAvailabilityInfo availInfo = DetermineOldAvailabilityVersion(arg); yield return(AttributeFactory.CreateDeprecatedAttribute(availInfo.Platform, availInfo.Major, availInfo.Minor, message: message)); continue; } case "Obsoleted": { ParsedAvailabilityInfo availInfo = DetermineOldAvailabilityVersion(arg); yield return(AttributeFactory.CreateObsoletedAttribute(availInfo.Platform, availInfo.Major, availInfo.Minor, message: message)); continue; } case "Unavailable": { ParsedAvailabilityInfo availInfo = DetermineOldAvailabilityVersion(arg); yield return(AttributeFactory.CreateUnavailableAttribute(availInfo.Platform, message: message)); continue; } case "Message": continue; default: throw new NotImplementedException($"ConvertAvailability found unknown named argument {arg.MemberName}"); } } }