diff options
author | Lluis Sanchez <lluis@xamarin.com> | 2014-01-20 19:32:53 +0400 |
---|---|---|
committer | Lluis Sanchez Gual <lluis@xamarin.com> | 2014-10-21 18:39:14 +0400 |
commit | f73b2a9990495587d514aa1856919c21170a3940 (patch) | |
tree | 9842411ee8644ead5915a715ee7e53984a601df4 /main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionEntityItem.cs | |
parent | a2046b6331a271e8203df7d3d0f14500d33d60fa (diff) |
Initial drop of the new project model
Diffstat (limited to 'main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionEntityItem.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionEntityItem.cs | 584 |
1 files changed, 0 insertions, 584 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionEntityItem.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionEntityItem.cs deleted file mode 100644 index 0698a3fcf3..0000000000 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionEntityItem.cs +++ /dev/null @@ -1,584 +0,0 @@ -// SolutionEntityItem.cs -// -// Author: -// Lluis Sanchez Gual <lluis@novell.com> -// -// Copyright (c) 2008 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -// - -using System; -using System.Linq; -using System.Xml; -using System.IO; -using System.Collections; -using System.Collections.ObjectModel; -using System.Collections.Specialized; -using System.Collections.Generic; -using System.Reflection; -using System.Diagnostics; -using System.CodeDom.Compiler; - -using MonoDevelop.Core; -using MonoDevelop.Projects; -using MonoDevelop.Core.Serialization; -using MonoDevelop.Projects.Extensions; -using MonoDevelop.Core.StringParsing; - -namespace MonoDevelop.Projects -{ - [ProjectModelDataItem (FallbackType = typeof(UnknownSolutionItem))] - public abstract class SolutionEntityItem : SolutionItem, IConfigurationTarget, IWorkspaceFileObject - { - internal object MemoryProbe = Counters.ItemsInMemory.CreateMemoryProbe (); - - ProjectItemCollection items; - ProjectItemCollection wildcardItems; - ItemCollection<SolutionEntityItem> dependencies = new ItemCollection<SolutionEntityItem> (); - - SolutionItemEventArgs thisItemArgs; - - FileStatusTracker<SolutionItemEventArgs> fileStatusTracker; - - FilePath fileName; - string name; - - FileFormat fileFormat; - - SolutionItemConfiguration activeConfiguration; - SolutionItemConfigurationCollection configurations; - - public event EventHandler ConfigurationsChanged; - public event ConfigurationEventHandler DefaultConfigurationChanged; - public event ConfigurationEventHandler ConfigurationAdded; - public event ConfigurationEventHandler ConfigurationRemoved; - public event EventHandler<ProjectItemEventArgs> ProjectItemAdded; - public event EventHandler<ProjectItemEventArgs> ProjectItemRemoved; - - public SolutionEntityItem () - { - items = new ProjectItemCollection (this); - wildcardItems = new ProjectItemCollection (this); - thisItemArgs = new SolutionItemEventArgs (this); - configurations = new SolutionItemConfigurationCollection (this); - configurations.ConfigurationAdded += new ConfigurationEventHandler (OnConfigurationAddedToCollection); - configurations.ConfigurationRemoved += new ConfigurationEventHandler (OnConfigurationRemovedFromCollection); - Counters.ItemsLoaded++; - fileStatusTracker = new FileStatusTracker<SolutionItemEventArgs> (this, OnReloadRequired, new SolutionItemEventArgs (this)); - } - - public override void Dispose () - { - if (Disposed) - return; - - Counters.ItemsLoaded--; - - foreach (var item in items.Concat (wildcardItems)) { - IDisposable disp = item as IDisposable; - if (disp != null) - disp.Dispose (); - } - - // items = null; - // wildcardItems = null; - // thisItemArgs = null; - // fileStatusTracker = null; - // fileFormat = null; - // activeConfiguration = null; - // configurations = null; - - base.Dispose (); - } - - - internal override void SetItemHandler (ISolutionItemHandler handler) - { - string oldName = Name; - string oldFile = FileName; - - base.SetItemHandler (handler); - - // This will update the name if needed, when SyncFileName is true - Name = oldName; - if (!string.IsNullOrEmpty (oldFile)) - FileName = oldFile; - } - - [ItemProperty ("ReleaseVersion", DefaultValue="0.1")] - string releaseVersion = "0.1"; - - [ItemProperty ("SynchReleaseVersion", DefaultValue = true)] - bool syncReleaseVersion = true; - - public string Version { - get { - // If syncReleaseVersion is set, releaseVersion will already contain the solution's version - // That's because the version must be up to date even when loading the project individually - return releaseVersion; - } - set { - releaseVersion = value; - NotifyModified ("Version"); - } - } - - public bool SyncVersionWithSolution { - get { - return syncReleaseVersion; - } - set { - syncReleaseVersion = value; - if (syncReleaseVersion && ParentSolution != null) - Version = ParentSolution.Version; - NotifyModified ("SyncVersionWithSolution"); - } - } - - [ItemProperty ("name")] - public override string Name { - get { - return name ?? string.Empty; - } - set { - if (name == value) - return; - string oldName = name; - name = value; - if (!Loading && ItemHandler.SyncFileName) { - if (string.IsNullOrEmpty (fileName)) - FileName = value; - else { - string ext = fileName.Extension; - FileName = fileName.ParentDirectory.Combine (value) + ext; - } - } - OnNameChanged (new SolutionItemRenamedEventArgs (this, oldName, name)); - } - } - - public virtual FilePath FileName { - get { - return fileName; - } - set { - fileName = value; - if (FileFormat != null) - fileName = FileFormat.GetValidFileName (this, fileName); - if (ItemHandler.SyncFileName) - Name = fileName.FileNameWithoutExtension; - NotifyModified ("FileName"); - } - } - - public bool Enabled { - get { return ParentSolution != null ? ParentSolution.IsSolutionItemEnabled (FileName) : true; } - set { - if (ParentSolution != null) - ParentSolution.SetSolutionItemEnabled (FileName, value); - } - } - - public FileFormat FileFormat { - get { - if (ParentSolution != null) { - if (ParentSolution.FileFormat.Format.SupportsMixedFormats && fileFormat != null) - return fileFormat; - return ParentSolution.FileFormat; - } - if (fileFormat == null) - fileFormat = Services.ProjectService.GetDefaultFormat (this); - return fileFormat; - } - set { - if (ParentSolution != null && !ParentSolution.FileFormat.Format.SupportsMixedFormats) - throw new InvalidOperationException ("The file format can't be changed when the item belongs to a solution."); - InstallFormat (value); - fileFormat.Format.ConvertToFormat (this); - NeedsReload = false; - NotifyModified ("FileFormat"); - } - } - - public ProjectItemCollection Items { - get { return items; } - } - - internal ProjectItemCollection WildcardItems { - get { return wildcardItems; } - } - - /// <summary> - /// Projects that need to be built before building this one - /// </summary> - /// <value>The dependencies.</value> - public ItemCollection<SolutionEntityItem> ItemDependencies { - get { return dependencies; } - } - - public override IEnumerable<SolutionItem> GetReferencedItems (ConfigurationSelector configuration) - { - return base.GetReferencedItems (configuration).Concat (dependencies); - } - - void IWorkspaceFileObject.ConvertToFormat (FileFormat format, bool convertChildren) - { - this.FileFormat = format; - } - - public virtual bool SupportsFormat (FileFormat format) - { - return true; - } - - internal void InstallFormat (FileFormat format) - { - fileFormat = format; - if (fileName != FilePath.Null) - fileName = fileFormat.GetValidFileName (this, fileName); - } - - protected override void InitializeItemHandler () - { - Services.ProjectService.GetDefaultFormat (this).Format.ConvertToFormat (this); - } - - protected override FilePath GetDefaultBaseDirectory ( ) - { - return FileName.IsNullOrEmpty ? FilePath.Empty : FileName.ParentDirectory; - } - - public void Save (FilePath fileName, IProgressMonitor monitor) - { - FileName = fileName; - Save (monitor); - } - - public override void Save (IProgressMonitor monitor) - { - if (string.IsNullOrEmpty (FileName)) - throw new InvalidOperationException ("Project does not have a file name"); - - try { - fileStatusTracker.BeginSave (); - Services.ProjectService.GetExtensionChain (this).Save (monitor, this); - OnSaved (thisItemArgs); - } finally { - fileStatusTracker.EndSave (); - } - FileService.NotifyFileChanged (FileName); - } - - protected override void OnEndLoad () - { - base.OnEndLoad (); - fileStatusTracker.ResetLoadTimes (); - - if (syncReleaseVersion && ParentSolution != null) - releaseVersion = ParentSolution.Version; - } - - - internal bool IsSaved { - get { - return !string.IsNullOrEmpty (FileName) && File.Exists (FileName); - } - } - - public override bool NeedsReload { - get { return fileStatusTracker.NeedsReload; } - set { fileStatusTracker.NeedsReload = value; } - } - - public virtual bool ItemFilesChanged { - get { return fileStatusTracker.ItemFilesChanged; } - } - - internal protected override BuildResult OnRunTarget (IProgressMonitor monitor, string target, ConfigurationSelector configuration) - { - if (target == ProjectService.BuildTarget) { - SolutionItemConfiguration conf = GetConfiguration (configuration) as SolutionItemConfiguration; - if (conf != null && conf.CustomCommands.HasCommands (CustomCommandType.Build)) { - conf.CustomCommands.ExecuteCommand (monitor, this, CustomCommandType.Build, configuration); - return new BuildResult (); - } - } else if (target == ProjectService.CleanTarget) { - SolutionItemConfiguration config = GetConfiguration (configuration) as SolutionItemConfiguration; - if (config != null && config.CustomCommands.HasCommands (CustomCommandType.Clean)) { - config.CustomCommands.ExecuteCommand (monitor, this, CustomCommandType.Clean, configuration); - return new BuildResult (); - } - } - return base.OnRunTarget (monitor, target, configuration); - } - - protected internal virtual void OnSave (IProgressMonitor monitor) - { - ItemHandler.Save (monitor); - } - - [Obsolete ("This method will be removed in future releases")] - public void SetNeedsBuilding (bool value) - { - // Nothing to be done - } - - public FilePath GetAbsoluteChildPath (FilePath relPath) - { - return relPath.ToAbsolute (BaseDirectory); - } - - public FilePath GetRelativeChildPath (FilePath absPath) - { - return absPath.ToRelative (BaseDirectory); - } - - public List<FilePath> GetItemFiles (bool includeReferencedFiles) - { - return Services.ProjectService.GetExtensionChain (this).GetItemFiles (this, includeReferencedFiles); - } - - internal protected virtual List<FilePath> OnGetItemFiles (bool includeReferencedFiles) - { - List<FilePath> col = FileFormat.Format.GetItemFiles (this); - if (!string.IsNullOrEmpty (FileName) && !col.Contains (FileName)) - col.Add (FileName); - return col; - } - - protected override void OnNameChanged (SolutionItemRenamedEventArgs e) - { - Solution solution = this.ParentSolution; - - if (solution != null) { - foreach (DotNetProject project in solution.GetAllSolutionItems<DotNetProject>()) { - if (project == this) - continue; - - project.RenameReferences (e.OldName, e.NewName); - } - } - fileStatusTracker.ResetLoadTimes (); - base.OnNameChanged (e); - } - - protected virtual void OnSaved (SolutionItemEventArgs args) - { - if (Saved != null) - Saved (this, args); - } - - public virtual string[] SupportedPlatforms { - get { - return new string [0]; - } - } - - public virtual SolutionItemConfiguration GetConfiguration (ConfigurationSelector configuration) - { - return (SolutionItemConfiguration) configuration.GetConfiguration (this) ?? DefaultConfiguration; - } - - ItemConfiguration IConfigurationTarget.DefaultConfiguration { - get { return DefaultConfiguration; } - set { DefaultConfiguration = (SolutionItemConfiguration) value; } - } - - public SolutionItemConfiguration DefaultConfiguration { - get { - if (activeConfiguration == null && configurations.Count > 0) { - return configurations[0]; - } - return activeConfiguration; - } - set { - if (activeConfiguration != value) { - activeConfiguration = value; - NotifyModified ("DefaultConfiguration"); - OnDefaultConfigurationChanged (new ConfigurationEventArgs (this, value)); - } - } - } - - public string DefaultConfigurationId { - get { - if (DefaultConfiguration != null) - return DefaultConfiguration.Id; - else - return null; - } - set { - DefaultConfiguration = GetConfiguration (new ItemConfigurationSelector (value)); - } - } - - public virtual ReadOnlyCollection<string> GetConfigurations () - { - List<string> configs = new List<string> (); - foreach (SolutionItemConfiguration conf in Configurations) - configs.Add (conf.Id); - return configs.AsReadOnly (); - } - - [ItemProperty ("Configurations")] - [ItemProperty ("Configuration", ValueType=typeof(SolutionItemConfiguration), Scope="*")] - public SolutionItemConfigurationCollection Configurations { - get { - return configurations; - } - } - - IItemConfigurationCollection IConfigurationTarget.Configurations { - get { - return Configurations; - } - } - - public SolutionItemConfiguration AddNewConfiguration (string name) - { - SolutionItemConfiguration config = CreateConfiguration (name); - Configurations.Add (config); - return config; - } - - ItemConfiguration IConfigurationTarget.CreateConfiguration (string name) - { - return CreateConfiguration (name); - } - - public virtual SolutionItemConfiguration CreateConfiguration (string name) - { - return new SolutionItemConfiguration (name); - } - - void OnConfigurationAddedToCollection (object ob, ConfigurationEventArgs args) - { - NotifyModified ("Configurations"); - OnConfigurationAdded (new ConfigurationEventArgs (this, args.Configuration)); - if (ConfigurationsChanged != null) - ConfigurationsChanged (this, EventArgs.Empty); - if (activeConfiguration == null) - DefaultConfigurationId = args.Configuration.Id; - } - - void OnConfigurationRemovedFromCollection (object ob, ConfigurationEventArgs args) - { - if (activeConfiguration == args.Configuration) { - if (Configurations.Count > 0) - DefaultConfiguration = Configurations [0]; - else - DefaultConfiguration = null; - } - NotifyModified ("Configurations"); - OnConfigurationRemoved (new ConfigurationEventArgs (this, args.Configuration)); - if (ConfigurationsChanged != null) - ConfigurationsChanged (this, EventArgs.Empty); - } - - public override StringTagModelDescription GetStringTagModelDescription (ConfigurationSelector conf) - { - StringTagModelDescription model = base.GetStringTagModelDescription (conf); - SolutionItemConfiguration config = GetConfiguration (conf); - if (config != null) - model.Add (config.GetType ()); - else - model.Add (typeof(SolutionItemConfiguration)); - return model; - } - - public override StringTagModel GetStringTagModel (ConfigurationSelector conf) - { - StringTagModel source = base.GetStringTagModel (conf); - SolutionItemConfiguration config = GetConfiguration (conf); - if (config != null) - source.Add (config); - return source; - } - - internal protected virtual void OnItemsAdded (IEnumerable<ProjectItem> objs) - { - NotifyModified ("Items"); - var args = new ProjectItemEventArgs (); - args.AddRange (objs.Select (pi => new ProjectItemEventInfo (this, pi))); - if (ProjectItemAdded != null) - ProjectItemAdded (this, args); - } - - internal protected virtual void OnItemsRemoved (IEnumerable<ProjectItem> objs) - { - NotifyModified ("Items"); - var args = new ProjectItemEventArgs (); - args.AddRange (objs.Select (pi => new ProjectItemEventInfo (this, pi))); - if (ProjectItemRemoved != null) - ProjectItemRemoved (this, args); - } - - protected virtual void OnDefaultConfigurationChanged (ConfigurationEventArgs args) - { - if (DefaultConfigurationChanged != null) - DefaultConfigurationChanged (this, args); - } - - protected virtual void OnConfigurationAdded (ConfigurationEventArgs args) - { - if (ConfigurationAdded != null) - ConfigurationAdded (this, args); - } - - protected virtual void OnConfigurationRemoved (ConfigurationEventArgs args) - { - if (ConfigurationRemoved != null) - ConfigurationRemoved (this, args); - } - - protected virtual void OnReloadRequired (SolutionItemEventArgs args) - { - fileStatusTracker.FireReloadRequired (args); - } - - public event SolutionItemEventHandler Saved; - -/* public event EventHandler<SolutionItemEventArgs> ReloadRequired { - add { fileStatusTracker.ReloadRequired += value; } - remove { fileStatusTracker.ReloadRequired -= value; } - } -*/ } - - [Mono.Addins.Extension] - class SolutionEntityItemTagProvider: StringTagProvider<SolutionEntityItem>, IStringTagProvider - { - public override IEnumerable<StringTagDescription> GetTags () - { - yield return new StringTagDescription ("ProjectFile", "Project File"); - } - - public override object GetTagValue (SolutionEntityItem item, string tag) - { - switch (tag) { - case "ITEMFILE": - case "PROJECTFILE": - case "PROJECTFILENAME": - return item.FileName; - } - throw new NotSupportedException (); - } - } -} |