diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertProject.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertProject.cs index 281c508cc5..0a9aaef572 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertProject.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertProject.cs @@ -47,6 +47,9 @@ namespace Grunwald.BooBinding protected override void ConvertFile(FileProjectItem sourceItem, FileProjectItem targetItem) { + FixExtensionOfExtraProperties(targetItem, ".cs", ".boo"); + FixExtensionOfExtraProperties(targetItem, ".vb", ".boo"); + string ext = Path.GetExtension(sourceItem.FileName); if (".cs".Equals(ext, StringComparison.OrdinalIgnoreCase) || ".vb".Equals(ext, StringComparison.OrdinalIgnoreCase)) { Module module; diff --git a/src/Libraries/NRefactory/Project/Src/Parser/Visitors/CSharpConstructsVisitor.cs b/src/Libraries/NRefactory/Project/Src/Parser/Visitors/CSharpConstructsVisitor.cs index a94a4c5ae8..9aed4e962c 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/Visitors/CSharpConstructsVisitor.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/Visitors/CSharpConstructsVisitor.cs @@ -95,7 +95,7 @@ namespace ICSharpCode.NRefactory.Parser StatementExpression se = ifStatement.TrueStatement[0] as StatementExpression; if (se == null) { BlockStatement block = ifStatement.TrueStatement[0] as BlockStatement; - if (block.Children.Count == 1) { + if (block != null && block.Children.Count == 1) { se = block.Children[0] as StatementExpression; } } diff --git a/src/Libraries/NRefactory/Test/Output/VBNet/CSharpToVBConverterTest.cs b/src/Libraries/NRefactory/Test/Output/VBNet/CSharpToVBConverterTest.cs index 9fdad66b5a..3098c2df7e 100644 --- a/src/Libraries/NRefactory/Test/Output/VBNet/CSharpToVBConverterTest.cs +++ b/src/Libraries/NRefactory/Test/Output/VBNet/CSharpToVBConverterTest.cs @@ -145,6 +145,13 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter "If FullImage IsNot Nothing Then\n" + "\te.DrawImage()\n" + "End If"); + // another bug related to the IfStatement code: + TestStatement("if (Tiles != null) foreach (Tile t in Tiles) this.TileTray.Controls.Remove(t);", + "If Tiles IsNot Nothing\n" + + "\tFor Each t As Tile in Tiles\n" + + "\t\tMe.TileTray.Controls.Remove(t)\n" + + "\tNext\n" + + "End If"); } [Test] diff --git a/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs b/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs index 39c486f6e1..dea64f2a14 100644 --- a/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs +++ b/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs @@ -40,6 +40,23 @@ namespace ICSharpCode.SharpDevelop.Project.Converter } + protected virtual void FixExtensionOfExtraProperties(FileProjectItem item, string sourceExtension, string targetExtension) + { + sourceExtension = sourceExtension.ToLowerInvariant(); + + List> replacements = new List>(); + foreach (KeyValuePair pair in item.Properties) { + if ("Include".Equals(pair.Key, StringComparison.OrdinalIgnoreCase)) + continue; + if (pair.Value.ToLowerInvariant().EndsWith(sourceExtension)) { + replacements.Add(pair); + } + } + foreach (KeyValuePair pair in replacements) { + item.Properties[pair.Key] = Path.ChangeExtension(pair.Value, targetExtension); + } + } + protected virtual void CopyItems(IProject sourceProject, IProject targetProject) { foreach (ProjectItem item in sourceProject.Items) { @@ -48,10 +65,12 @@ namespace ICSharpCode.SharpDevelop.Project.Converter FileProjectItem targetItem = new FileProjectItem(targetProject, fileItem.ItemType); fileItem.CopyExtraPropertiesTo(targetItem); targetItem.Include = fileItem.Include; - if (!Directory.Exists(Path.GetDirectoryName(targetItem.FileName))) { - Directory.CreateDirectory(Path.GetDirectoryName(targetItem.FileName)); + if (File.Exists(fileItem.FileName)) { + if (!Directory.Exists(Path.GetDirectoryName(targetItem.FileName))) { + Directory.CreateDirectory(Path.GetDirectoryName(targetItem.FileName)); + } + ConvertFile(fileItem, targetItem); } - ConvertFile(fileItem, targetItem); targetProject.Items.Add(targetItem); } else { // Adding the same item to two projects is only allowed because we will save and reload @@ -109,6 +128,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter string sourceExtension, string targetExtension, SupportedLanguage sourceLanguage, IOutputASTVisitor outputVisitor) { + FixExtensionOfExtraProperties(targetItem, sourceExtension, targetExtension); if (sourceExtension.Equals(Path.GetExtension(sourceItem.FileName), StringComparison.OrdinalIgnoreCase)) { string code = ParserService.GetParseableFileContent(sourceItem.FileName); IParser p = ParserFactory.CreateParser(sourceLanguage, new StringReader(code)); diff --git a/src/Main/Base/Project/Src/Project/PropertyGroup.cs b/src/Main/Base/Project/Src/Project/PropertyGroup.cs index 374ca633c1..4d3aa2a0c5 100644 --- a/src/Main/Base/Project/Src/Project/PropertyGroup.cs +++ b/src/Main/Base/Project/Src/Project/PropertyGroup.cs @@ -16,7 +16,7 @@ namespace ICSharpCode.SharpDevelop.Project /// /// Description of PropertyGroup. /// - public class PropertyGroup + public class PropertyGroup : IEnumerable> { // TODO: Isn't MSBuild case-insensitive ??? Dictionary isGuardedProperty = new Dictionary(); @@ -40,6 +40,16 @@ namespace ICSharpCode.SharpDevelop.Project } } + public IEnumerator> GetEnumerator() + { + return properties.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return properties.GetEnumerator(); + } + public T Get(string property, T defaultValue) { if (!properties.ContainsKey(property)) {