private void AddBaseTypesForAffectedTypes()
 {
     foreach (var affectedClass in AffectedTypes.ToList())
     {
         ClassDiagram.GetBaseTypes(affectedClass).ToList().ForEach(baseType =>
         {
             AffectedTypes.Add(baseType);
             Edges.Add(new AffectedEdge(affectedClass, baseType, Edge.Inheritance));
         });
     }
 }
 private void AddSubTypesOverridingMethodsInAffectedTypes()
 {
     foreach (var affectedClass in AffectedTypes.ToList())
     {
         ClassDiagram.GetSubTypesOverridingAnyMethodsIn(affectedClass).ToList().ForEach(type =>
         {
             AffectedTypes.Add(type);
             Edges.Add(new AffectedEdge(type, affectedClass, Edge.IndirectSubtype));
         });
     }
 }
    public void ChangeTurnCount(AffectedTypes type, int change)
    {
        switch (type)
        {
        case AffectedTypes.Buffs:
            foreach (var buff in _appliedBuffs)
            {
                buff.Value.TurnCount += change;
                if (buff.Value.TurnCount <= 0)
                {
                    _appliedBuffs.Remove(buff.Key);
                }
                OnBuffsChanged?.Invoke(buff.Value);
            }
            break;

        case AffectedTypes.Dots:
            foreach (var dot in _appliedDots)
            {
                dot.Value.TurnCount += change;
                if (dot.Value.TurnCount <= 0)
                {
                    _appliedDots.Remove(dot.Key);
                }
                OnDotsChanged?.Invoke(dot.Value);
            }
            break;

        case AffectedTypes.Markers:
            foreach (var marker in _appliedMarkers)
            {
                marker.Value.TurnCount += change;
                if (marker.Value.TurnCount <= 0)
                {
                    _appliedMarkers.Remove(marker.Key);
                }
                OnMarkerChanged?.Invoke(marker.Value);
            }
            break;

        case AffectedTypes.Status:
            foreach (var status in _appliedStatuses)
            {
                status.Value.TurnCount += change;
                if (status.Value.TurnCount <= 0)
                {
                    _appliedStatuses.Remove(status.Key);
                }
                OnStatusChanged?.Invoke(status.Value);
            }
            break;
        }
    }
        private void AddTypesUsingAnyAffectedType()
        {
            foreach (var invoke in Coverage.SelectMany(e => e.Value).Where(invoke => !(invoke.From is TestMethod)))
            {
                if (IsInAffectedClass(invoke.Target) && IsAffectedMethod(invoke.Target) && !IsInAffectedClass(invoke.From))
                {
                    var from = ClassDiagram.ResolveType(invoke.From.TypeName);
                    if (from != null)
                    {
                        var fromMethod = from.Methods.First(m => m.Name.Equals(invoke.From.Name));
                        var target     = ClassDiagram.ResolveType(invoke.Target.TypeName);

                        AffectedTypes.Add(from);
                        Edges.Add(new AffectedEdge(from, target, Edge.Use));
                        MethodChanges.Add(new MethodChange(fromMethod, Change.Using));
                    }
                }
            }
        }
 public bool IsInAffectedClass(IMethod method)
 {
     return(AffectedTypes.Any(c => c != null && c.FullName.Equals(method.TypeName)));
 }