public void Transform(IAssemblyTracker tracker) { ArgumentUtility.CheckNotNull("tracker", tracker); _selectionStrategy = _selectionFactory.CreateSelector(tracker); var modifiedMethods = from assemblyDefinition in tracker.GetAssemblies() from typeDefinition in assemblyDefinition.LoadAllTypes() from methodDefinition in typeDefinition.Methods where _selectionStrategy.IsTarget(methodDefinition, assemblyDefinition) select new { Assembly = assemblyDefinition, Method = methodDefinition }; foreach (var modifiedMethodDefinition in modifiedMethods.ToList()) { if (!modifiedMethodDefinition.Method.IsVirtual && !modifiedMethodDefinition.Method.IsStatic && !modifiedMethodDefinition.Method.IsConstructor && !modifiedMethodDefinition.Method.CustomAttributes.Any(ca => ca.AttributeType.Namespace == "System.Runtime.Serialization")) { tracker.MarkModified(modifiedMethodDefinition.Assembly); var virtualMethod = _codeGenerator.GenerateMethodAndMoveBody(modifiedMethodDefinition.Method); modifiedMethodDefinition.Method.DeclaringType.Methods.Add(virtualMethod); AddAttributes(virtualMethod); _markingAttributeStrategy.AddCustomAttribute(modifiedMethodDefinition.Method, modifiedMethodDefinition.Assembly); } } }
public void Transform(IAssemblyTracker tracker) { ArgumentUtility.CheckNotNull ("tracker", tracker); _selectionStrategy = _selectionFactory.CreateSelector (tracker); var modifiedMethods = from assemblyDefinition in tracker.GetAssemblies () from typeDefinition in assemblyDefinition.LoadAllTypes () from methodDefinition in typeDefinition.Methods where _selectionStrategy.IsTarget (methodDefinition, assemblyDefinition) select new { Assembly = assemblyDefinition, Method = methodDefinition }; foreach (var modifiedMethodDefinition in modifiedMethods.ToList ()) { if (!modifiedMethodDefinition.Method.IsVirtual && !modifiedMethodDefinition.Method.IsStatic && !modifiedMethodDefinition.Method.IsConstructor && !modifiedMethodDefinition.Method.CustomAttributes.Any (ca => ca.AttributeType.Namespace == "System.Runtime.Serialization")) { tracker.MarkModified (modifiedMethodDefinition.Assembly); var virtualMethod = _codeGenerator.GenerateMethodAndMoveBody (modifiedMethodDefinition.Method); modifiedMethodDefinition.Method.DeclaringType.Methods.Add (virtualMethod); AddAttributes (virtualMethod); _markingAttributeStrategy.AddCustomAttribute (modifiedMethodDefinition.Method, modifiedMethodDefinition.Assembly); } } }