コード例 #1
0
 internal BreakingChangeBase(MetadataItemBase oldItem, MetadataItemBase newItem, MetadataItemBase associatedData, BreakingChangeKind breakingChangeKind)
 {
     AssociatedData     = associatedData;
     BreakingChangeKind = breakingChangeKind;
     NewItem            = newItem;
     OldItem            = oldItem;
 }
コード例 #2
0
 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;
 }
コード例 #3
0
        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");
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 /// <summary>
 /// The default visit implementation for all items.
 /// </summary>
 public virtual void DefaultVisit(MetadataItemBase item)
 {
 }
コード例 #6
0
 public override void DefaultVisit(MetadataItemBase item)
 {
     Debug.Fail("Unhandled item:" + item.GetType().Name);
 }
コード例 #7
0
 internal virtual bool DoesMatch(MetadataItemBase other) =>
 MetadataItemKind == other.MetadataItemKind && DisplayName == other.DisplayName;
コード例 #8
0
        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);
        }