public EnumTypeDiff(IEnumTypeData beforeEnum, IEnumTypeData afterEnum) { AddedAttributes = new List<IAttributeData>(); RemovedAttributes = new List<IAttributeData>(); AddedFields = new List<IFieldData>(); RemovedFields = new List<IFieldData>(); ModifiedFields = new List<IFieldDiff>(); AddedMethods = new List<IMethodData>(); RemovedMethods = new List<IMethodData>(); ModifiedMethods = new List<IMethodDiff>(); if (beforeEnum.Name != afterEnum.Name) { throw new NtegrityException("Attempted to diff two different Enums!"); } Name = beforeEnum.Name; GetAddedAndRemovedAttributes(beforeEnum, afterEnum); GetAddedAndRemovedFields(beforeEnum, afterEnum); GetAddedAndRemovedMethods(beforeEnum, afterEnum); }
private void GetAddedAndRemovedMethods(IEnumTypeData beforeEnum, IEnumTypeData afterEnum) { foreach (var oldMethod in beforeEnum.MethodData) { if (afterEnum.MethodData.All(x => x.MethodSignature != oldMethod.MethodSignature)) { RemovedMethods.Add(oldMethod); HasChanged = true; } } foreach (var newMethod in afterEnum.MethodData) { if (beforeEnum.MethodData.All(x => x.MethodSignature != newMethod.MethodSignature)) { AddedMethods.Add(newMethod); HasChanged = true; } } foreach (var oldMethod in beforeEnum.MethodData) { var matchingNewField = afterEnum.MethodData.FirstOrDefault( x => x.MethodSignature == oldMethod.MethodSignature); if (matchingNewField != null) { var diff = new MethodDiff(oldMethod, matchingNewField); if (!diff.HasChanged) { continue; } ModifiedMethods.Add(diff); HasChanged = true; } } }
private void GetAddedAndRemovedAttributes(IEnumTypeData beforeEnum, IEnumTypeData afterEnum) { foreach (var oldAttribute in beforeEnum.AttributeData) { if (afterEnum.AttributeData.All(x => x.Name != oldAttribute.Name)) { RemovedAttributes.Add(oldAttribute); HasChanged = true; } } foreach (var newAttribute in afterEnum.AttributeData) { if (beforeEnum.AttributeData.All(x => x.Name != newAttribute.Name)) { AddedAttributes.Add(newAttribute); HasChanged = true; } } }