Example #1
0
        private void OnEnable()
        {
            if (m_Log == null)
            {
                m_Log = new Log(this);
            }

            if (m_Components == null)
            {
                m_Components = new ComponentController();
            }

            // Enable all our components
            for (int i = 0; i < m_WeavedAssemblies.Count; i++)
            {
                m_WeavedAssemblies[i].OnEnable();
            }
            m_Log.context = this;
            // Subscribe to the before reload event so we can modify the assemblies!
            m_Log.Info("Weaver Settings", "Subscribing to next assembly reload.", false);
            AssemblyUtility.PopulateAssemblyCache();
            m_Components.SetOwner(this);
#if UNITY_2017_1_OR_NEWER
            AssemblyReloadEvents.beforeAssemblyReload += CheckForAssemblyModifications;
#else
            m_Log.Warning("Dynamic Assembly Reload not support until Unity 2017. Enter play mode to reload assemblies to see the effects of Weaving.", false);
#endif
            WeaverAnalytics.OnSettingsEnabled(this);
        }
        private void OnComponentRemoved(ReorderableList list)
        {
            Object removedObject = m_SubObjects.GetArrayElementAtIndex(list.index).objectReferenceValue;

            if (removedObject != null)
            {
                string removedElementType = removedObject.GetType().FullName;
                WeaverAnalytics.SendEvent("Components", "Removed", removedElementType);
            }
            m_RemoveItemMethod.Invoke(list.index);
            OnComponentAddedOrRemoved();
        }
 private void OnTypeAdded(object argument)
 {
     WeaverAnalytics.SendEvent("Components", "Added", ((Type)argument).FullName);
     m_AddItemMethod.Invoke(argument);
     OnComponentAddedOrRemoved();
 }
Example #4
0
        /// <summary>
        /// Takes in a collection of assemblies and starts the weaving process for
        /// all of them.
        /// </summary>
        private void WeaveAssemblies(IList <WeavedAssembly> assemblies)
        {
            try
            {
                m_Log.Info("Weaver Settings", "Populating Assembly Cache", false);
                AssemblyUtility.PopulateAssemblyCache();
                // Create new resolver
                m_Resolver = new WeaverAssemblyResolver();
                // Create a new reader
                m_Log.Info("Weaver Settings", "Creating Reader Parameters", false);
                ReaderParameters readerParameters = new ReaderParameters();
                // Pass the reader our resolver
                readerParameters.AssemblyResolver = m_Resolver;
                // Tell the reader to look at symbols so we can get line numbers for errors, warnings, and logs.
                readerParameters.ReadSymbols = true;
                // Create our writer
                WriterParameters writerParameters = new WriterParameters();
                // We do want to write our symbols
                writerParameters.WriteSymbols = true;
                // Create a list of definitions
                Collection <ModuleDefinition> editingModules = new Collection <ModuleDefinition>();
                for (int i = 0; i < assemblies.Count; i++)
                {
                    // We have a changed assembly so we need to get the definition to modify.
                    m_Log.Info("Weaver Settings", "Creating ModuleDefinition for <i>" + assemblies[i].relativePath + "</i>.", false);
                    ModuleDefinition moduleDefinition = ModuleDefinition.ReadModule(assemblies[i].GetSystemPath(), readerParameters);
                    // Add it to our list
                    editingModules.Add(moduleDefinition);
                }
                m_Log.Info("Weaver Settings", "Initializing Components.", false);
                // Initialize our component manager
                m_Components.Initialize(this);
                // Visit Modules
                m_Log.Info("Weaver Settings", "Visiting Modules.", false);
                m_Components.VisitModules(editingModules, m_Log);
                // Save
                for (int i = 0; i < assemblies.Count; i++)
                {
                    m_Log.Info("Weaver Settings", "Writing Module <i>" + assemblies[i].relativePath + "</i> to disk.", false);
                    editingModules[i].Write(assemblies[i].GetSystemPath(), writerParameters);
                }
                assemblies.Clear();
                m_Log.Info("Weaver Settings", "Weaving Successfully Completed", false);

                // Stats
                m_Log.Info("Statistics", "Weaving Time ms: " + m_Timer.ElapsedMilliseconds, false);
                m_Log.Info("Statistics", "Modules Visited: " + m_Components.totalModulesVisited, false);
                m_Log.Info("Statistics", "Types Visited: " + m_Components.totalTypesVisited, false);
                m_Log.Info("Statistics", "Methods Visited: " + m_Components.totalMethodsVisited, false);
                m_Log.Info("Statistics", "Fields Visited: " + m_Components.totalFieldsVisited, false);
                m_Log.Info("Statistics", "Properties Visited: " + m_Components.totalPropertiesVisited, false);
                WeaverAnalytics.SendTiming("WeaveStats", "Elapsed Time", m_Timer.ElapsedMilliseconds);
                WeaverAnalytics.SendEvent("WeaveStats", "Modules Visited", componentController.totalModulesVisited.ToString(), null);
                WeaverAnalytics.SendEvent("WeaveStats", "Types Visited", componentController.totalTypesVisited.ToString(), null);
                WeaverAnalytics.SendEvent("WeaveStats", "Methods Visited", componentController.totalMethodsVisited.ToString(), null);
                WeaverAnalytics.SendEvent("WeaveStats", "Fields Visited", componentController.totalFieldsVisited.ToString(), null);
                WeaverAnalytics.SendEvent("WeaveStats", "Properties Visited", componentController.totalPropertiesVisited.ToString(), null);
            }
            catch (Exception e)
            {
                WeaverAnalytics.SendException(e.ToString(), true);
                throw e;
            }
        }