From d0345f78018a59365e882a45de4391598cdb6210 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 25 Apr 2009 11:53:39 +0000 Subject: [PATCH] Adjust ProjectTypeGuids when converting project between C# and VB. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4011 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Project/VBNetToCSharpConverter.cs | 9 ++++-- .../Src/Project/CSharpToVBNetConverter.cs | 2 ++ .../Project/ICSharpCode.SharpDevelop.csproj | 1 + .../Project/Converter/LanguageConverter.cs | 4 +-- .../Src/Project/Solution/ProjectTypeGuids.cs | 27 +++++++++++++++++ .../Base/Project/Src/Util/ExtensionMethods.cs | 29 +++++++++++++++++++ 6 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 src/Main/Base/Project/Src/Project/Solution/ProjectTypeGuids.cs diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs index eb940ce344..a687416382 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs @@ -54,13 +54,18 @@ namespace CSharpBinding base.CopyProperties(sourceProject, targetProject); CSharpProject project = (CSharpProject)targetProject; + // 1591 = missing XML comment - the VB compiler does not have this warning // we disable it by default because many VB projects have XML documentation turned on // even though only few members are commented - project.SetProperty("NoWarn", "1591"); + // (we replace existing NoWarn entries because VB and C# error codes don't match) + project.SetProperty("NoWarn", "1591"); FixProperty(project, "DefineConstants", - delegate(string v) { return v.Replace(',', ';'); }); + v => v.Replace(',', ';')); + + FixProperty(project, "ProjectTypeGuids", + v => v.Replace(ProjectTypeGuids.VBNet, ProjectTypeGuids.CSharp, StringComparison.OrdinalIgnoreCase)); } protected override void ConvertAst(CompilationUnit compilationUnit, List specials, FileProjectItem sourceItem) diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/CSharpToVBNetConverter.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/CSharpToVBNetConverter.cs index 388cff457e..bf3c6a88e2 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/CSharpToVBNetConverter.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/CSharpToVBNetConverter.cs @@ -61,6 +61,8 @@ namespace VBNetBinding VBNetProject vbProject = (VBNetProject)targetProject; base.CopyProperties(sourceProject, targetProject); FixProperty(vbProject, "DefineConstants", v => v.Replace(';', ',')); + FixProperty(vbProject, "ProjectTypeGuids", + v => v.Replace(ProjectTypeGuids.CSharp, ProjectTypeGuids.VBNet, StringComparison.OrdinalIgnoreCase)); // determine the StartupObject startupObject = vbProject.GetEvaluatedProperty("StartupObject"); diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 159bc2e922..ac78659522 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -130,6 +130,7 @@ + diff --git a/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs b/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs index 99c6d8acd5..76303798d4 100644 --- a/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs +++ b/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs @@ -106,14 +106,12 @@ namespace ICSharpCode.SharpDevelop.Project.Converter protected virtual void FixExtensionOfExtraProperties(FileProjectItem item, string sourceExtension, string targetExtension) { - sourceExtension = sourceExtension.ToLowerInvariant(); - List> replacements = new List>(); foreach (string metadataName in item.MetadataNames) { if ("Include".Equals(metadataName, StringComparison.OrdinalIgnoreCase)) continue; string value = item.GetMetadata(metadataName); - if (value.ToLowerInvariant().EndsWith(sourceExtension)) { + if (value.EndsWith(sourceExtension, StringComparison.OrdinalIgnoreCase)) { replacements.Add(new KeyValuePair(metadataName, value)); } } diff --git a/src/Main/Base/Project/Src/Project/Solution/ProjectTypeGuids.cs b/src/Main/Base/Project/Src/Project/Solution/ProjectTypeGuids.cs new file mode 100644 index 0000000000..11e5049669 --- /dev/null +++ b/src/Main/Base/Project/Src/Project/Solution/ProjectTypeGuids.cs @@ -0,0 +1,27 @@ +// +// +// +// +// $Revision$ +// + +using System; + +namespace ICSharpCode.SharpDevelop.Project +{ + /// + /// Contains constants for the project type GUIDs. + /// + /// Source: http://www.mztools.com/Articles/2008/MZ2008017.aspx + /// + public static class ProjectTypeGuids + { + public const string CSharp = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"; + public const string VBNet = "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}"; + public const string CPlusPlus = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"; + + public const string WebApplication = "{349C5851-65DF-11DA-9384-00065B846F21}"; + public const string WebSite = "{E24C65DC-7377-472B-9ABA-BC803B73C61A}"; + public const string Silverlight = "{A1591282-1198-4647-A2B1-27E5FF5F6F3B}"; + } +} diff --git a/src/Main/Base/Project/Src/Util/ExtensionMethods.cs b/src/Main/Base/Project/Src/Util/ExtensionMethods.cs index d8eb0c3496..138e4d25ba 100644 --- a/src/Main/Base/Project/Src/Util/ExtensionMethods.cs +++ b/src/Main/Base/Project/Src/Util/ExtensionMethods.cs @@ -10,6 +10,7 @@ using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using System.Text; using System.Windows.Forms; namespace ICSharpCode.SharpDevelop @@ -65,5 +66,33 @@ namespace ICSharpCode.SharpDevelop } } } + + public static string Replace(this string original, string pattern, string replacement, StringComparison comparisonType) + { + if (original == null) + throw new ArgumentNullException("original"); + if (pattern == null) + throw new ArgumentNullException("pattern"); + if (pattern.Length == 0) + throw new ArgumentException("String cannot be of zero length.", "pattern"); + if (comparisonType != StringComparison.Ordinal && comparisonType != StringComparison.OrdinalIgnoreCase) + throw new NotSupportedException("Currently only ordinal comparisons are implemented."); + + StringBuilder result = new StringBuilder(original.Length); + int currentPos = 0; + int nextMatch = original.IndexOf(pattern, comparisonType); + while (nextMatch >= 0) { + result.Append(original, currentPos, nextMatch - currentPos); + // The following line restricts this method to ordinal comparisons: + // for non-ordinal comparisons, the match length might be different than the pattern length. + currentPos = nextMatch + pattern.Length; + result.Append(replacement); + + nextMatch = original.IndexOf(pattern, currentPos, comparisonType); + } + + result.Append(original, currentPos, original.Length - currentPos); + return result.ToString(); + } } }