Ejemplo n.º 1
0
        private void RegisterWriter(MethodDefinition method)
        {
            ReaderWriterProcessor.Log($"Found writer extension methods: {method.Name}");

            var dataType = method.Parameters[1].ParameterType;

            writers.Register(module.ImportReference(dataType), module.ImportReference(method));
        }
Ejemplo n.º 2
0
        public AssemblyDefinition Weave(ICompiledAssembly compiledAssembly)
        {
            try
            {
                CurrentAssembly = AssemblyDefinitionFor(compiledAssembly);

                ModuleDefinition module = CurrentAssembly.MainModule;
                readers = new Readers(module, logger);
                writers = new Writers(module, logger);
                var rwstopwatch = System.Diagnostics.Stopwatch.StartNew();
                propertySiteProcessor = new PropertySiteProcessor();
                var rwProcessor = new ReaderWriterProcessor(module, readers, writers);

                bool modified = rwProcessor.Process();
                rwstopwatch.Stop();
                Console.WriteLine($"Find all reader and writers took {rwstopwatch.ElapsedMilliseconds} milliseconds");

                Console.WriteLine($"Script Module: {module.Name}");

                modified |= WeaveModule(module);

                if (!modified)
                {
                    return(CurrentAssembly);
                }

                rwProcessor.InitializeReaderAndWriters();

                return(CurrentAssembly);
            }
            catch (Exception e)
            {
                logger.Error("Exception :" + e);
                return(null);
            }
        }
Ejemplo n.º 3
0
        public AssemblyDefinition Weave(ICompiledAssembly compiledAssembly)
        {
            try
            {
                timer = new WeaverDiagnosticsTimer()
                {
                    writeToFile = true
                };
                timer.Start(compiledAssembly.Name);

                using (timer.Sample("AssemblyDefinitionFor"))
                {
                    CurrentAssembly = AssemblyDefinitionFor(compiledAssembly);
                }

                ModuleDefinition module = CurrentAssembly.MainModule;
                readers = new Readers(module, logger);
                writers = new Writers(module, logger);
                propertySiteProcessor = new PropertySiteProcessor();
                var rwProcessor = new ReaderWriterProcessor(module, readers, writers);

                bool modified = false;
                using (timer.Sample("ReaderWriterProcessor"))
                {
                    modified = rwProcessor.Process();
                }

                IReadOnlyList <FoundType> foundTypes = FindAllClasses(module);

                using (timer.Sample("AttributeProcessor"))
                {
                    var attributeProcessor = new AttributeProcessor(module, logger);
                    modified |= attributeProcessor.ProcessTypes(foundTypes);
                }

                using (timer.Sample("WeaveNetworkBehavior"))
                {
                    foreach (FoundType foundType in foundTypes)
                    {
                        if (foundType.IsNetworkBehaviour)
                        {
                            modified |= WeaveNetworkBehavior(foundType);
                        }
                    }
                }


                if (modified)
                {
                    using (timer.Sample("propertySiteProcessor"))
                    {
                        propertySiteProcessor.Process(module);
                    }

                    using (timer.Sample("InitializeReaderAndWriters"))
                    {
                        rwProcessor.InitializeReaderAndWriters();
                    }
                }

                return(CurrentAssembly);
            }
            catch (Exception e)
            {
                logger.Error("Exception :" + e);
                return(null);
            }
            finally
            {
                // end in finally incase it return early
                timer?.End();
            }
        }
Ejemplo n.º 4
0
        public AssemblyDefinition Weave(ICompiledAssembly compiledAssembly)
        {
            Log($"Starting weaver on {compiledAssembly.Name}");
            try
            {
                timer = new WeaverDiagnosticsTimer()
                {
                    writeToFile = true
                };
                timer.Start(compiledAssembly.Name);

                using (timer.Sample("AssemblyDefinitionFor"))
                {
                    CurrentAssembly = AssemblyDefinitionFor(compiledAssembly);
                }


                var module = CurrentAssembly.MainModule;
                readers = new Readers(module, logger);
                writers = new Writers(module, logger);
                propertySiteProcessor = new PropertySiteProcessor();
                var rwProcessor = new ReaderWriterProcessor(module, readers, writers);

                var modified = false;
                using (timer.Sample("ReaderWriterProcessor"))
                {
                    modified = rwProcessor.Process();
                }

                var foundTypes = FindAllClasses(module);

                using (timer.Sample("AttributeProcessor"))
                {
                    var attributeProcessor = new AttributeProcessor(module, logger);
                    modified |= attributeProcessor.ProcessTypes(foundTypes);
                }

                using (timer.Sample("WeaveNetworkBehavior"))
                {
                    foreach (var foundType in foundTypes)
                    {
                        if (foundType.IsNetworkBehaviour)
                        {
                            modified |= WeaveNetworkBehavior(foundType);
                        }
                    }
                }


                if (modified)
                {
                    using (timer.Sample("propertySiteProcessor"))
                    {
                        propertySiteProcessor.Process(module);
                    }

                    using (timer.Sample("InitializeReaderAndWriters"))
                    {
                        rwProcessor.InitializeReaderAndWriters();
                    }
                }

                return(CurrentAssembly);
            }
            catch (Exception e)
            {
                logger.Error("Exception :" + e);
                // write line too because the error about doesn't show stacktrace
                Console.WriteLine("[WeaverException] :" + e);
                return(null);
            }
            finally
            {
                Log($"Finished weaver on {compiledAssembly.Name}");
                // end in finally incase it return early
                timer?.End();
            }
        }
Ejemplo n.º 5
0
 private void RegisterReader(MethodDefinition method)
 {
     ReaderWriterProcessor.Log($"Found reader extension methods: {method.Name}");
     readers.Register(module.ImportReference(method.ReturnType), module.ImportReference(method));
 }