From 3c7f1b398797d8b22221a16391ce7f710192458d Mon Sep 17 00:00:00 2001 From: Eusebiu Marcu Date: Wed, 10 Aug 2011 01:40:40 +0200 Subject: [PATCH] remove static data. --- .../Scripting/Test/Utils/MockProject.cs | 7 +- .../Debugger/Debugger.AddIn/Pads/WatchPad.cs | 93 +++++++------------ .../Debugger.AddIn/Pads/WatchPadModel.cs | 36 +------ .../Project/ICSharpCode.SharpDevelop.csproj | 4 - .../Project/Src/Project/AbstractProject.cs | 17 ++-- src/Main/Base/Project/Src/Project/IProject.cs | 5 + .../SavedData/IProjectSavedData.cs | 60 ------------ .../SavedData/ProjectSavedDataConverter.cs | 54 ----------- .../SavedData/SavedDataManager.cs | 81 ---------------- .../MockProjectForTagProvider.cs | 6 ++ 10 files changed, 59 insertions(+), 304 deletions(-) delete mode 100644 src/Main/Base/Project/Src/Services/ProjectService/SavedData/IProjectSavedData.cs delete mode 100644 src/Main/Base/Project/Src/Services/ProjectService/SavedData/ProjectSavedDataConverter.cs delete mode 100644 src/Main/Base/Project/Src/Services/ProjectService/SavedData/SavedDataManager.cs diff --git a/src/AddIns/BackendBindings/Scripting/Test/Utils/MockProject.cs b/src/AddIns/BackendBindings/Scripting/Test/Utils/MockProject.cs index cab9118b36..e47eb2781d 100644 --- a/src/AddIns/BackendBindings/Scripting/Test/Utils/MockProject.cs +++ b/src/AddIns/BackendBindings/Scripting/Test/Utils/MockProject.cs @@ -214,6 +214,12 @@ namespace ICSharpCode.Scripting.Tests.Utils } } + public Properties ProjectSpecificProperties { + get { + throw new NotImplementedException(); + } + } + public IEnumerable GetItemsOfType(ItemType type) { throw new NotImplementedException(); @@ -310,6 +316,5 @@ namespace ICSharpCode.Scripting.Tests.Utils throw new NotImplementedException(); } #endregion - } } diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPad.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPad.cs index 299fa04985..9b6ffaed1b 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPad.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPad.cs @@ -7,6 +7,7 @@ using System.Collections.Specialized; using System.Linq; using System.Windows; using System.Windows.Input; +using System.Xml.Serialization; using Debugger; using Debugger.AddIn; @@ -17,7 +18,6 @@ using ICSharpCode.Core.Presentation; using ICSharpCode.NRefactory; using ICSharpCode.SharpDevelop.Debugging; using ICSharpCode.SharpDevelop.Project; -using ICSharpCode.SharpDevelop.Project.SavedData; using Exception = System.Exception; namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -69,87 +69,60 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads // wire events that influence the items LoadSavedNodes(); ProjectService.SolutionClosed += delegate { watchList.WatchItems.Clear(); }; - ProjectService.SolutionPreferencesSaving += OnSolutionClosing; - ProjectService.ProjectRemoved += OnProjectRemoved; - ProjectService.ProjectAdded += OnProjectAdded; + ProjectService.ProjectAdded += delegate { LoadSavedNodes(); }; ProjectService.SolutionLoaded += delegate { LoadSavedNodes(); }; } #region Saved nodes - void AddNodes(Func predicate) - { - if (predicate == null) - throw new ArgumentNullException("predicate"); - - // get nodes of current projects - List temp = new List(); - foreach (var data in SavedDataManager.GetSavedData().Where(predicate)) { - string[] v = data.SavedString.Split('|'); - - TextNode node = new TextNode(null, v[5], (SupportedLanguage)Enum.Parse(typeof(SupportedLanguage), v[7])) { ProjectName = data.ProjectName }; - temp.Add(node); - } - - // add them to watch list - temp.ForEach(d => { if (!watchList.WatchItems.Contains(d)) watchList.WatchItems.Add(d); } ); - } - void LoadSavedNodes() { - AddNodes(d => d.SavedDataType == ProjectSavedDataType.WatchVariables && - ProjectService.OpenSolution.Projects.Any(p => p.Name == d.ProjectName)); - - // remove them temporarilly - they will be saved on exit - SavedDataManager.RemoveAll(d => d.SavedDataType == ProjectSavedDataType.WatchVariables && - ProjectService.OpenSolution.Projects.Any(p => p.Name == d.ProjectName)); - } - - void OnSolutionClosing(object sender, SolutionEventArgs e) - { - foreach (var element in watchList.WatchItems) { - SavedDataManager.Add((IProjectSavedData)element); - } - } - - void OnProjectAdded(object sender, ProjectEventArgs e) - { - AddNodes(d => d.SavedDataType == ProjectSavedDataType.WatchVariables && e.Project.Name == d.ProjectName); - } - - void OnProjectRemoved(object sender, ProjectEventArgs e) - { - if (e.Project == null) + var props = GetSavedVariablesProperties(); + if (props == null) return; - // get the specific nodes from the list - List nodes = new List(); - foreach (var element in watchList.WatchItems - .OfType() - .Where(tn => tn.ProjectName == e.Project.Name)) { - nodes.Add(element); + foreach (var element in props.Elements) { + watchList.WatchItems.Add(new TextNode(null, element, (SupportedLanguage)Enum.Parse(typeof(SupportedLanguage), props[element]))); } - - // remove nodes from the list - nodes.ForEach(n => watchList.WatchItems.Remove(n)); } void OnWatchItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { // add to saved data - var data = e.NewItems[0] as IProjectSavedData; - if (data != null) - SavedDataManager.Add(data); + var data = e.NewItems[0] as TextNode; + if (data != null) { + var props = GetSavedVariablesProperties(); + if (props == null) return; + props.Set(data.FullName, data.Language.ToString()); + } } if (e.Action == NotifyCollectionChangedAction.Remove) { // remove from saved data - var data = e.OldItems[0] as IProjectSavedData; - if (data != null) - SavedDataManager.Remove(data); + var data = e.OldItems[0] as TextNode; + if (data != null) { + var props = GetSavedVariablesProperties(); + if (props == null) return; + props.Remove(data.FullName); + } } } + + Properties GetSavedVariablesProperties() + { + if (ProjectService.CurrentProject == null) + return null; + if (ProjectService.CurrentProject.ProjectSpecificProperties == null) + return null; + + var props = ProjectService.CurrentProject.ProjectSpecificProperties.Get("watchVars") as Properties; + if (props == null) { + ProjectService.CurrentProject.ProjectSpecificProperties.Set("watchVars", new Properties()); + } + + return ProjectService.CurrentProject.ProjectSpecificProperties.Get("watchVars") as Properties; + } #endregion diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPadModel.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPadModel.cs index f599aa0e12..2357c06e6b 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPadModel.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/WatchPadModel.cs @@ -6,20 +6,16 @@ using System.Text; using Debugger.AddIn.TreeModel; using ICSharpCode.NRefactory; using ICSharpCode.SharpDevelop.Project; -using ICSharpCode.SharpDevelop.Project.SavedData; namespace ICSharpCode.SharpDevelop.Gui.Pads { - public class TextNode : TreeNode, ISetText, IProjectSavedData + public class TextNode : TreeNode, ISetText { public TextNode(TreeNode parent, string text, SupportedLanguage language) : base(parent) { this.Name = text; this.Language = language; - - if (ProjectService.CurrentProject != null) - ProjectName = ProjectService.CurrentProject.Name; } public override bool CanSetText { @@ -41,36 +37,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads } public SupportedLanguage Language { get; set; } - - #region IProjectSavedData implementation - - string savedString; - - public string SavedString { - get { - StringBuilder sb = new StringBuilder(); - sb.Append("ProjectName"); sb.Append('|'); sb.Append(ProjectName); sb.Append('|'); - sb.Append("ProjectSavedDataType"); sb.Append('|'); sb.Append(SavedDataType); sb.Append('|'); - sb.Append("FullName"); sb.Append('|'); sb.Append(FullName); sb.Append('|'); - sb.Append("Language"); sb.Append('|'); sb.Append(Language.ToString()); - - savedString = sb.ToString(); - return savedString; - } - set { savedString = value; } - } - - public ProjectSavedDataType SavedDataType { - get { - return ProjectSavedDataType.WatchVariables; - } - } - - public string ProjectName { - get; internal set; - } - - #endregion } public class ErrorInfoNode : ICorDebug.InfoNode diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index a294f06954..9518e0dcff 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -243,9 +243,6 @@ SelectCulturePanel.xaml Code - - - WebProjectOptionsPanel.xaml @@ -851,7 +848,6 @@ - diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index 9da00fb957..0fb18130a2 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -14,7 +14,6 @@ using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Debugging; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui.OptionPanels; -using ICSharpCode.SharpDevelop.Project.SavedData; namespace ICSharpCode.SharpDevelop.Project { @@ -89,9 +88,8 @@ namespace ICSharpCode.SharpDevelop.Project if (webOptions != null) properties.Set("WebProjectOptions", webOptions); - // other project data - logic in ProjectSavedDataConverter - properties.Set("projectSavedData_" + Name, SavedDataManager.GetSavedData() - .Where(d => d.ProjectName == Name).ToArray()); + // other project data + properties.Set("projectSavedData", ProjectSpecificProperties ?? new Properties()); return properties; } @@ -110,11 +108,8 @@ namespace ICSharpCode.SharpDevelop.Project // web project properties WebProjectsOptions.Instance.SetWebProjectOptions(Name, memento.Get("WebProjectOptions", new WebProjectOptions()) as WebProjectOptions); - // other project data - logic in ProjectSavedDataConverter - foreach(var data in memento.Get("projectSavedData_" + Name, new IProjectSavedData[0]) - .Where(d => d.ProjectName == Name)) { - SavedDataManager.Add(data); - } + // other project data + ProjectSpecificProperties = memento.Get("projectSavedData", new Properties()); } #endregion @@ -588,5 +583,9 @@ namespace ICSharpCode.SharpDevelop.Project public virtual void SaveProjectExtensions(string name, XElement element) { } + + public Properties ProjectSpecificProperties { + get; protected set; + } } } diff --git a/src/Main/Base/Project/Src/Project/IProject.cs b/src/Main/Base/Project/Src/Project/IProject.cs index aa1047dfee..421e367c19 100644 --- a/src/Main/Base/Project/Src/Project/IProject.cs +++ b/src/Main/Base/Project/Src/Project/IProject.cs @@ -225,6 +225,11 @@ namespace ICSharpCode.SharpDevelop.Project /// bool IsStartable { get; } + /// + /// Gets project specific properties. + /// + Properties ProjectSpecificProperties { get; } + /// /// Starts the project. /// diff --git a/src/Main/Base/Project/Src/Services/ProjectService/SavedData/IProjectSavedData.cs b/src/Main/Base/Project/Src/Services/ProjectService/SavedData/IProjectSavedData.cs deleted file mode 100644 index f595ed5f8a..0000000000 --- a/src/Main/Base/Project/Src/Services/ProjectService/SavedData/IProjectSavedData.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.ComponentModel; -using System.Collections.Generic; - -namespace ICSharpCode.SharpDevelop.Project.SavedData -{ - public enum ProjectSavedDataType - { - WatchVariables - } - - /// - /// Interface for storing project specific data. - /// When implementing this, one should be carefull when and how - /// the SavedDataManager is used in order to not alter the other data. - /// - [TypeConverter(typeof(ProjectSavedDataConverter))] - public interface IProjectSavedData - { - /// - /// Saved data type. - /// - ProjectSavedDataType SavedDataType { get; } - - /// - /// Saved data. - /// The format is: "ProjectName"|{0}|"ProjectSavedDataType"|{1}|(specific data splited by '|'). - /// - string SavedString { get; set; } - - /// - /// Gets the project name. - /// - string ProjectName { get; } - } - - /// - /// Dummy data. Used to map the saved data and exposed to addins where project specific data can exist. - /// - public sealed class DummyProjectSavedData : IProjectSavedData - { - public ProjectSavedDataType SavedDataType { get; set; } - - public string SavedString { get; set; } - - public string ProjectName { - get { - if (string.IsNullOrEmpty(SavedString)) - return string.Empty; - - string[] v = SavedString.Split('|'); - - return v[1]; - } - } - } -} diff --git a/src/Main/Base/Project/Src/Services/ProjectService/SavedData/ProjectSavedDataConverter.cs b/src/Main/Base/Project/Src/Services/ProjectService/SavedData/ProjectSavedDataConverter.cs deleted file mode 100644 index 8256ea7b43..0000000000 --- a/src/Main/Base/Project/Src/Services/ProjectService/SavedData/ProjectSavedDataConverter.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.ComponentModel; -using System.Globalization; -using System.Text; - -namespace ICSharpCode.SharpDevelop.Project.SavedData -{ - public sealed class ProjectSavedDataConverter : TypeConverter - { - public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) - { - if (sourceType == typeof(string)) { - return true; - } else { - return base.CanConvertFrom(context, sourceType); - } - } - - public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) - { - // convert from saved data(string) to objects - if (value is string) { - string[] v = ((string)value).Split('|'); - ProjectSavedDataType type = (ProjectSavedDataType)Enum.Parse(typeof(ProjectSavedDataType), v[3]); - var data = new DummyProjectSavedData { - SavedString = (string)value, - SavedDataType = type - }; - return data; - } else { - return base.ConvertFrom(context, culture, value); - } - } - - public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) - { - // convert objects to saved data(string) - var data = value as IProjectSavedData; - if (destinationType == typeof(string) && data != null) { - switch (data.SavedDataType) { - case ProjectSavedDataType.WatchVariables: - return data.SavedString; - default: - throw new Exception("Invalid value for ProjectSavedDataType"); - } - } else { - return base.ConvertTo(context, culture, value, destinationType); - } - } - } -} diff --git a/src/Main/Base/Project/Src/Services/ProjectService/SavedData/SavedDataManager.cs b/src/Main/Base/Project/Src/Services/ProjectService/SavedData/SavedDataManager.cs deleted file mode 100644 index 2d7c6e735b..0000000000 --- a/src/Main/Base/Project/Src/Services/ProjectService/SavedData/SavedDataManager.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; - -namespace ICSharpCode.SharpDevelop.Project.SavedData -{ - /// - /// Stores the project specific data. - /// - public static class SavedDataManager - { - static readonly List list; - static object _syncObject = new object(); - - static SavedDataManager() - { - list = new List(); - ProjectService.SolutionClosed += delegate { list.Clear(); }; - } - - /// - /// Gets all saved data. - /// - /// - public static List GetSavedData() - { - return list; - } - - /// - /// Adds a new data. - /// - /// - public static void Add(IProjectSavedData data) - { - if (data == null) - throw new ArgumentNullException("data"); - - if (!list.Contains(data)) { - lock (_syncObject) { - if (!list.Contains(data)) - list.Add(data); - } - } - } - - /// - /// Removes data. - /// - /// - public static void Remove(IProjectSavedData data) - { - if (data == null) - throw new ArgumentNullException("data"); - - if (list.Contains(data)) { - lock (_syncObject) { - if (list.Contains(data)) - list.Remove(data); - } - } - } - - /// - /// Removes all data that satisfies a predicate. - /// - /// - public static void RemoveAll(Predicate match) - { - if (match == null) - throw new ArgumentNullException("match"); - - lock (_syncObject) { - list.RemoveAll(match); - } - } - } -} diff --git a/src/Main/Base/Test/StringTagProvider/MockProjectForTagProvider.cs b/src/Main/Base/Test/StringTagProvider/MockProjectForTagProvider.cs index 3da33844bb..4fb372e7cb 100644 --- a/src/Main/Base/Test/StringTagProvider/MockProjectForTagProvider.cs +++ b/src/Main/Base/Test/StringTagProvider/MockProjectForTagProvider.cs @@ -292,5 +292,11 @@ namespace ICSharpCode.SharpDevelop.Tests.StringTagProvider { throw new NotImplementedException(); } + + public Properties ProjectSpecificProperties { + get { + throw new NotImplementedException(); + } + } } }