/// <summary> /// Fires when the host context has changed /// </summary> /// <param name="Context">The pipeline that is changing state</param> /// <param name="OldState">The old state</param> /// <param name="NewState">The new state</param> void hostContext_StateChanged(Pipeline Context, Pipeline.PipelineStates OldState, Pipeline.PipelineStates NewState) { switch (NewState) { case Pipeline.PipelineStates.SourceLoaded: Dictionary<String, StringCollection> parameters = hostContext.Data["CommandParameters"] as Dictionary<String, StringCollection>; StringCollection tCollection = null; if (parameters.TryGetValue("optimize", out tCollection)) enabled = Convert.ToBoolean(tCollection[0]); // Collection if (parameters.TryGetValue("collapse", out tCollection)) collapse = Convert.ToBoolean(tCollection[0]); // Combination if (parameters.TryGetValue("combine", out tCollection)) combine = Convert.ToBoolean(tCollection[0]); if (parameters.TryGetValue("collapse-ignore-fixed", out tCollection)) collapseIgnoreFixed = Convert.ToBoolean(tCollection[0]); if (parameters.TryGetValue("collapse-useless-name", out tCollection)) foreach(String s in tCollection) uselessWords.Add(s); if (parameters.TryGetValue("collapse-important-name", out tCollection)) foreach (String s in tCollection) importantWords.Add(s); if (parameters.TryGetValue("collapse-adv-naming", out tCollection)) collapseSpecialNaming = Convert.ToBoolean(tCollection[0]); if (parameters.TryGetValue("combine-replay", out tCollection)) logFile = tCollection[0]; // Collapse ignore if (!parameters.TryGetValue("collapse-ignore", out collapseIgnore) && collapse) throw new InvalidOperationException("If --collapse is specified, then the --collapse-ignore must be specified"); break; case Pipeline.PipelineStates.Compiled: if (!enabled) return; // Optimize the COR repository System.Diagnostics.Trace.WriteLine("Optimizing COR Repository...", "information"); ClassRepository classRep = hostContext.Data["SourceCR"] as ClassRepository; ClassRepositoryOptimizer optimizer = new ClassRepositoryOptimizer(); // Load the replay log if possible var combineLog = new CombineLog(); if (!String.IsNullOrEmpty(logFile) && File.Exists(logFile)) combineLog = CombineLog.Load(logFile); ClassRepository optimizedRepository = optimizer.Optimize(classRep, combineLog); // Save the replay log if (!String.IsNullOrEmpty(logFile)) combineLog.Save(logFile); System.Diagnostics.Trace.WriteLine(string.Format("Optimization resulted in {0:#,##0} fewer features ({1:#0}% reduction)", classRep.Count - optimizedRepository.Count, (1 - ((float)optimizedRepository.Count / classRep.Count)) * 100), "debug"); hostContext.Data["SourceCR"] = optimizedRepository; break; } }
/// <summary> /// Fires when the host context has changed /// </summary> /// <param name="Context">The pipeline that is changing state</param> /// <param name="OldState">The old state</param> /// <param name="NewState">The new state</param> void hostContext_StateChanged(Pipeline Context, Pipeline.PipelineStates OldState, Pipeline.PipelineStates NewState) { switch (NewState) { case Pipeline.PipelineStates.SourceLoaded: Dictionary <String, StringCollection> parameters = hostContext.Data["CommandParameters"] as Dictionary <String, StringCollection>; StringCollection tCollection = null; if (parameters.TryGetValue("optimize", out tCollection)) { enabled = Convert.ToBoolean(tCollection[0]); } // Collection if (parameters.TryGetValue("collapse", out tCollection)) { collapse = Convert.ToBoolean(tCollection[0]); } // Combination if (parameters.TryGetValue("combine", out tCollection)) { combine = Convert.ToBoolean(tCollection[0]); } if (parameters.TryGetValue("collapse-ignore-fixed", out tCollection)) { collapseIgnoreFixed = Convert.ToBoolean(tCollection[0]); } if (parameters.TryGetValue("collapse-useless-name", out tCollection)) { foreach (String s in tCollection) { uselessWords.Add(s); } } if (parameters.TryGetValue("collapse-important-name", out tCollection)) { foreach (String s in tCollection) { importantWords.Add(s); } } if (parameters.TryGetValue("collapse-adv-naming", out tCollection)) { collapseSpecialNaming = Convert.ToBoolean(tCollection[0]); } if (parameters.TryGetValue("combine-replay", out tCollection)) { logFile = tCollection[0]; } // Collapse ignore if (!parameters.TryGetValue("collapse-ignore", out collapseIgnore) && collapse) { throw new InvalidOperationException("If --collapse is specified, then the --collapse-ignore must be specified"); } break; case Pipeline.PipelineStates.Compiled: if (!enabled) { return; } // Optimize the COR repository System.Diagnostics.Trace.WriteLine("Optimizing COR Repository...", "information"); ClassRepository classRep = hostContext.Data["SourceCR"] as ClassRepository; ClassRepositoryOptimizer optimizer = new ClassRepositoryOptimizer(); // Load the replay log if possible var combineLog = new CombineLog(); if (!String.IsNullOrEmpty(logFile) && File.Exists(logFile)) { combineLog = CombineLog.Load(logFile); } ClassRepository optimizedRepository = optimizer.Optimize(classRep, combineLog); // Save the replay log if (!String.IsNullOrEmpty(logFile)) { combineLog.Save(logFile); } System.Diagnostics.Trace.WriteLine(string.Format("Optimization resulted in {0:#,##0} fewer features ({1:#0}% reduction)", classRep.Count - optimizedRepository.Count, (1 - ((float)optimizedRepository.Count / classRep.Count)) * 100), "debug"); hostContext.Data["SourceCR"] = optimizedRepository; break; } }