Beispiel #1
0
 public InterfaceImplementationWeaver(ConstructorWeaver constructorWeaver, MethodWeaver methodWeaver)
 {
     this.constructorWeaver          = constructorWeaver;
     this.methodWeaver               = methodWeaver;
     this.objectTypeReference        = WeavingInformation.ReferenceFinder.GetTypeReference(typeof(object));
     this.objectConstructorReference = WeavingInformation.ReferenceFinder.GetMethodReference(this.objectTypeReference, x => x.IsConstructor);
 }
        /// <summary>
        /// Transforms the methods in the <paramref name="target"/> using the given method rewriter.
        /// </summary>
        /// <param name="target">The transformation target.</param>
        /// <param name="rewriter">The method rewriter.</param>
        /// <param name="filter">The method filter that determines which methods will be rewritten.</param>
        public static void WeaveWith(this IReflectionVisitable target, IMethodRewriter rewriter,
                                     Func <MethodReference, bool> filter)
        {
            var weaver = new MethodWeaver(rewriter, filter);

            target.Accept(weaver);
        }
Beispiel #3
0
        public override void Execute()
        {
            var configOptions = new WeaverConfigOptions(Config);
            var config        = new WeaverConfig(configOptions, ModuleDefinition);
            var context       = new ModuleWeavingContext(ModuleDefinition, config);

            foreach (var type in ModuleDefinition.GetTypes())
            {
                foreach (var method in type.Methods)
                {
                    try
                    {
                        if (!MethodWeaver.NeedsProcessing(context, method))
                        {
                            continue;
                        }

                        _log.Debug($"Processing: {method.FullName}");
                        new MethodWeaver(context, method).Process();
                    }
                    catch (WeavingException ex)
                    {
                        AddError(ex.Message, ex.SequencePoint);
                        InvalidateMethod(method, ex.Message);
                    }
                }

                if (type.IsInlineILTypeUsageDeep(context))
                {
                    AddError($"Reference to InlineIL found in type {type.FullName}. InlineIL should not be referenced in attributes/constraints, as its assembly reference will be removed.", null);
                }
            }

            RemoveLibReference(context);
        }
        public TraceInjector(IWeaveParameters parameters)
            : base(parameters)
        {
            exceptionWeaver            = new ExceptionTraceWeaver();
            exceptionWeaver.Parameters = this.Parameters;

            itemTraceWeaver            = new ItemTraceWeaver();
            itemTraceWeaver.Parameters = this.Parameters;
        }
Beispiel #5
0
        public static void Execute()
        {
            IEnumerable <TypeDefinition> typesToProxy = WeavingInformation.ModuleDefinition.Types
                                                        .Where(HasStaticProxyAttribute)
                                                        .ToList();

            var constructorWeaver = new ConstructorWeaver();
            var methodWeaver      = new MethodWeaver();

            var interfaceImplementationWeaver = new InterfaceImplementationWeaver(constructorWeaver, methodWeaver);
            var classDecorationWeaver         = new ClassDecorationWeaver(constructorWeaver, methodWeaver);

            ImplementInterfaces(
                typesToProxy.Where(x => x.IsInterface),
                interfaceImplementationWeaver);

            DecorateClasses(classDecorationWeaver, typesToProxy.Where(x => x.IsClass).ToList());
        }
 public ClassDecorationWeaver(ConstructorWeaver constructorWeaver, MethodWeaver methodWeaver)
 {
     this.constructorWeaver = constructorWeaver;
     this.methodWeaver      = methodWeaver;
 }
 /// <summary>
 /// Transforms the methods in the <paramref name="target"/> using the given method rewriter.
 /// </summary>
 /// <param name="target">The transformation target.</param>
 /// <param name="rewriter">The method rewriter.</param>
 /// <param name="filter">The method filter that determines which methods will be rewritten.</param>
 public static void WeaveWith(this IReflectionVisitable target, IMethodRewriter rewriter,
     Func<MethodReference, bool> filter)
 {
     var weaver = new MethodWeaver(rewriter, filter);
     target.Accept(weaver);
 }