private void InitTargetTypes(IAssemblyTracker tracker)
        {
            foreach (var assembly in tracker.GetAssemblies())
            {
                foreach (var module in assembly.Modules)
                {
                    foreach (var typ in module.Types)
                    {
                        if (_visitorStrategies.Any(strategy => strategy.AreAllMethodsOfTypeTarget(typ)))
                        {
                            _targetTypes.Add(Tuple.Create(typ, assembly), true);
                        }
                    }
                }
            }

            foreach (var assembly in tracker.GetAssemblies())
            {
                foreach (var module in assembly.Modules)
                {
                    foreach (var typ in module.Types)
                    {
                        _targetTypes[Tuple.Create(typ, assembly)] = IsTargetRecursive(Tuple.Create(typ, assembly));
                    }
                }
            }
        }
        private void InitTargetTypes(IAssemblyTracker tracker)
        {
            foreach (var assembly in tracker.GetAssemblies ())
            foreach (var module in assembly.Modules)
              foreach (var typ in module.Types)
            if (_visitorStrategies.Any (strategy => strategy.AreAllMethodsOfTypeTarget (typ)))
              _targetTypes.Add (Tuple.Create (typ, assembly), true);

              foreach (var assembly in tracker.GetAssemblies ())
            foreach (var module in assembly.Modules)
              foreach (var typ in module.Types)
            _targetTypes[Tuple.Create (typ, assembly)] = IsTargetRecursive (Tuple.Create (typ, assembly));
        }
        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);
                }
            }
        }
        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);
                    }
                }
            }
        }
 public void InitializeCache(IAssemblyTracker tracker)
 {
     _cachedTypes.Clear();
       foreach (var assembly in tracker.GetAssemblies())
     foreach (var type in assembly.LoadAllTypes())
       _cachedTypes.Add (assembly.Name.BuildAssemblyQualifiedName (type), Tuple.Create (type, assembly));
       IsInitialized = true;
 }
        public void Transform(IAssemblyTracker tracker)
        {
            ArgumentUtility.CheckNotNull ("tracker", tracker);
              _tracker = tracker;

              var mixinTargetTypes =  from assemblyDefinition in tracker.GetAssemblies ()
                              from typeDefinition in assemblyDefinition.LoadAllTypes()
                              where _checker.CanBeMixed (assemblyDefinition.Name.BuildReflectionAssemblyQualifiedName(typeDefinition))
                              select new { Assembly = assemblyDefinition, TypeDef = typeDefinition };

              foreach (var mixinTargetType in mixinTargetTypes.ToList ())
            GenerateNewObjectMethods (mixinTargetType.Assembly, mixinTargetType.TypeDef);

              foreach(var assembly in tracker.GetAssemblies())
            foreach (var typ in assembly.LoadAllTypes())
              ReplaceNewStatement (assembly, typ);
        }
 public void InitializeCache(IAssemblyTracker tracker)
 {
     _cachedTypes.Clear();
     foreach (var assembly in tracker.GetAssemblies())
     {
         foreach (var type in assembly.LoadAllTypes())
         {
             _cachedTypes.Add(assembly.Name.BuildAssemblyQualifiedName(type), Tuple.Create(type, assembly));
         }
     }
     IsInitialized = true;
 }
示例#9
0
        public void Transform(IAssemblyTracker tracker)
        {
            ArgumentUtility.CheckNotNull("tracker", tracker);
            _tracker = tracker;

            var mixinTargetTypes = from assemblyDefinition in tracker.GetAssemblies()
                                   from typeDefinition in assemblyDefinition.LoadAllTypes()
                                   where _checker.CanBeMixed(assemblyDefinition.Name.BuildReflectionAssemblyQualifiedName(typeDefinition))
                                   select new { Assembly = assemblyDefinition, TypeDef = typeDefinition };

            foreach (var mixinTargetType in mixinTargetTypes.ToList())
            {
                GenerateNewObjectMethods(mixinTargetType.Assembly, mixinTargetType.TypeDef);
            }

            foreach (var assembly in tracker.GetAssemblies())
            {
                foreach (var typ in assembly.LoadAllTypes())
                {
                    ReplaceNewStatement(assembly, typ);
                }
            }
        }
        public void Transform(IAssemblyTracker tracker)
        {
            ArgumentUtility.CheckNotNull ("tracker", tracker);
              _tracker = tracker;

              foreach (var assemblyDefinition in tracker.GetAssemblies ())
              {
            foreach (var typeDefinition in assemblyDefinition.LoadAllTypes ())
            {
              ReplaceNewStatement (assemblyDefinition, typeDefinition);
              if (_factoryMakeProtected)
            GenerateNewObjectMethods (assemblyDefinition, typeDefinition);
            }
              }
        }
        /// <summary>
        /// Resolves the given memberID to a monocecil typeDefinition. The out parameter is null if the assembly containing the type is an untracked assembly
        /// and does not need to be tracked. In case it is tracked, the out parameter contains the containing assembly and a new reference has to be added.
        /// </summary>
        public static TypeDefinition ResolveToTypeDefinition(MemberID member, IAssemblyTracker tracker, out AssemblyNameReference containingTrackedAssembly)
        {
            if (member == null)
            {
                containingTrackedAssembly = null;
                return(null);
            }
            containingTrackedAssembly = null;
            if (!_cachedTypes.ContainsKey(member))
            {
                AssemblyDefinition containingAssembly = null;
                foreach (var assemblyDefinition in tracker.GetAssemblies())
                {
                    if (assemblyDefinition.FullName == member.AssemblyQualifiedTypeName.Substring(member.AssemblyQualifiedTypeName.IndexOf(",") + 1).Trim())
                    {
                        containingAssembly = assemblyDefinition;
                    }
                }

                if (containingAssembly == null)
                {
                    containingAssembly = AssemblyDefinition.ReadAssembly(member.ModuleName);
                }
                else
                {
                    containingTrackedAssembly = containingAssembly.Name;
                }

                foreach (var moduleDefinition in containingAssembly.Modules)
                {
                    if (moduleDefinition.FullyQualifiedName == member.ModuleName)
                    {
                        foreach (var typeDefinition in moduleDefinition.Types)
                        {
                            if (typeDefinition.FullName == member.AssemblyQualifiedTypeName.Substring(0, member.AssemblyQualifiedTypeName.IndexOf(",")))
                            {
                                _cachedTypes[member] = new Tuple <TypeDefinition, AssemblyNameReference> (typeDefinition, containingAssembly.Name);
                                return(_cachedTypes[member].Item1);
                            }
                        }
                    }
                }
                containingTrackedAssembly = null;
                return(null);
            }
            containingTrackedAssembly = _cachedTypes[member].Item2;
            return(_cachedTypes[member].Item1);
        }
        public void Transform(IAssemblyTracker tracker)
        {
            ArgumentUtility.CheckNotNull("tracker", tracker);
            _tracker = tracker;

            foreach (var assemblyDefinition in tracker.GetAssemblies())
            {
                foreach (var typeDefinition in assemblyDefinition.LoadAllTypes())
                {
                    ReplaceNewStatement(assemblyDefinition, typeDefinition);
                    if (_factoryMakeProtected)
                    {
                        GenerateNewObjectMethods(assemblyDefinition, typeDefinition);
                    }
                }
            }
        }
        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);
            }
              }
        }