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); })); }