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