From 1acdd6d9e0bf1fda0e19ac6ef182cb0bb8c3321f Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 18 Jan 2006 18:00:01 +0000 Subject: [PATCH] Project converter now converts project settings. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1006 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Project/VBToCSharpConverter.cs | 7 ++++ .../Src/Project/CSharpToVBConverter.cs | 7 ++++ .../Project/Src/Project/AbstractProject.cs | 12 +++++++ .../Project/Converter/LanguageConverter.cs | 34 ++++++++++++++++++- .../Base/Project/Src/Project/PropertyGroup.cs | 20 +++++++---- 5 files changed, 73 insertions(+), 7 deletions(-) diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBToCSharpConverter.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBToCSharpConverter.cs index 0301825280..66340616b7 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBToCSharpConverter.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBToCSharpConverter.cs @@ -31,6 +31,13 @@ namespace CSharpBinding ConvertFile(sourceItem, targetItem, ".vb", ".cs", SupportedLanguage.VBNet, new CSharpOutputVisitor()); } + protected override void CopyProperties(IProject sourceProject, IProject targetProject) + { + base.CopyProperties(sourceProject, targetProject); + FixProperty((CSharpProject)targetProject, "DefineConstants", + delegate(string v) { return v.Replace(',', ';'); }); + } + protected override void ConvertAst(CompilationUnit compilationUnit, List specials) { PreProcessingDirective.VBToCSharp(specials); diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/CSharpToVBConverter.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/CSharpToVBConverter.cs index 88cecd3332..191f01e5ac 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/CSharpToVBConverter.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/CSharpToVBConverter.cs @@ -37,6 +37,13 @@ namespace VBNetBinding new CSharpToVBNetConvertVisitor().Visit(compilationUnit, null); } + protected override void CopyProperties(IProject sourceProject, IProject targetProject) + { + base.CopyProperties(sourceProject, targetProject); + FixProperty((VBNetProject)targetProject, "DefineConstants", + delegate(string v) { return v.Replace(';', ','); }); + } + protected override IProject CreateProject(string targetProjectDirectory, IProject sourceProject) { ProjectCreateInformation info = new ProjectCreateInformation(); diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index 0a23be0616..a40ddbe617 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -33,6 +33,18 @@ namespace ICSharpCode.SharpDevelop.Project protected string fileName; protected string language; + public Dictionary Configurations { + get { + return configurations; + } + } + + public Dictionary UserConfigurations { + get { + return userConfigurations; + } + } + public static string GetConfigurationNameFromKey(string key) { return key.Substring(0, key.IndexOf('|')); diff --git a/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs b/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs index 7e7988595e..1951183b76 100644 --- a/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs +++ b/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs @@ -37,7 +37,39 @@ namespace ICSharpCode.SharpDevelop.Project.Converter protected virtual void CopyProperties(IProject sourceProject, IProject targetProject) { - + AbstractProject sp = sourceProject as AbstractProject; + AbstractProject tp = targetProject as AbstractProject; + if (sp != null && tp != null) { + tp.Configurations.Clear(); + tp.UserConfigurations.Clear(); + foreach (KeyValuePair pair in sp.Configurations) { + tp.Configurations.Add(pair.Key, pair.Value.Clone()); + } + foreach (KeyValuePair pair in sp.UserConfigurations) { + tp.UserConfigurations.Add(pair.Key, pair.Value.Clone()); + } + tp.BaseConfiguration.Merge(sp.BaseConfiguration); + tp.UserBaseConfiguration.Merge(sp.UserBaseConfiguration); + } + } + + /// + /// Changes a property in the by applying a method to its value. + /// + protected void FixProperty(AbstractProject project, string propertyName, Converter method) + { + if (project.BaseConfiguration.IsSet(propertyName)) + project.BaseConfiguration[propertyName] = method(project.BaseConfiguration[propertyName]); + if (project.UserBaseConfiguration.IsSet(propertyName)) + project.UserBaseConfiguration[propertyName] = method(project.UserBaseConfiguration[propertyName]); + foreach (PropertyGroup pg in project.Configurations.Values) { + if (pg.IsSet(propertyName)) + pg[propertyName] = method(pg[propertyName]); + } + foreach (PropertyGroup pg in project.UserConfigurations.Values) { + if (pg.IsSet(propertyName)) + pg[propertyName] = method(pg[propertyName]); + } } protected virtual void FixExtensionOfExtraProperties(FileProjectItem item, string sourceExtension, string targetExtension) diff --git a/src/Main/Base/Project/Src/Project/PropertyGroup.cs b/src/Main/Base/Project/Src/Project/PropertyGroup.cs index 4d3aa2a0c5..b4ea222af3 100644 --- a/src/Main/Base/Project/Src/Project/PropertyGroup.cs +++ b/src/Main/Base/Project/Src/Project/PropertyGroup.cs @@ -14,9 +14,9 @@ using System.Xml; namespace ICSharpCode.SharpDevelop.Project { /// - /// Description of PropertyGroup. + /// Contains a set of MSBuild properties. /// - public class PropertyGroup : IEnumerable> + public sealed class PropertyGroup : IEnumerable>, ICloneable { // TODO: Isn't MSBuild case-insensitive ??? Dictionary isGuardedProperty = new Dictionary(); @@ -50,6 +50,18 @@ namespace ICSharpCode.SharpDevelop.Project return properties.GetEnumerator(); } + public PropertyGroup Clone() + { + PropertyGroup pg = new PropertyGroup(); + pg.Merge(this); + return pg; + } + + object ICloneable.Clone() + { + return this.Clone(); + } + public T Get(string property, T defaultValue) { if (!properties.ContainsKey(property)) { @@ -99,10 +111,6 @@ namespace ICSharpCode.SharpDevelop.Project properties[property] = value.ToString(); } - public PropertyGroup() - { - } - public void Merge(PropertyGroup group) { foreach (KeyValuePair entry in group.properties) {