private void AddAffectedMethodsForChangedStaticConstructors()
        {
            var affectedTypes = MethodChanges
                                .Where(c => c.Method.IsStatic && c.Method.IsConstructor)
                                .Select(change => change.Method.DeclaringType.FullName).ToList();

            foreach (var type in affectedTypes)
            {
                var resolvedType = ClassDiagram.ResolveType(type);
                foreach (var method in resolvedType.Methods)
                {
                    MethodChanges.Add(new MethodChange(method, Change.Modified));
                }
            }
        }
        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 IsAffectedMethod(IMethod method)
        {
            return(MethodChanges.Any(m =>
            {
                string methodName;
                if (m.Method.IsConstructor)
                {
                    var mFullName = m.Method.FullName;
                    methodName = mFullName.Substring(mFullName.LastIndexOf(':') + 1);
                    if (methodName.EndsWith("()"))
                    {
                        methodName = methodName.Substring(0, methodName.Length - 2);
                    }
                }
                else
                {
                    methodName = m.Method.Name;
                }

                return m.Type == Change.Modified &&
                methodName.Equals(method.Name) &&
                m.Method.DeclaringType.FullName.Equals(method.TypeName);
            }));
        }