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); } } }
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; }
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); } } }