internal BreakingChangeBase(MetadataItemBase oldItem, MetadataItemBase newItem, MetadataItemBase associatedData, BreakingChangeKind breakingChangeKind) { AssociatedData = associatedData; BreakingChangeKind = breakingChangeKind; NewItem = newItem; OldItem = oldItem; }
public CompareItemsContext(MetadataItemBase oldItem, MetadataItemBase newItem, AssemblyFamily newAssemblyFamily, List <BreakingChangeBase> breakingChanges, MetadataItemBase additionalInfo = null) { this.OldItem = oldItem; this.NewItem = newItem; this.NewAssemblyFamily = newAssemblyFamily; this.BreakingChanges = breakingChanges; this.AdditionalInfo = additionalInfo; }
private static string GetItemDescription(MetadataItemBase item) { switch (item.MetadataItemKind) { case MetadataItemKinds.Assembly: return("assembly"); case MetadataItemKinds.Constant: return("constant"); case MetadataItemKinds.Constructor: return("constructor"); case MetadataItemKinds.Event: return("event"); case MetadataItemKinds.Field: return("field"); case MetadataItemKinds.GenericTypeParameter: return("generic type parameter"); case MetadataItemKinds.Indexer: return("indexer"); case MetadataItemKinds.Method: return("method"); case MetadataItemKinds.Operator: return("operator"); case MetadataItemKinds.Parameter: return("parameter"); case MetadataItemKinds.Property: return("property"); case MetadataItemKinds.TypeDefinition: { var type = (TypeDefinitionData)item; switch (type.TypeKind) { case TypeKind.Class: return("class"); case TypeKind.Struct: return("struct"); case TypeKind.Interface: return("interface"); case TypeKind.Enum: return("enum"); case TypeKind.Delegate: return("delegate"); default: Debug.Fail("Unknown TypeKind: " + item.MetadataItemKind); return("item"); } } default: Debug.Fail("Unknown MetadataItemKinds: " + item.MetadataItemKind); return("item"); } }
private static List <BreakingChangeBase> CompareItems(MetadataItemBase oldItem, MetadataItemBase newItem, AssemblyFamily newAssemblyFamily, MetadataItemBase additionalInfo = null) { var breakingChanges = new List <BreakingChangeBase>(); var context = new CompareItemsContext(oldItem, newItem, newAssemblyFamily, breakingChanges, additionalInfo); Debug.Assert(oldItem.MetadataItemKind == newItem.MetadataItemKind, "The items are not the same kind."); var definitions = _definitionsByKind[oldItem.MetadataItemKind]; foreach (var definition in definitions) { definition.CompareItems(context); } return(breakingChanges); }
/// <summary> /// The default visit implementation for all items. /// </summary> public virtual void DefaultVisit(MetadataItemBase item) { }
public override void DefaultVisit(MetadataItemBase item) { Debug.Fail("Unhandled item:" + item.GetType().Name); }
internal virtual bool DoesMatch(MetadataItemBase other) => MetadataItemKind == other.MetadataItemKind && DisplayName == other.DisplayName;
private static List <BreakingChangeBase> CompareParameters(ParameterData oldParameter, ParameterData newParameter, AssemblyFamily newAssemblyFamily, MetadataItemBase declaringMember) { var breakingChanges = CompareItems(oldParameter, newParameter, newAssemblyFamily, declaringMember); // If a parameter is changed completely, it will most likely have a new type and name. We should only warn about the type change. var typeChanges = new HashSet <ParameterData>( breakingChanges.OfType <ChangedParameterType>().Select(b => b.NewParameter) ); breakingChanges.RemoveAll(b => b.BreakingChangeKind == BreakingChangeKind.ChangedParameterName && typeChanges.Contains((ParameterData)b.NewItem)); return(breakingChanges); }