コード例 #1
0
 private void ReplaceNewStatement(AssemblyDefinition assembly, TypeDefinition analyzedType)
 {
     foreach (var targetMethod in analyzedType.Methods)
     {
         if (_replacer.ReplaceNewStatements(assembly, analyzedType, targetMethod, _tracker, _infoWrapper))
         {
             _tracker.MarkModified(assembly);
         }
     }
 }
コード例 #2
0
 private void GenerateNewObjectMethods(AssemblyDefinition assembly, TypeDefinition targetType)
 {
     foreach (var method in targetType.Methods.ToList())
     {
         if (method.IsConstructor && !targetType.Methods.Any(m => (m.Name == "NewObject" && HaveSameParameters(method, m))))
         {
             _codeGenerator.CreateNewObjectMethod(assembly, method, _tracker);
             _tracker.MarkModified(assembly);
         }
     }
 }
コード例 #3
0
        public void Transform(IAssemblyTracker tracker)
        {
            ArgumentUtility.CheckNotNull ("tracker", tracker);
              MethodDefinition customAttributeCtor;

              var modifiedMethods = from assemblyDefinition in tracker.GetAssemblies ()
                            from typeDefinition in assemblyDefinition.LoadAllTypes ()
                            where _wrapper.ShouldVirtualizeType (typeDefinition)
                            from methodDefinition in typeDefinition.Methods
                            where _wrapper.ShouldVirtualizeMethod (methodDefinition)
                            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, _wrapper.GetUnspeakableMethodName (modifiedMethodDefinition.Method)
            );
              modifiedMethodDefinition.Method.DeclaringType.Methods.Add (virtualMethod);

              if ((customAttributeCtor = _wrapper.GetVirtualizedAttribute (modifiedMethodDefinition.Assembly, tracker)) != null)
            AddAttributes (modifiedMethodDefinition.Method, virtualMethod, customAttributeCtor);
            }
              }
        }
コード例 #4
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);
                }
            }
        }
コード例 #5
0
        public void Transform(IAssemblyTracker tracker)
        {
            ArgumentUtility.CheckNotNull("tracker", tracker);
            MethodDefinition customAttributeCtor;

            var modifiedMethods = from assemblyDefinition in tracker.GetAssemblies()
                                  from typeDefinition in assemblyDefinition.LoadAllTypes()
                                  where _wrapper.ShouldVirtualizeType(typeDefinition)
                                  from methodDefinition in typeDefinition.Methods
                                  where _wrapper.ShouldVirtualizeMethod(methodDefinition)
                                  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, _wrapper.GetUnspeakableMethodName(modifiedMethodDefinition.Method)
                        );
                    modifiedMethodDefinition.Method.DeclaringType.Methods.Add(virtualMethod);

                    if ((customAttributeCtor = _wrapper.GetVirtualizedAttribute(modifiedMethodDefinition.Assembly, tracker)) != null)
                    {
                        AddAttributes(modifiedMethodDefinition.Method, virtualMethod, customAttributeCtor);
                    }
                }
            }
        }
コード例 #6
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);
            }
              }
        }