Beispiel #1
0
        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);
            }
              }
        }