diff --git a/SharpDevelop.Tests.sln b/SharpDevelop.Tests.sln index 410acb93af..3364e96f0c 100644 --- a/SharpDevelop.Tests.sln +++ b/SharpDevelop.Tests.sln @@ -313,6 +313,10 @@ Global {B2BBC7BC-837C-40ED-A6DB-D5AE8626212F}.Debug|Any CPU.Build.0 = net_4_5_Debug|Any CPU {B2BBC7BC-837C-40ED-A6DB-D5AE8626212F}.Release|Any CPU.ActiveCfg = net_4_5_Release|Any CPU {B2BBC7BC-837C-40ED-A6DB-D5AE8626212F}.Release|Any CPU.Build.0 = net_4_5_Release|Any CPU + {2A705FC6-1A9E-4941-9E47-254D79F2D9D5}.Debug|Any CPU.ActiveCfg = net_4_5_Debug|Any CPU + {2A705FC6-1A9E-4941-9E47-254D79F2D9D5}.Debug|Any CPU.Build.0 = net_4_5_Debug|Any CPU + {2A705FC6-1A9E-4941-9E47-254D79F2D9D5}.Release|Any CPU.ActiveCfg = net_4_5_Release|Any CPU + {2A705FC6-1A9E-4941-9E47-254D79F2D9D5}.Release|Any CPU.Build.0 = net_4_5_Release|Any CPU {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Debug|Any CPU.Build.0 = Debug|Any CPU {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -641,10 +645,6 @@ Global {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|Any CPU.Build.0 = Debug|Any CPU {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.ActiveCfg = Release|Any CPU {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.Build.0 = Release|Any CPU - {2A705FC6-1A9E-4941-9E47-254D79F2D9D5}.Debug|Any CPU.ActiveCfg = net_4_5_Debug|Any CPU - {2A705FC6-1A9E-4941-9E47-254D79F2D9D5}.Debug|Any CPU.Build.0 = net_4_5_Debug|Any CPU - {2A705FC6-1A9E-4941-9E47-254D79F2D9D5}.Release|Any CPU.ActiveCfg = net_4_5_Release|Any CPU - {2A705FC6-1A9E-4941-9E47-254D79F2D9D5}.Release|Any CPU.Build.0 = net_4_5_Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/AddIns/Analysis/UnitTesting/Test/Service/TestFrameworkDescriptorTests.cs b/src/AddIns/Analysis/UnitTesting/Test/Service/TestFrameworkDescriptorTests.cs index 5653ac4c43..367ba4dfca 100644 --- a/src/AddIns/Analysis/UnitTesting/Test/Service/TestFrameworkDescriptorTests.cs +++ b/src/AddIns/Analysis/UnitTesting/Test/Service/TestFrameworkDescriptorTests.cs @@ -68,7 +68,7 @@ namespace UnitTesting.Tests.Service } [Test] - public void IsSupportedProject_CSharpAndVisualBasicProjectsSupportedByDescriptor_ReturnsTrueForVBNetProject() + public void IsSupportedProject_CSharpAndVisualBasicProjectsSupportedByDescriptor_ReturnsTrueForVBProject() { CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".csproj;.vbproj"); MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework(); @@ -110,7 +110,7 @@ namespace UnitTesting.Tests.Service } [Test] - public void IsSupportedProject_SupportedProjectFileExtensionsInDescriptorContainWhitespace_ReturnsTrueForVBNetProject() + public void IsSupportedProject_SupportedProjectFileExtensionsInDescriptorContainWhitespace_ReturnsTrueForVBProject() { CreateTestFrameworkDescriptorToSupportProjectFileExtensions(" .csproj; .vbproj "); MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework(); @@ -132,7 +132,7 @@ namespace UnitTesting.Tests.Service } [Test] - public void IsSupportedProject_SupportedProjectFileExtensionInDescriptorAreInUpperCase_ReturnsTrueForVBNetProject() + public void IsSupportedProject_SupportedProjectFileExtensionInDescriptorAreInUpperCase_ReturnsTrueForVBProject() { CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".CSPROJ;.VBPROJ"); MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework(); @@ -143,7 +143,7 @@ namespace UnitTesting.Tests.Service } [Test] - public void IsSupportedProject_DescriptorSupportsCSharpProjects_ReturnsFalseForVBNetProject() + public void IsSupportedProject_DescriptorSupportsCSharpProjects_ReturnsFalseForVBProject() { CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".csproj"); MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework(); diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin index fedc8a1f1c..8f012b7a71 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin @@ -58,7 +58,7 @@ diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Resources/VisualBasicRazor.xshd b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Resources/VisualBasicRazor.xshd index 47e906f8e7..a8011938e4 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Resources/VisualBasicRazor.xshd +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Resources/VisualBasicRazor.xshd @@ -1,6 +1,6 @@  diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateLanguageConverter.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateLanguageConverter.cs index cd84fe0d8b..b4b7a5dd21 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateLanguageConverter.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateLanguageConverter.cs @@ -7,7 +7,7 @@ namespace ICSharpCode.AspNet.Mvc { public static class MvcTextTemplateLanguageConverter { - public static readonly string VisualBasicProjectLanguage = "VBNet"; + public static readonly string VisualBasicProjectLanguage = "VB"; /// /// Converts from an IProject.Language string to an MvcTemplateLanguage. Only C# and VB.NET languages diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs index daa8ae9c8b..2ab6fcd7e2 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs @@ -85,7 +85,7 @@ namespace AspNet.Mvc.Tests public void GetTemplateLanguage_ProjectIsVisualBasicProject_ReturnsVisualBasicTemplateLanguage() { CreateProject(); - testableProject.SetLanguage("VBNet"); + testableProject.SetLanguage("VB"); MvcTextTemplateLanguage language = project.GetTemplateLanguage(); diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin index ca0a25ffcd..ee15341d51 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin @@ -26,10 +26,10 @@ - + + class = "CSharpBinding.VBToCSharpConverter"/> diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs index 7fb28edc07..c338f4ff00 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs @@ -15,7 +15,7 @@ using ICSharpCode.SharpDevelop.Project.Converter; namespace CSharpBinding { - public class VBNetToCSharpConverter : NRefactoryLanguageConverter + public class VBToCSharpConverter : NRefactoryLanguageConverter { public override string TargetLanguageName { get { diff --git a/src/AddIns/BackendBindings/VBBinding/Project/VBProjectBinding.vb b/src/AddIns/BackendBindings/VBBinding/Project/VBProjectBinding.vb index 9ff4175674..4fb8d726b3 100644 --- a/src/AddIns/BackendBindings/VBBinding/Project/VBProjectBinding.vb +++ b/src/AddIns/BackendBindings/VBBinding/Project/VBProjectBinding.vb @@ -8,12 +8,6 @@ Public Class VBProjectBinding Implements IProjectBinding Public Const LanguageName As String = "VB" - Public ReadOnly Property Language() As String Implements IProjectBinding.Language - Get - Return LanguageName - End Get - End Property - Public Function LoadProject(info As ProjectLoadInformation) As IProject Implements IProjectBinding.LoadProject Return New VBProject(info) End Function diff --git a/src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs b/src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs index c39580e441..7cd4db64f0 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs @@ -20,8 +20,7 @@ namespace Debugger.AddIn { public enum SupportedLanguage { - CSharp, - VBNet + CSharp } public static class Extensions diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs index c4f594d4c9..feec433742 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs @@ -657,7 +657,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options static readonly MultiDictionary mapping = new MultiDictionary(StringComparer.Ordinal) { { "Brace Matching (Rectangle)", BracketHighlightRenderer.BracketHighlight }, { "Collapsible Text", FoldingTextMarkers }, - { "Comment", "VBNET.Comment" }, + { "Comment", "VB.Comment" }, { "Comment", "C#.Comment" }, { "Compiler Error", ErrorPainter.ErrorColorName }, { "CSS Comment", "CSS.Comment" }, @@ -696,14 +696,14 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options { "Keyword", "C#.TypeKeywords" }, { "Keyword", "C#.ValueTypes" }, { "Keyword", "C#.ReferenceTypes" }, - { "Keyword", "VBNET.DateLiteral" }, - { "Keyword", "VBNET.Preprocessor" }, - { "Keyword", "VBNET.DataTypes" }, - { "Keyword", "VBNET.Operators" }, - { "Keyword", "VBNET.Constants" }, - { "Keyword", "VBNET.Keywords" }, - { "Keyword", "VBNET.FunctionKeywords" }, - { "Keyword", "VBNET.ContextKeywords" }, + { "Keyword", "VB.DateLiteral" }, + { "Keyword", "VB.Preprocessor" }, + { "Keyword", "VB.DataTypes" }, + { "Keyword", "VB.Operators" }, + { "Keyword", "VB.Constants" }, + { "Keyword", "VB.Keywords" }, + { "Keyword", "VB.FunctionKeywords" }, + { "Keyword", "VB.ContextKeywords" }, { "Line Numbers", CustomizingHighlighter.LineNumbers }, { "MarkerFormatDefinition/HighlightedReference", "" }, { "Number", "C#.NumberLiteral" }, @@ -725,7 +725,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options { "Script String", "" }, { "Selected Text", "" }, { "Selected Text", CustomizingHighlighter.SelectedText }, - { "String", "VBNET.String" }, + { "String", "VB.String" }, { "String", "C#.String" }, { "String(C# @ Verbatim)", "" }, { "Syntax Error", "" }, @@ -755,8 +755,8 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options { "XML Delimiter", "" }, { "XML Doc Comment", "C#.DocComment" }, { "XML Doc Tag", "C#.KnownDocTags" }, - { "XML Doc Comment", "VBNET.DocComment" }, - { "XML Doc Tag", "VBNET.KnownDocTags" }, + { "XML Doc Comment", "VB.DocComment" }, + { "XML Doc Tag", "VB.KnownDocTags" }, { "XML Name", "XML.XmlTag" }, { "XML Name", "XML.XmlDeclaration" }, { "XML Name", "XML.DocType" }, diff --git a/src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs b/src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs index 9af7b6fc04..ae9e1c736d 100644 --- a/src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs +++ b/src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs @@ -24,7 +24,7 @@ namespace MSHelpSystem.Helper result.Add("C++", "C%2B%2B"); result.Add("C#", "CSharp"); result.Add("F#", "FSharp"); - result.Add("VBNet", "VB"); + result.Add("VB", "VB"); return result; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs index a0390a9787..4ef0d9aa16 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs @@ -18,8 +18,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE string type = ProjectType.GetProjectType(project); if (type == ProjectType.CSharp) { return SD.ProjectTypeGuids.CSharp.ToString(); - } else if (type == ProjectType.VBNet.ToString()) { - return SD.ProjectTypeGuids.VBNet.ToString(); + } else if (type == ProjectType.VB) { + return SD.ProjectTypeGuids.VB.ToString(); } return String.Empty; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs index 73d9c33df5..8d3ffea2dd 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs @@ -8,7 +8,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE { public static class ProjectType { - public static readonly string VBNet = "VB.NET"; + public static readonly string VB = "VB.NET"; public static readonly string CSharp = "C#"; public static string GetProjectType(Project project) @@ -19,7 +19,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE public static string GetProjectType(IProject project) { if (project.Language == "VB") - return VBNet; + return VB; else return project.Language; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs index a93835a210..5ca51902c7 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs @@ -36,8 +36,8 @@ namespace Microsoft.VisualStudio.Shell.Flavor var projectType = ProjectType.GetProjectType(project); if (projectType == ProjectType.CSharp) { return ProjectTypeGuids.CSharp.ToString(); - } else if (projectType == ProjectType.VBNet) { - return ProjectTypeGuids.VBNet.ToString(); + } else if (projectType == ProjectType.VB) { + return ProjectTypeGuids.VB.ToString(); } return String.Empty; } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs index 9ce4e1a081..01fd074f72 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs @@ -134,13 +134,13 @@ namespace PackageManagement.Tests.EnvDTE } [Test] - public void Kind_ProjectIsVBNetProject_ReturnsCSharpProjectTypeGuid() + public void Kind_ProjectIsVBNetProject_ReturnsVBProjectTypeGuid() { CreateProject( @"d:\projects\myproject\test.vbproj"); string kind = project.Kind; - Assert.AreEqual(ProjectTypeGuids.VBNet.ToString(), kind); + Assert.AreEqual(ProjectTypeGuids.VB.ToString(), kind); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/FlavoredProjectTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/FlavoredProjectTests.cs index 804981969c..52f7fd64ab 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/FlavoredProjectTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/FlavoredProjectTests.cs @@ -44,7 +44,7 @@ namespace PackageManagement.Tests.VisualStudio int result = project.GetAggregateProjectTypeGuids(out guids); Assert.AreEqual(VsConstants.S_OK, result); - Assert.AreEqual(ProjectTypeGuids.VBNet.ToString(), guids); + Assert.AreEqual(ProjectTypeGuids.VB.ToString(), guids); } [Test] diff --git a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingFilePreprocessor.cs b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingFilePreprocessor.cs index b94ece1d96..da33aa9b08 100644 --- a/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingFilePreprocessor.cs +++ b/src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingFilePreprocessor.cs @@ -46,7 +46,7 @@ namespace ICSharpCode.TextTemplating string GetFileExtensionForProject() { - if (TemplateFile.Project.Language == "VBNet") { + if (TemplateFile.Project.Language == "VB") { return ".vb"; } return ".cs"; diff --git a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingPreprocessorTests.cs b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingPreprocessorTests.cs index f670834d7c..14506ed7be 100644 --- a/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingPreprocessorTests.cs +++ b/src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingPreprocessorTests.cs @@ -91,7 +91,7 @@ namespace TextTemplating.Tests public void PreprocessTemplate_TemplateFileInVisualBasicProject_OutputFileNameIsTemplateFileNameWithVisualBasicFileExtension() { var templateFile = CreatePreprocessor(@"d:\MyProject\Test.tt"); - templateFile.TestableProject.SetLanguage("VBNet"); + templateFile.TestableProject.SetLanguage("VB"); preprocessor.PreprocessTemplate(); Assert.AreEqual(@"d:\MyProject\Test.vb", templatingHost.OutputFilePassedToPreprocessTemplate); diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/Resources.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/Resources.cs index 3dc7f08c09..7730a3a2cc 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/Resources.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/Resources.cs @@ -36,7 +36,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting hlm.RegisterHighlighting("PowerShell", new[] { ".ps1", ".psm1", ".psd1" }, "PowerShell.xshd"); hlm.RegisterHighlighting("PHP", new[] { ".php" }, "PHP-Mode.xshd"); hlm.RegisterHighlighting("TeX", new[] { ".tex" }, "Tex-Mode.xshd"); - hlm.RegisterHighlighting("VBNET", new[] { ".vb" }, "VBNET-Mode.xshd"); + hlm.RegisterHighlighting("VB", new[] { ".vb" }, "VB-Mode.xshd"); hlm.RegisterHighlighting("XML", (".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;" + ".xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;" + ".booproj;.build;.xfrm;.targets;.xaml;.xpt;" + diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/VBNET-Mode.xshd b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/VB-Mode.xshd similarity index 98% rename from src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/VBNET-Mode.xshd rename to src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/VB-Mode.xshd index b22555a29e..05e38374f1 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/VBNET-Mode.xshd +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/VB-Mode.xshd @@ -5,7 +5,7 @@ - + diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj index 9fcf69a388..bd58cf2a60 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj @@ -389,7 +389,7 @@ - + diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin index 87c470e250..9014451fa4 100755 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin @@ -41,7 +41,7 @@ - + @@ -1922,8 +1922,8 @@ class = "ICSharpCode.SharpDevelop.Commands.CSharpConvertBuffer"/> - @@ -2447,7 +2447,7 @@ - + diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 1697a2ebd0..0caf8c929a 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -197,10 +197,13 @@ + + + @@ -592,10 +595,7 @@ - - - @@ -725,7 +725,6 @@ - diff --git a/src/Main/Base/Project/Src/Services/ProjectBinding/IProjectBinding.cs b/src/Main/Base/Project/Project/IProjectBinding.cs similarity index 57% rename from src/Main/Base/Project/Src/Services/ProjectBinding/IProjectBinding.cs rename to src/Main/Base/Project/Project/IProjectBinding.cs index 119bbe46ed..5cfaf7e517 100644 --- a/src/Main/Base/Project/Src/Services/ProjectBinding/IProjectBinding.cs +++ b/src/Main/Base/Project/Project/IProjectBinding.cs @@ -6,18 +6,17 @@ using System; namespace ICSharpCode.SharpDevelop.Project { /// - /// The IProjectBinding interface is the base interface - /// of all project bindings avaiable. + /// The IProjectBinding interface is implemented by language binding AddIns + /// in order to support project creation/loading. /// + /// public interface IProjectBinding { - /// - /// The language for this project binding. - /// - string Language { - get; - } - + /// + /// Loads a project from disk. + /// + /// Invalid project file (or other error) + /// Error reading from the project file IProject LoadProject(ProjectLoadInformation info); /// @@ -25,10 +24,12 @@ namespace ICSharpCode.SharpDevelop.Project /// Each project binding must provide a representation of the project /// it 'controls'. /// + /// Invalid project file (or other error) + /// Error writing new project to disk IProject CreateProject(ProjectCreateInformation info); /// - /// Determines whether this ProjectBinding handling missing project file + /// Determines whether this ProjectBinding handling missing project file /// itself or it relies on the default logic of creating MissingProject project /// bool HandlingMissingProject { get; } diff --git a/src/Main/Base/Project/Project/IProjectService.cs b/src/Main/Base/Project/Project/IProjectService.cs index 5c76132d70..71b35eed8e 100644 --- a/src/Main/Base/Project/Project/IProjectService.cs +++ b/src/Main/Base/Project/Project/IProjectService.cs @@ -142,6 +142,23 @@ namespace ICSharpCode.SharpDevelop.Project event EventHandler ProjectItemAdded; event EventHandler ProjectItemRemoved; + + /// + /// Gets the list of registered project bindings. + /// + IReadOnlyList ProjectBindings { get; } + + /// + /// Loads a project from disk without opening it in the IDE. + /// + /// Invalid project file (or other error) + /// Error reading from the project file + /// + /// The TypeGuid will be used to identity the project binding used for loading the project. + /// If the TypeGuid provided with the ProjectLoadInformation is all zeroes, the project file extension + /// will be used instead. + /// + IProject LoadProject(ProjectLoadInformation info); } public interface IProjectServiceRaiseEvents diff --git a/src/Main/Base/Project/Project/ISolutionFolder.cs b/src/Main/Base/Project/Project/ISolutionFolder.cs index 4b88972a12..40affc9155 100644 --- a/src/Main/Base/Project/Project/ISolutionFolder.cs +++ b/src/Main/Base/Project/Project/ISolutionFolder.cs @@ -48,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Project /// /// Path to the project file /// The specified file is not a valid project file - /// Error reading from the specified project file + /// Error reading from the specified project file IProject AddExistingProject(FileName fileName); /* if (solutionFolderNode.Solution.SolutionFolders.Any( diff --git a/src/Main/Base/Project/Project/PortableLibrary/PortableLibraryProjectBehavior.cs b/src/Main/Base/Project/Project/PortableLibrary/PortableLibraryProjectBehavior.cs index 41fbcf8f91..10dd679fe2 100644 --- a/src/Main/Base/Project/Project/PortableLibrary/PortableLibraryProjectBehavior.cs +++ b/src/Main/Base/Project/Project/PortableLibrary/PortableLibraryProjectBehavior.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary public override IEnumerable GetAvailableTargetFrameworks() { TargetFramework[] portableTargets = { this.CurrentTargetFramework, new PickPortableTargetFramework() }; - if (Project.Language == "C#" || Project.Language == "VBNet") { + if (Project.Language == "C#" || Project.Language == "VB") { // we support converting back to regular projects return base.GetAvailableTargetFrameworks().Union(portableTargets); } else { diff --git a/src/Main/Base/Project/Project/ProjectBindingDescriptor.cs b/src/Main/Base/Project/Project/ProjectBindingDescriptor.cs new file mode 100644 index 0000000000..9820ad6a78 --- /dev/null +++ b/src/Main/Base/Project/Project/ProjectBindingDescriptor.cs @@ -0,0 +1,91 @@ +// 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 ICSharpCode.Core; +using ICSharpCode.NRefactory.Utils; +using ICSharpCode.SharpDevelop.Project; + +namespace ICSharpCode.SharpDevelop.Project +{ + /// + /// Represents the registration of a project binding with the project service. + /// + public class ProjectBindingDescriptor + { + readonly AddIn addIn; + readonly string className; + readonly string language; + readonly Guid typeGuid; + readonly string projectFileExtension; + readonly string[] codeFileExtensions; + IProjectBinding binding; + + public IProjectBinding Binding { + get { + if (binding != null) + return binding; + if (addIn == null) + return null; + return LazyInit.GetOrSet(ref binding, (IProjectBinding)addIn.CreateObject(className)); + } + } + + public string ProjectFileExtension { + get { + return projectFileExtension; + } + } + + public Guid TypeGuid { + get { + return typeGuid; + } + } + + public string Language { + get { + return language; + } + } + + public string[] CodeFileExtensions { + get { + return codeFileExtensions; + } + } + + public ProjectBindingDescriptor(IProjectBinding binding, string language, string projectFileExtension, Guid typeGuid, string[] codeFileExtensions) + { + if (binding == null) + throw new ArgumentNullException("binding"); + if (language == null) + throw new ArgumentNullException("language"); + if (projectFileExtension == null) + throw new ArgumentNullException("projectFileExtension"); + if (codeFileExtensions == null) + throw new ArgumentNullException("codeFileExtensions"); + this.binding = binding; + this.projectFileExtension = projectFileExtension; + this.typeGuid = typeGuid; + this.language = language; + this.codeFileExtensions = codeFileExtensions; + } + + public ProjectBindingDescriptor(Codon codon) + { + if (codon == null) + throw new ArgumentNullException("codon"); + this.addIn = codon.AddIn; + this.language = codon.Id; + this.className = codon.Properties["class"]; + this.projectFileExtension = codon.Properties["projectfileextension"]; + if (string.IsNullOrEmpty(codon.Properties["supportedextensions"])) + this.codeFileExtensions = new string[0]; + else + this.codeFileExtensions = codon.Properties["supportedextensions"].ToLowerInvariant().Split(';'); + if (!string.IsNullOrEmpty(codon.Properties["guid"])) + this.typeGuid = Guid.Parse(codon.Properties["guid"]); + } + } +} diff --git a/src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingDoozer.cs b/src/Main/Base/Project/Project/ProjectBindingDoozer.cs similarity index 93% rename from src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingDoozer.cs rename to src/Main/Base/Project/Project/ProjectBindingDoozer.cs index c9e34e32e6..1c02b96cad 100644 --- a/src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingDoozer.cs +++ b/src/Main/Base/Project/Project/ProjectBindingDoozer.cs @@ -5,7 +5,7 @@ using System; using System.Collections; using ICSharpCode.Core; -namespace ICSharpCode.SharpDevelop +namespace ICSharpCode.SharpDevelop.Project { /// /// Creates ProjectBindingDescriptor objects for the project service. @@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop /// /// Name of the IProjectBinding class. /// - /// Only in /SharpDevelop/Workbench/ProjectBinding + /// Only in /SharpDevelop/Workbench/ProjectBindings /// /// A ProjectBindingDescriptor object that wraps the IProjectBinding object. /// diff --git a/src/Main/Base/Project/Project/Project_TypeGuids.cs b/src/Main/Base/Project/Project/Project_TypeGuids.cs index c9c9b5ec7c..7c147e1888 100644 --- a/src/Main/Base/Project/Project/Project_TypeGuids.cs +++ b/src/Main/Base/Project/Project/Project_TypeGuids.cs @@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Project public static readonly Guid SolutionFolder = Guid.Parse("{2150E333-8FDC-42A3-9474-1A3956D46DE8}"); public static readonly Guid CSharp = Guid.Parse("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"); - public static readonly Guid VBNet = Guid.Parse("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}"); + public static readonly Guid VB = Guid.Parse("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}"); public static readonly Guid CPlusPlus = Guid.Parse("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"); public static readonly Guid WebApplication = Guid.Parse("{349C5851-65DF-11DA-9384-00065B846F21}"); diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGeneratorOptions.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGeneratorOptions.cs index 77ab44cef1..97559d7c66 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGeneratorOptions.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGeneratorOptions.cs @@ -51,7 +51,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference public void MapProjectLanguage(string language) { - if (language == "VBNet") { + if (language == "VB") { Language = "VB"; } else { Language = "CS"; diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReference.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReference.cs index 66e4ca3651..bf0f1d63b6 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReference.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReference.cs @@ -7,6 +7,7 @@ using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Web.Services.Description; using System.Web.Services.Discovery; using System.Xml.Schema; @@ -301,7 +302,7 @@ namespace ICSharpCode.SharpDevelop.Gui string GetProxyFileNameExtension(string language) { - ProjectBindingDescriptor binding = ProjectBindingService.GetCodonPerLanguageName(language); + ProjectBindingDescriptor binding = SD.ProjectService.ProjectBindings.FirstOrDefault(b => b.Language == language); if (binding != null) { string[] extensions = binding.CodeFileExtensions; if (extensions.Length > 0) { diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs index 19de1fffcd..55a21449b6 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs @@ -43,7 +43,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands int GetFileFilterIndex(IProject project, IReadOnlyList fileFilters) { if (project != null) { - ProjectBindingDescriptor projectCodon = ProjectBindingService.GetCodonPerLanguageName(project.Language); + ProjectBindingDescriptor projectCodon = SD.ProjectService.ProjectBindings.FirstOrDefault(b => b.Language == project.Language); if (projectCodon != null) { for (int i = 0; i < fileFilters.Count; ++i) { for (int j = 0; j < projectCodon.CodeFileExtensions.Length; ++j) { diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs index 978f99af5c..1deb4efcf6 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs @@ -56,7 +56,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands { AbstractProjectBrowserTreeNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode; ISolutionFolderNode solutionFolderNode = node as ISolutionFolderNode; - if (node != null) { + if (solutionFolderNode != null) { using (OpenFileDialog fdiag = new OpenFileDialog()) { fdiag.AddExtension = true; fdiag.Filter = ProjectService.GetAllProjectsFilter(this, false); @@ -64,8 +64,14 @@ namespace ICSharpCode.SharpDevelop.Project.Commands fdiag.CheckFileExists = true; fdiag.InitialDirectory = AddNewProjectToSolution.GetInitialDirectorySuggestion(solutionFolderNode.Folder); if (fdiag.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) { - foreach (string fileName in fdiag.FileNames) { - solutionFolderNode.Folder.AddExistingProject(FileName.Create(fileName)); + try { + foreach (string fileName in fdiag.FileNames) { + solutionFolderNode.Folder.AddExistingProject(FileName.Create(fileName)); + } + } catch (ProjectLoadException ex) { + MessageService.ShowError(ex.Message); + } catch (IOException ex) { + MessageService.ShowError(ex.Message); } ProjectService.SaveSolution(); } diff --git a/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs b/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs index 0fc4508719..feaeb64855 100644 --- a/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs +++ b/src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs @@ -17,6 +17,7 @@ using Microsoft.Build.Construction; namespace ICSharpCode.SharpDevelop.Project.Converter { + /* /// /// Converts projects from one language to another, for example C# <-> VB /// @@ -206,6 +207,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter } } } +*/ /* public abstract class NRefactoryLanguageConverter : LanguageConverter @@ -271,6 +273,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter } */ + /* /// /// Exception used when converting a file fails. /// @@ -293,4 +296,5 @@ namespace ICSharpCode.SharpDevelop.Project.Converter { } } + */ } diff --git a/src/Main/Base/Project/Src/Project/MSBuildFileProject.cs b/src/Main/Base/Project/Src/Project/MSBuildFileProject.cs index a357dd47ca..28c52f6116 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildFileProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildFileProject.cs @@ -29,9 +29,9 @@ namespace ICSharpCode.SharpDevelop.Project } } } - } catch (XmlException) { - } catch (IOException) { - } + } catch (XmlException ex) { + throw new ProjectLoadException(ex.Message, ex); + } // IOException can also occur, but doesn't need to be converted to ProjectLoadException } public override SolutionFormatVersion MinimumSolutionVersion { diff --git a/src/Main/Base/Project/Src/Project/UnknownProject.cs b/src/Main/Base/Project/Src/Project/UnknownProject.cs index bd35cb9a08..a9f08fb0e5 100644 --- a/src/Main/Base/Project/Src/Project/UnknownProject.cs +++ b/src/Main/Base/Project/Src/Project/UnknownProject.cs @@ -27,13 +27,10 @@ namespace ICSharpCode.SharpDevelop.Project MessageService.ShowError("Error loading " + this.FileName + ":\n" + warningText); } - public UnknownProject(ProjectLoadInformation information, string warningText, bool displayWarningToUser) + public UnknownProject(ProjectLoadInformation information, string warningText) : this(information) { this.warningText = warningText; - if (displayWarningToUser) { - ShowWarningMessageBox(); - } } public UnknownProject(ProjectLoadInformation information) diff --git a/src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingDescriptor.cs b/src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingDescriptor.cs deleted file mode 100644 index 52e384da92..0000000000 --- a/src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingDescriptor.cs +++ /dev/null @@ -1,71 +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 ICSharpCode.Core; -using ICSharpCode.SharpDevelop.Project; - -namespace ICSharpCode.SharpDevelop -{ - public class ProjectBindingDescriptor - { - IProjectBinding binding = null; - Codon codon; - - public IProjectBinding Binding { - get { - if (binding == null) { - binding = (IProjectBinding)codon.AddIn.CreateObject(codon.Properties["class"]); - if (binding != null) { - if (binding.Language != this.Language) - throw new InvalidOperationException("The Language property of the project binding must be equal to the id of the ProjectBinding codon!"); - } - } - return binding; - } - } - public Codon Codon { - get { - return codon; - } - } - - public string ProjectFileExtension { - get { - return codon.Properties["projectfileextension"]; - } - } - - - public Guid Guid { - get { - return Guid.Parse(codon.Properties["guid"]); - } - } - - public string Language { - get { - return codon.Id; - } - } - - string[] codeFileExtensions; - - public string[] CodeFileExtensions { - get { - if (codeFileExtensions == null) { - if (codon.Properties["supportedextensions"].Length == 0) - codeFileExtensions = new string[0]; - else - codeFileExtensions = codon.Properties["supportedextensions"].ToLowerInvariant().Split(';'); - } - return codeFileExtensions; - } - } - - public ProjectBindingDescriptor(Codon codon) - { - this.codon = codon; - } - } -} diff --git a/src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingService.cs b/src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingService.cs deleted file mode 100644 index 23fcceab0f..0000000000 --- a/src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingService.cs +++ /dev/null @@ -1,131 +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 ICSharpCode.SharpDevelop.Gui; -using System; -using System.Collections.Generic; -using System.IO; -using System.Xml; -using ICSharpCode.Core; -using ICSharpCode.SharpDevelop.Project; - -namespace ICSharpCode.SharpDevelop -{ - public static class ProjectBindingService - { - static IList bindings; - - static ProjectBindingService() - { - bindings = AddInTree.BuildItems("/SharpDevelop/Workbench/ProjectBindings", null, false); - } - - /// - /// Overwrites the list of used bindings. Used for unit tests. - /// - public static void SetBindings(IList bindings) - { - ProjectBindingService.bindings = bindings; - } - - public static string GetProjectFileExtension(string languageName) - { - ProjectBindingDescriptor descriptor = GetCodonPerLanguageName(languageName); - return descriptor == null ? null : descriptor.ProjectFileExtension; - } - - public static IProjectBinding GetBindingPerLanguageName(string languagename) - { - ProjectBindingDescriptor descriptor = GetCodonPerLanguageName(languagename); - return descriptor == null ? null : descriptor.Binding; - } - - public static IProjectBinding GetBindingCodePerFileName(string filename) - { - ProjectBindingDescriptor descriptor = GetCodonPerCodeFileName(filename); - return descriptor == null ? null : descriptor.Binding; - } - - public static IProjectBinding GetBindingPerProjectFile(string filename) - { - ProjectBindingDescriptor descriptor = GetCodonPerProjectFile(filename); - return descriptor == null ? null : descriptor.Binding; - } - - public static ProjectBindingDescriptor GetCodonPerLanguageName(string languagename) - { - foreach (ProjectBindingDescriptor binding in bindings) { - if (binding.Language == languagename) { - return binding; - } - } - return null; - } - - public static ProjectBindingDescriptor GetCodonPerCodeFileName(string filename) - { - string extension = Path.GetExtension(filename).ToLowerInvariant(); - foreach (ProjectBindingDescriptor binding in bindings) { - if (Array.IndexOf(binding.CodeFileExtensions, extension) >= 0) { - return binding; - } - } - return null; - } - - public static ProjectBindingDescriptor GetCodonPerProjectFile(string fileName) - { - string ext = Path.GetExtension(fileName).ToUpperInvariant(); - foreach (ProjectBindingDescriptor binding in bindings) { - if (binding.ProjectFileExtension.ToUpperInvariant() == ext) { - return binding; - } - } - return null; - } - - public static IProject LoadProject(ProjectLoadInformation loadInformation) - { - if (loadInformation == null) - throw new ArgumentNullException("loadInformation"); - - var location = loadInformation.FileName; - string title = loadInformation.ProjectName; - IProgressMonitor progressMonitor = loadInformation.ProgressMonitor; - - progressMonitor.CancellationToken.ThrowIfCancellationRequested(); - - IProjectBinding binding = ProjectBindingService.GetBindingPerProjectFile(location); - IProject newProject; - if (!(binding != null && binding.HandlingMissingProject) && !File.Exists(location)) { - newProject = new MissingProject(loadInformation); - } else { - if (binding != null) { - try { - newProject = binding.LoadProject(loadInformation); - } catch (ProjectLoadException ex) { - LoggingService.Warn("Project load error", ex); - progressMonitor.ShowingDialog = true; - newProject = new UnknownProject(loadInformation, ex.Message, true); - progressMonitor.ShowingDialog = false; - } catch (UnauthorizedAccessException ex) { - LoggingService.Warn("Project load error", ex); - progressMonitor.ShowingDialog = true; - newProject = new UnknownProject(loadInformation, ex.Message, true); - progressMonitor.ShowingDialog = false; - } - } else { - string ext = Path.GetExtension(location); - if (".proj".Equals(ext, StringComparison.OrdinalIgnoreCase) - || ".build".Equals(ext, StringComparison.OrdinalIgnoreCase)) - { - newProject = new MSBuildFileProject(loadInformation); - } else { - newProject = new UnknownProject(loadInformation); - } - } - } - return newProject; - } - } -} diff --git a/src/Main/Base/Project/Templates/ITemplateService.cs b/src/Main/Base/Project/Templates/ITemplateService.cs index 639dc7d7ae..d0e1a7c0b0 100644 --- a/src/Main/Base/Project/Templates/ITemplateService.cs +++ b/src/Main/Base/Project/Templates/ITemplateService.cs @@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Templates /// File system used to open referenced input files. /// This should usually be a so that the file template /// can use relative paths. - /// The template will keep a reference to the file system instance and use it to create files/projects. + /// The template will keep a reference to the file system instance and use it to read the referenced input files when the template is used. /// /// or instance. /// Invalid file format diff --git a/src/Main/Base/Project/Util/SharpDevelopExtensions.cs b/src/Main/Base/Project/Util/SharpDevelopExtensions.cs index 0d5ac25e01..1ad21dde04 100644 --- a/src/Main/Base/Project/Util/SharpDevelopExtensions.cs +++ b/src/Main/Base/Project/Util/SharpDevelopExtensions.cs @@ -512,7 +512,7 @@ namespace ICSharpCode.SharpDevelop try { return SD.AssemblyParserService.GetAssemblyModel(assembly.GetReferenceAssemblyLocation()); - } catch (Exception ex) { + } catch (Exception) { // TODO: use the exact exception types that GetAssemblyModel() throws (+document them) // silently ignore errors when loading the assembly return null; diff --git a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj index 54375397e1..6cf0f2feef 100644 --- a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj +++ b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj @@ -136,7 +136,7 @@ - + diff --git a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs index 05f467cf42..e4ffd78dcb 100644 --- a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs +++ b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs @@ -39,7 +39,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences void CreateProjectWithVisualBasicMSBuildProject() { - msbuildProject = WebReferenceTestHelper.CreateTestProject("VBNet"); + msbuildProject = WebReferenceTestHelper.CreateTestProject("VB"); project = new ProjectWithServiceReferences(msbuildProject); } @@ -311,7 +311,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences { CreateProjectWithVisualBasicMSBuildProject(); - Assert.AreEqual("VBNet", project.Language); + Assert.AreEqual("VB", project.Language); } [Test] diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs index f7279a0afd..7c6febfe88 100644 --- a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs +++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs @@ -93,7 +93,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences void UseVisualBasicProject() { - SetProjectLanguage("VBNet"); + SetProjectLanguage("VB"); } void SetProjectLanguage(string language) diff --git a/src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs b/src/Main/Base/Test/WebReferences/VBWebReferenceTest.cs similarity index 94% rename from src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs rename to src/Main/Base/Test/WebReferences/VBWebReferenceTest.cs index 4d39c95ddd..f989a887e5 100644 --- a/src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs +++ b/src/Main/Base/Test/WebReferences/VBWebReferenceTest.cs @@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences /// a vb project. /// [TestFixture] - public class VBNetWebReferenceTest : SDTestFixtureBase + public class VBWebReferenceTest : SDTestFixtureBase { Gui.WebReference webReference; DiscoveryClientProtocol protocol; @@ -32,7 +32,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences public override void FixtureSetUp() { base.FixtureSetUp(); - project = WebReferenceTestHelper.CreateTestProject("VBNet"); + project = WebReferenceTestHelper.CreateTestProject("VB"); protocol = new DiscoveryClientProtocol(); DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference(); diff --git a/src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs b/src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs index 8f919a86d4..220acc470e 100644 --- a/src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs +++ b/src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs @@ -48,20 +48,14 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences public static void InitializeProjectBindings() { - Properties prop = new Properties(); - prop["id"] = "C#"; - prop["supportedextensions"] = ".cs"; - prop["projectfileextension"] = ".csproj"; - Codon codon1 = new Codon(null, "ProjectBinding", prop, new Condition[0]); - prop = new Properties(); - prop["id"] = "VBNet"; - prop["supportedextensions"] = ".vb"; - prop["projectfileextension"] = ".vbproj"; - Codon codon2 = new Codon(null, "ProjectBinding", prop, new Condition[0]); - ProjectBindingService.SetBindings(new ProjectBindingDescriptor[] { - new ProjectBindingDescriptor(codon1), - new ProjectBindingDescriptor(codon2) - }); + SD.Services.AddStrictMockService(); + var projectBinding = MockRepository.GenerateStrictMock(); + + ProjectBindingDescriptor[] descriptors = { + new ProjectBindingDescriptor(projectBinding, "C#", ".csproj", ProjectTypeGuids.CSharp, new[] { ".cs" }), + new ProjectBindingDescriptor(projectBinding, "VB", ".vbproj", ProjectTypeGuids.VB, new[] { ".vb" }), + }; + SD.ProjectService.Stub(p => p.ProjectBindings).Return(descriptors); } public static ProjectItem GetProjectItem(List items, string include, ItemType itemType) { diff --git a/src/Main/SharpDevelop/Project/ProjectService.cs b/src/Main/SharpDevelop/Project/ProjectService.cs index f4a788a578..19dcc7fcb5 100644 --- a/src/Main/SharpDevelop/Project/ProjectService.cs +++ b/src/Main/SharpDevelop/Project/ProjectService.cs @@ -2,8 +2,10 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Linq; using System.Windows.Input; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Dom; @@ -19,6 +21,7 @@ namespace ICSharpCode.SharpDevelop.Project { allSolutions = new NullSafeSimpleModelCollection(); allProjects = allSolutions.SelectMany(s => s.Projects); + projectBindings = SD.AddInTree.BuildItems("/SharpDevelop/Workbench/ProjectBindings", null); SD.GetFutureService().ContinueWith(t => t.Result.ActiveViewContentChanged += ActiveViewContentChanged); @@ -364,5 +367,44 @@ namespace ICSharpCode.SharpDevelop.Project ProjectItemRemoved(this, e); } #endregion + + #region Project Bindings + readonly IReadOnlyList projectBindings; + + public IReadOnlyList ProjectBindings { + get { return projectBindings; } + } + + public IProject LoadProject(ProjectLoadInformation info) + { + if (info == null) + throw new ArgumentNullException("info"); + info.ProgressMonitor.CancellationToken.ThrowIfCancellationRequested(); + ProjectBindingDescriptor descriptor = null; + if (info.TypeGuid != Guid.Empty) { + descriptor = projectBindings.FirstOrDefault(b => b.TypeGuid == info.TypeGuid); + } + if (descriptor == null) { + string extension = info.FileName.GetExtension(); + if (extension.Equals(".proj", StringComparison.OrdinalIgnoreCase) || extension.Equals(".build", StringComparison.OrdinalIgnoreCase)) + return new MSBuildFileProject(info); + descriptor = projectBindings.FirstOrDefault(b => extension.Equals(b.ProjectFileExtension, StringComparison.OrdinalIgnoreCase)); + } + if (descriptor == null) + throw new ProjectLoadException(SD.ResourceService.GetString("ICSharpCode.SharpDevelop.Commands.ProjectBrowser.NoBackendForProjectType")); + + // Set type GUID based on file extension + info.TypeGuid = descriptor.TypeGuid; + IProjectBinding binding = descriptor.Binding; + if (binding == null) + throw new ProjectLoadException(SD.ResourceService.GetString("ICSharpCode.SharpDevelop.Commands.ProjectBrowser.NoBackendForProjectType")); + if (!binding.HandlingMissingProject && !SD.FileSystem.FileExists(info.FileName)) + throw new FileNotFoundException("Project file not found", info.FileName); + var result = binding.LoadProject(info); + if (result == null) + throw new InvalidOperationException("IProjectBinding.LoadProject() must not return null"); + return result; + } + #endregion } } diff --git a/src/Main/SharpDevelop/Project/SolutionFolder.cs b/src/Main/SharpDevelop/Project/SolutionFolder.cs index 89044a17a5..92f3f9392f 100644 --- a/src/Main/SharpDevelop/Project/SolutionFolder.cs +++ b/src/Main/SharpDevelop/Project/SolutionFolder.cs @@ -132,11 +132,7 @@ namespace ICSharpCode.SharpDevelop.Project public IProject AddExistingProject(FileName fileName) { ProjectLoadInformation loadInfo = new ProjectLoadInformation(parentSolution, fileName, fileName.GetFileNameWithoutExtension()); - var descriptor = ProjectBindingService.GetCodonPerProjectFile(fileName); - if (descriptor != null) { - loadInfo.TypeGuid = descriptor.Guid; - } - IProject project = ProjectBindingService.LoadProject(loadInfo); + IProject project = SD.ProjectService.LoadProject(loadInfo); Debug.Assert(project.IdGuid != Guid.Empty); this.Items.Add(project); project.ProjectLoaded(); diff --git a/src/Main/SharpDevelop/Project/SolutionLoader.cs b/src/Main/SharpDevelop/Project/SolutionLoader.cs index f1fb59aa30..8fb6a39d5f 100644 --- a/src/Main/SharpDevelop/Project/SolutionLoader.cs +++ b/src/Main/SharpDevelop/Project/SolutionLoader.cs @@ -139,7 +139,7 @@ namespace ICSharpCode.SharpDevelop.Project projectInfo.ActiveProjectConfiguration = projectInfo.ConfigurationMapping.GetProjectConfiguration(solution.ActiveConfiguration); progress.TaskName = "Loading " + projectInfo.ProjectName; using (projectInfo.ProgressMonitor = progress.CreateSubTask(1.0 / projectCount)) { - solutionItem = ProjectBindingService.LoadProject(projectInfo); + solutionItem = LoadProjectWithErrorHandling(projectInfo); } projectsLoaded++; progress.Progress = (double)projectsLoaded / projectCount; @@ -155,6 +155,24 @@ namespace ICSharpCode.SharpDevelop.Project solution.IsDirty = fixedGuidConflicts; // reset IsDirty=false unless we've fixed GUID conflicts } + + static IProject LoadProjectWithErrorHandling(ProjectLoadInformation projectInfo) + { + Exception exception; + try { + return SD.ProjectService.LoadProject(projectInfo); + } catch (FileNotFoundException) { + return new MissingProject(projectInfo); + } catch (ProjectLoadException ex) { + exception = ex; + } catch (IOException ex) { + exception = ex; + } catch (UnauthorizedAccessException ex) { + exception = ex; + } + LoggingService.Warn("Project load error", exception); + return new UnknownProject(projectInfo, exception.Message); + } #endregion #region ReadFormatHeader diff --git a/src/Main/SharpDevelop/Templates/Project/ProjectDescriptor.cs b/src/Main/SharpDevelop/Templates/Project/ProjectDescriptor.cs index 1292e061ec..fe0f465c7b 100644 --- a/src/Main/SharpDevelop/Templates/Project/ProjectDescriptor.cs +++ b/src/Main/SharpDevelop/Templates/Project/ProjectDescriptor.cs @@ -64,7 +64,7 @@ namespace ICSharpCode.SharpDevelop.Templates /// Creates a project descriptor for the project node specified by the xml element. /// /// The <Project> node of the xml template file. - /// The directory on which relative paths (e.g. for referenced files) are based. + /// The file system from which referenced files are loaded. Use a ChrootFileSystem to specify the base directory for relative paths. public ProjectDescriptor(XmlElement element, IReadOnlyFileSystem fileSystem) { if (element == null) @@ -276,7 +276,7 @@ namespace ICSharpCode.SharpDevelop.Templates try { string language = string.IsNullOrEmpty(languageName) ? defaultLanguage : languageName; - ProjectBindingDescriptor descriptor = ProjectBindingService.GetCodonPerLanguageName(language); + ProjectBindingDescriptor descriptor = SD.ProjectService.ProjectBindings.FirstOrDefault(b => b.Language == language); IProjectBinding languageinfo = (descriptor != null) ? descriptor.Binding : null; if (languageinfo == null) { @@ -289,13 +289,12 @@ namespace ICSharpCode.SharpDevelop.Templates DirectoryName projectBasePath = projectCreateOptions.ProjectBasePath; string newProjectName = StringParser.Parse(name, new StringTagPair("ProjectName", projectCreateOptions.ProjectName)); Directory.CreateDirectory(projectBasePath); - FileName projectLocation = FileName.Create(Path.Combine(projectBasePath, - newProjectName + ProjectBindingService.GetProjectFileExtension(language))); + FileName projectLocation = projectBasePath.CombineFile(newProjectName + descriptor.ProjectFileExtension); ProjectCreateInformation info = new ProjectCreateInformation(parentSolution, projectLocation); StringBuilder standardNamespace = new StringBuilder(); // filter 'illegal' chars from standard namespace - if (newProjectName != null && newProjectName.Length > 0) { + if (!string.IsNullOrEmpty(newProjectName)) { char ch = '.'; for (int i = 0; i < newProjectName.Length; ++i) { if (ch == '.') { @@ -318,7 +317,7 @@ namespace ICSharpCode.SharpDevelop.Templates } } - info.TypeGuid = descriptor.Guid; + info.TypeGuid = descriptor.TypeGuid; info.RootNamespace = standardNamespace.ToString(); info.ProjectName = newProjectName; if (!string.IsNullOrEmpty(defaultPlatform))