public static Dictionary <string, MethodReference> BuildFor(AssemblyDefinition assemblyDefinition) { var ret = new Dictionary <string, MethodReference>(); foreach (var m in assemblyDefinition.AllNonIgnoredMethods()) { ret.Add(m.GetChangeCacheName(), m); } return(ret); }
public IEnumerable <Change <MethodReference> > GetChangesBetween(AssemblyDefinition oldAssembly, AssemblyDefinition newAssembly) { var changeDetector = new MethodILChangeDetector(); var oldCache = AssemblyTypeMethodMapBuilder.BuildFor(oldAssembly); var newCache = AssemblyTypeMethodMapBuilder.BuildFor(newAssembly); var differences = MapKeyDifferenceFinder.GetChangesBetween(oldCache, newCache); foreach (var method in newAssembly.AllNonIgnoredMethods()) { var current = oldAssembly.MainModule.GetType(method.DeclaringType.FullName); if (current == null) { continue; } if (method.ContainsIgnoreAttribute()) { continue; } foreach (var oldMethod in current.Methods) { if (oldMethod.GetChangeCacheName() == method.GetChangeCacheName()) { if (changeDetector.AreDifferentIL(oldMethod, method)) { differences.Add( new Change <MethodReference>( ChangeType.Modify, method.ThreadSafeResolve())); break; } } } } differences = IEnumerableResolver.ResolveCompilerGeneratedCode(differences); return(differences); }