Browse Source

Remove static class ProjectBindingService; the list of project bindings is now available from SD.ProjectService.

Also, fixes various references to the "VBNet" language string to use "VB" instead.
newNR
Daniel Grunwald 12 years ago
parent
commit
ee0e6b1d4d
  1. 8
      SharpDevelop.Tests.sln
  2. 8
      src/AddIns/Analysis/UnitTesting/Test/Service/TestFrameworkDescriptorTests.cs
  3. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin
  4. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Resources/VisualBasicRazor.xshd
  5. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateLanguageConverter.cs
  6. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs
  7. 4
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
  8. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs
  9. 6
      src/AddIns/BackendBindings/VBBinding/Project/VBProjectBinding.vb
  10. 3
      src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs
  11. 24
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs
  12. 2
      src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs
  13. 4
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs
  14. 4
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs
  15. 4
      src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs
  16. 4
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs
  17. 2
      src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/FlavoredProjectTests.cs
  18. 2
      src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingFilePreprocessor.cs
  19. 2
      src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingPreprocessorTests.cs
  20. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/Resources.cs
  21. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/VB-Mode.xshd
  22. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj
  23. 8
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  24. 7
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  25. 21
      src/Main/Base/Project/Project/IProjectBinding.cs
  26. 17
      src/Main/Base/Project/Project/IProjectService.cs
  27. 2
      src/Main/Base/Project/Project/ISolutionFolder.cs
  28. 2
      src/Main/Base/Project/Project/PortableLibrary/PortableLibraryProjectBehavior.cs
  29. 91
      src/Main/Base/Project/Project/ProjectBindingDescriptor.cs
  30. 4
      src/Main/Base/Project/Project/ProjectBindingDoozer.cs
  31. 2
      src/Main/Base/Project/Project/Project_TypeGuids.cs
  32. 2
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGeneratorOptions.cs
  33. 3
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReference.cs
  34. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs
  35. 12
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs
  36. 4
      src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs
  37. 6
      src/Main/Base/Project/Src/Project/MSBuildFileProject.cs
  38. 5
      src/Main/Base/Project/Src/Project/UnknownProject.cs
  39. 71
      src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingDescriptor.cs
  40. 131
      src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingService.cs
  41. 2
      src/Main/Base/Project/Templates/ITemplateService.cs
  42. 2
      src/Main/Base/Project/Util/SharpDevelopExtensions.cs
  43. 2
      src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
  44. 4
      src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
  45. 2
      src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs
  46. 4
      src/Main/Base/Test/WebReferences/VBWebReferenceTest.cs
  47. 22
      src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs
  48. 42
      src/Main/SharpDevelop/Project/ProjectService.cs
  49. 6
      src/Main/SharpDevelop/Project/SolutionFolder.cs
  50. 20
      src/Main/SharpDevelop/Project/SolutionLoader.cs
  51. 11
      src/Main/SharpDevelop/Templates/Project/ProjectDescriptor.cs

8
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}.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.ActiveCfg = net_4_5_Release|Any CPU
{B2BBC7BC-837C-40ED-A6DB-D5AE8626212F}.Release|Any CPU.Build.0 = 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.ActiveCfg = Debug|Any CPU
{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Debug|Any CPU.Build.0 = 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 {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}.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.ActiveCfg = Release|Any CPU
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.Build.0 = 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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

8
src/AddIns/Analysis/UnitTesting/Test/Service/TestFrameworkDescriptorTests.cs

@ -68,7 +68,7 @@ namespace UnitTesting.Tests.Service
} }
[Test] [Test]
public void IsSupportedProject_CSharpAndVisualBasicProjectsSupportedByDescriptor_ReturnsTrueForVBNetProject() public void IsSupportedProject_CSharpAndVisualBasicProjectsSupportedByDescriptor_ReturnsTrueForVBProject()
{ {
CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".csproj;.vbproj"); CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".csproj;.vbproj");
MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework(); MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework();
@ -110,7 +110,7 @@ namespace UnitTesting.Tests.Service
} }
[Test] [Test]
public void IsSupportedProject_SupportedProjectFileExtensionsInDescriptorContainWhitespace_ReturnsTrueForVBNetProject() public void IsSupportedProject_SupportedProjectFileExtensionsInDescriptorContainWhitespace_ReturnsTrueForVBProject()
{ {
CreateTestFrameworkDescriptorToSupportProjectFileExtensions(" .csproj; .vbproj "); CreateTestFrameworkDescriptorToSupportProjectFileExtensions(" .csproj; .vbproj ");
MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework(); MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework();
@ -132,7 +132,7 @@ namespace UnitTesting.Tests.Service
} }
[Test] [Test]
public void IsSupportedProject_SupportedProjectFileExtensionInDescriptorAreInUpperCase_ReturnsTrueForVBNetProject() public void IsSupportedProject_SupportedProjectFileExtensionInDescriptorAreInUpperCase_ReturnsTrueForVBProject()
{ {
CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".CSPROJ;.VBPROJ"); CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".CSPROJ;.VBPROJ");
MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework(); MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework();
@ -143,7 +143,7 @@ namespace UnitTesting.Tests.Service
} }
[Test] [Test]
public void IsSupportedProject_DescriptorSupportsCSharpProjects_ReturnsFalseForVBNetProject() public void IsSupportedProject_DescriptorSupportsCSharpProjects_ReturnsFalseForVBProject()
{ {
CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".csproj"); CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".csproj");
MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework(); MockCSharpProject project = CreateVisualBasicProjectSupportedByTestFramework();

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin

@ -58,7 +58,7 @@
<SyntaxMode <SyntaxMode
id="VisualBasic.Razor.SyntaxMode" id="VisualBasic.Razor.SyntaxMode"
extensions=".vbhtml" extensions=".vbhtml"
name="VBNET/Razor" name="VB/Razor"
resource="ICSharpCode.AspNet.Mvc.Resources.VisualBasicRazor.xshd"/> resource="ICSharpCode.AspNet.Mvc.Resources.VisualBasicRazor.xshd"/>
</Path> </Path>

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Resources/VisualBasicRazor.xshd

@ -1,6 +1,6 @@
<SyntaxDefinition <SyntaxDefinition
xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008"
name="VBNET/Razor" name="VB/Razor"
extensions=".vbhtml"> extensions=".vbhtml">
<Color name="CommentBlockStartEndTags" foreground="Black" background="Yellow" /> <Color name="CommentBlockStartEndTags" foreground="Black" background="Yellow" />

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateLanguageConverter.cs

@ -7,7 +7,7 @@ namespace ICSharpCode.AspNet.Mvc
{ {
public static class MvcTextTemplateLanguageConverter public static class MvcTextTemplateLanguageConverter
{ {
public static readonly string VisualBasicProjectLanguage = "VBNet"; public static readonly string VisualBasicProjectLanguage = "VB";
/// <summary> /// <summary>
/// Converts from an IProject.Language string to an MvcTemplateLanguage. Only C# and VB.NET languages /// Converts from an IProject.Language string to an MvcTemplateLanguage. Only C# and VB.NET languages

2
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcProjectTests.cs

@ -85,7 +85,7 @@ namespace AspNet.Mvc.Tests
public void GetTemplateLanguage_ProjectIsVisualBasicProject_ReturnsVisualBasicTemplateLanguage() public void GetTemplateLanguage_ProjectIsVisualBasicProject_ReturnsVisualBasicTemplateLanguage()
{ {
CreateProject(); CreateProject();
testableProject.SetLanguage("VBNet"); testableProject.SetLanguage("VB");
MvcTextTemplateLanguage language = project.GetTemplateLanguage(); MvcTextTemplateLanguage language = project.GetTemplateLanguage();

4
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin

@ -26,10 +26,10 @@
</Path> </Path>
<Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ProjectActions/Convert"> <Path name = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ProjectActions/Convert">
<Condition name = "ProjectActive" activeproject="VBNet"> <Condition name = "ProjectActive" activeproject="VB">
<MenuItem id = "VBToCSharpConverter" <MenuItem id = "VBToCSharpConverter"
label = "${res:ICSharpCode.SharpDevelop.Commands.VBConvertProjectToCSharp}" label = "${res:ICSharpCode.SharpDevelop.Commands.VBConvertProjectToCSharp}"
class = "CSharpBinding.VBNetToCSharpConverter"/> class = "CSharpBinding.VBToCSharpConverter"/>
</Condition> </Condition>
</Path> </Path>

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/VBNetToCSharpConverter.cs

@ -15,7 +15,7 @@ using ICSharpCode.SharpDevelop.Project.Converter;
namespace CSharpBinding namespace CSharpBinding
{ {
public class VBNetToCSharpConverter : NRefactoryLanguageConverter public class VBToCSharpConverter : NRefactoryLanguageConverter
{ {
public override string TargetLanguageName { public override string TargetLanguageName {
get { get {

6
src/AddIns/BackendBindings/VBBinding/Project/VBProjectBinding.vb

@ -8,12 +8,6 @@ Public Class VBProjectBinding
Implements IProjectBinding Implements IProjectBinding
Public Const LanguageName As String = "VB" 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 Public Function LoadProject(info As ProjectLoadInformation) As IProject Implements IProjectBinding.LoadProject
Return New VBProject(info) Return New VBProject(info)
End Function End Function

3
src/AddIns/Debugger/Debugger.AddIn/NRefactory/ExpressionEvaluationVisitor.cs

@ -20,8 +20,7 @@ namespace Debugger.AddIn
{ {
public enum SupportedLanguage public enum SupportedLanguage
{ {
CSharp, CSharp
VBNet
} }
public static class Extensions public static class Extensions

24
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs

@ -657,7 +657,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
static readonly MultiDictionary<string, string> mapping = new MultiDictionary<string, string>(StringComparer.Ordinal) { static readonly MultiDictionary<string, string> mapping = new MultiDictionary<string, string>(StringComparer.Ordinal) {
{ "Brace Matching (Rectangle)", BracketHighlightRenderer.BracketHighlight }, { "Brace Matching (Rectangle)", BracketHighlightRenderer.BracketHighlight },
{ "Collapsible Text", FoldingTextMarkers }, { "Collapsible Text", FoldingTextMarkers },
{ "Comment", "VBNET.Comment" }, { "Comment", "VB.Comment" },
{ "Comment", "C#.Comment" }, { "Comment", "C#.Comment" },
{ "Compiler Error", ErrorPainter.ErrorColorName }, { "Compiler Error", ErrorPainter.ErrorColorName },
{ "CSS Comment", "CSS.Comment" }, { "CSS Comment", "CSS.Comment" },
@ -696,14 +696,14 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
{ "Keyword", "C#.TypeKeywords" }, { "Keyword", "C#.TypeKeywords" },
{ "Keyword", "C#.ValueTypes" }, { "Keyword", "C#.ValueTypes" },
{ "Keyword", "C#.ReferenceTypes" }, { "Keyword", "C#.ReferenceTypes" },
{ "Keyword", "VBNET.DateLiteral" }, { "Keyword", "VB.DateLiteral" },
{ "Keyword", "VBNET.Preprocessor" }, { "Keyword", "VB.Preprocessor" },
{ "Keyword", "VBNET.DataTypes" }, { "Keyword", "VB.DataTypes" },
{ "Keyword", "VBNET.Operators" }, { "Keyword", "VB.Operators" },
{ "Keyword", "VBNET.Constants" }, { "Keyword", "VB.Constants" },
{ "Keyword", "VBNET.Keywords" }, { "Keyword", "VB.Keywords" },
{ "Keyword", "VBNET.FunctionKeywords" }, { "Keyword", "VB.FunctionKeywords" },
{ "Keyword", "VBNET.ContextKeywords" }, { "Keyword", "VB.ContextKeywords" },
{ "Line Numbers", CustomizingHighlighter.LineNumbers }, { "Line Numbers", CustomizingHighlighter.LineNumbers },
{ "MarkerFormatDefinition/HighlightedReference", "" }, { "MarkerFormatDefinition/HighlightedReference", "" },
{ "Number", "C#.NumberLiteral" }, { "Number", "C#.NumberLiteral" },
@ -725,7 +725,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
{ "Script String", "" }, { "Script String", "" },
{ "Selected Text", "" }, { "Selected Text", "" },
{ "Selected Text", CustomizingHighlighter.SelectedText }, { "Selected Text", CustomizingHighlighter.SelectedText },
{ "String", "VBNET.String" }, { "String", "VB.String" },
{ "String", "C#.String" }, { "String", "C#.String" },
{ "String(C# @ Verbatim)", "" }, { "String(C# @ Verbatim)", "" },
{ "Syntax Error", "" }, { "Syntax Error", "" },
@ -755,8 +755,8 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
{ "XML Delimiter", "" }, { "XML Delimiter", "" },
{ "XML Doc Comment", "C#.DocComment" }, { "XML Doc Comment", "C#.DocComment" },
{ "XML Doc Tag", "C#.KnownDocTags" }, { "XML Doc Tag", "C#.KnownDocTags" },
{ "XML Doc Comment", "VBNET.DocComment" }, { "XML Doc Comment", "VB.DocComment" },
{ "XML Doc Tag", "VBNET.KnownDocTags" }, { "XML Doc Tag", "VB.KnownDocTags" },
{ "XML Name", "XML.XmlTag" }, { "XML Name", "XML.XmlTag" },
{ "XML Name", "XML.XmlDeclaration" }, { "XML Name", "XML.XmlDeclaration" },
{ "XML Name", "XML.DocType" }, { "XML Name", "XML.DocType" },

2
src/AddIns/Misc/HelpViewer/Source/Helper/ProjectLanguages.cs

@ -24,7 +24,7 @@ namespace MSHelpSystem.Helper
result.Add("C++", "C%2B%2B"); result.Add("C++", "C%2B%2B");
result.Add("C#", "CSharp"); result.Add("C#", "CSharp");
result.Add("F#", "FSharp"); result.Add("F#", "FSharp");
result.Add("VBNet", "VB"); result.Add("VB", "VB");
return result; return result;
} }

4
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs

@ -18,8 +18,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE
string type = ProjectType.GetProjectType(project); string type = ProjectType.GetProjectType(project);
if (type == ProjectType.CSharp) { if (type == ProjectType.CSharp) {
return SD.ProjectTypeGuids.CSharp.ToString(); return SD.ProjectTypeGuids.CSharp.ToString();
} else if (type == ProjectType.VBNet.ToString()) { } else if (type == ProjectType.VB) {
return SD.ProjectTypeGuids.VBNet.ToString(); return SD.ProjectTypeGuids.VB.ToString();
} }
return String.Empty; return String.Empty;
} }

4
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs

@ -8,7 +8,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public static class ProjectType 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 readonly string CSharp = "C#";
public static string GetProjectType(Project project) public static string GetProjectType(Project project)
@ -19,7 +19,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public static string GetProjectType(IProject project) public static string GetProjectType(IProject project)
{ {
if (project.Language == "VB") if (project.Language == "VB")
return VBNet; return VB;
else else
return project.Language; return project.Language;
} }

4
src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs

@ -36,8 +36,8 @@ namespace Microsoft.VisualStudio.Shell.Flavor
var projectType = ProjectType.GetProjectType(project); var projectType = ProjectType.GetProjectType(project);
if (projectType == ProjectType.CSharp) { if (projectType == ProjectType.CSharp) {
return ProjectTypeGuids.CSharp.ToString(); return ProjectTypeGuids.CSharp.ToString();
} else if (projectType == ProjectType.VBNet) { } else if (projectType == ProjectType.VB) {
return ProjectTypeGuids.VBNet.ToString(); return ProjectTypeGuids.VB.ToString();
} }
return String.Empty; return String.Empty;
} }

4
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs

@ -134,13 +134,13 @@ namespace PackageManagement.Tests.EnvDTE
} }
[Test] [Test]
public void Kind_ProjectIsVBNetProject_ReturnsCSharpProjectTypeGuid() public void Kind_ProjectIsVBNetProject_ReturnsVBProjectTypeGuid()
{ {
CreateProject( @"d:\projects\myproject\test.vbproj"); CreateProject( @"d:\projects\myproject\test.vbproj");
string kind = project.Kind; string kind = project.Kind;
Assert.AreEqual(ProjectTypeGuids.VBNet.ToString(), kind); Assert.AreEqual(ProjectTypeGuids.VB.ToString(), kind);
} }
[Test] [Test]

2
src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/FlavoredProjectTests.cs

@ -44,7 +44,7 @@ namespace PackageManagement.Tests.VisualStudio
int result = project.GetAggregateProjectTypeGuids(out guids); int result = project.GetAggregateProjectTypeGuids(out guids);
Assert.AreEqual(VsConstants.S_OK, result); Assert.AreEqual(VsConstants.S_OK, result);
Assert.AreEqual(ProjectTypeGuids.VBNet.ToString(), guids); Assert.AreEqual(ProjectTypeGuids.VB.ToString(), guids);
} }
[Test] [Test]

2
src/AddIns/Misc/TextTemplating/Project/Src/TextTemplatingFilePreprocessor.cs

@ -46,7 +46,7 @@ namespace ICSharpCode.TextTemplating
string GetFileExtensionForProject() string GetFileExtensionForProject()
{ {
if (TemplateFile.Project.Language == "VBNet") { if (TemplateFile.Project.Language == "VB") {
return ".vb"; return ".vb";
} }
return ".cs"; return ".cs";

2
src/AddIns/Misc/TextTemplating/Test/Src/TextTemplatingPreprocessorTests.cs

@ -91,7 +91,7 @@ namespace TextTemplating.Tests
public void PreprocessTemplate_TemplateFileInVisualBasicProject_OutputFileNameIsTemplateFileNameWithVisualBasicFileExtension() public void PreprocessTemplate_TemplateFileInVisualBasicProject_OutputFileNameIsTemplateFileNameWithVisualBasicFileExtension()
{ {
var templateFile = CreatePreprocessor(@"d:\MyProject\Test.tt"); var templateFile = CreatePreprocessor(@"d:\MyProject\Test.tt");
templateFile.TestableProject.SetLanguage("VBNet"); templateFile.TestableProject.SetLanguage("VB");
preprocessor.PreprocessTemplate(); preprocessor.PreprocessTemplate();
Assert.AreEqual(@"d:\MyProject\Test.vb", templatingHost.OutputFilePassedToPreprocessTemplate); Assert.AreEqual(@"d:\MyProject\Test.vb", templatingHost.OutputFilePassedToPreprocessTemplate);

2
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("PowerShell", new[] { ".ps1", ".psm1", ".psd1" }, "PowerShell.xshd");
hlm.RegisterHighlighting("PHP", new[] { ".php" }, "PHP-Mode.xshd"); hlm.RegisterHighlighting("PHP", new[] { ".php" }, "PHP-Mode.xshd");
hlm.RegisterHighlighting("TeX", new[] { ".tex" }, "Tex-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;" + hlm.RegisterHighlighting("XML", (".xml;.xsl;.xslt;.xsd;.manifest;.config;.addin;" +
".xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;" + ".xshd;.wxs;.wxi;.wxl;.proj;.csproj;.vbproj;.ilproj;" +
".booproj;.build;.xfrm;.targets;.xaml;.xpt;" + ".booproj;.build;.xfrm;.targets;.xaml;.xpt;" +

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/VBNET-Mode.xshd → src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/VB-Mode.xshd

@ -5,7 +5,7 @@
<!-- Converted to AvalonEdit format by Daniel Grunwald in 2010 --> <!-- Converted to AvalonEdit format by Daniel Grunwald in 2010 -->
<!-- Updated 2010 by Siegfried Oleg Pammer for VB.NET 9 and 10 --> <!-- Updated 2010 by Siegfried Oleg Pammer for VB.NET 9 and 10 -->
<!-- Updated 2011 by Siegfried Oleg Pammer for VB 11 CTP --> <!-- Updated 2011 by Siegfried Oleg Pammer for VB 11 CTP -->
<SyntaxDefinition name="VBNET" extensions=".vb" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008"> <SyntaxDefinition name="VB" extensions=".vb" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008">
<Color name="Comment" foreground="Green" exampleText="' comment" /> <Color name="Comment" foreground="Green" exampleText="' comment" />
<Color name="String" exampleText="text = &quot;Hello, World!&quot;" /> <Color name="String" exampleText="text = &quot;Hello, World!&quot;" />

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj

@ -389,7 +389,7 @@
<EmbeddedResource Include="Highlighting\Resources\Patch-Mode.xshd" /> <EmbeddedResource Include="Highlighting\Resources\Patch-Mode.xshd" />
<EmbeddedResource Include="Highlighting\Resources\PHP-Mode.xshd" /> <EmbeddedResource Include="Highlighting\Resources\PHP-Mode.xshd" />
<EmbeddedResource Include="Highlighting\Resources\Tex-Mode.xshd" /> <EmbeddedResource Include="Highlighting\Resources\Tex-Mode.xshd" />
<EmbeddedResource Include="Highlighting\Resources\VBNET-Mode.xshd" /> <EmbeddedResource Include="Highlighting\Resources\VB-Mode.xshd" />
<EmbeddedResource Include="Highlighting\Resources\XML-Mode.xshd" /> <EmbeddedResource Include="Highlighting\Resources\XML-Mode.xshd" />
<EmbeddedResource Include="Highlighting\Resources\ModeV1.xsd" /> <EmbeddedResource Include="Highlighting\Resources\ModeV1.xsd" />
<EmbeddedResource Include="Highlighting\Resources\ModeV2.xsd" /> <EmbeddedResource Include="Highlighting\Resources\ModeV2.xsd" />

8
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -41,7 +41,7 @@
<Doozer name="OptionPanel" class="ICSharpCode.SharpDevelop.OptionPanelDoozer"/> <Doozer name="OptionPanel" class="ICSharpCode.SharpDevelop.OptionPanelDoozer"/>
<Doozer name="DisplayBinding" class="ICSharpCode.SharpDevelop.Workbench.DisplayBindingDoozer"/> <Doozer name="DisplayBinding" class="ICSharpCode.SharpDevelop.Workbench.DisplayBindingDoozer"/>
<Doozer name="Pad" class="ICSharpCode.SharpDevelop.PadDoozer"/> <Doozer name="Pad" class="ICSharpCode.SharpDevelop.PadDoozer"/>
<Doozer name="ProjectBinding" class="ICSharpCode.SharpDevelop.ProjectBindingDoozer"/> <Doozer name="ProjectBinding" class="ICSharpCode.SharpDevelop.Project.ProjectBindingDoozer"/>
<Doozer name="LanguageBinding" class="ICSharpCode.SharpDevelop.LanguageBindingDoozer"/> <Doozer name="LanguageBinding" class="ICSharpCode.SharpDevelop.LanguageBindingDoozer"/>
<Doozer name="TextEditorExtension" class="ICSharpCode.SharpDevelop.Editor.TextEditorExtensionDoozer"/> <Doozer name="TextEditorExtension" class="ICSharpCode.SharpDevelop.Editor.TextEditorExtensionDoozer"/>
<Doozer name="BrowserSchemeExtension" class="ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionDoozer"/> <Doozer name="BrowserSchemeExtension" class="ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionDoozer"/>
@ -1922,8 +1922,8 @@
class = "ICSharpCode.SharpDevelop.Commands.CSharpConvertBuffer"/> class = "ICSharpCode.SharpDevelop.Commands.CSharpConvertBuffer"/>
</Condition> </Condition>
<Condition name="ActiveContentExtension" activeextension=".cs" action = "Disable"> <Condition name="ActiveContentExtension" activeextension=".cs" action = "Disable">
<MenuItem id = "VBNet" <MenuItem id = "VB"
label = "VB.NET" label = "Visual Basic"
class = "ICSharpCode.SharpDevelop.Commands.VBConvertBuffer"/> class = "ICSharpCode.SharpDevelop.Commands.VBConvertBuffer"/>
</Condition> </Condition>
</MenuItem> </MenuItem>
@ -2447,7 +2447,7 @@
</Not> </Not>
<Or> <!-- and either a C# or VB project --> <Or> <!-- and either a C# or VB project -->
<Condition name = "ProjectActive" activeproject="C#" /> <Condition name = "ProjectActive" activeproject="C#" />
<Condition name = "ProjectActive" activeproject="VBNet" /> <Condition name = "ProjectActive" activeproject="VB" />
</Or> </Or>
</And> </And>
<Class id="ConvertToPortableLibraryBehavior" class="ICSharpCode.SharpDevelop.Project.PortableLibrary.ConvertToPortableLibraryProjectBehavior" /> <Class id="ConvertToPortableLibraryBehavior" class="ICSharpCode.SharpDevelop.Project.PortableLibrary.ConvertToPortableLibraryProjectBehavior" />

7
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -197,10 +197,13 @@
<Compile Include="Project\Configuration\IConfigurable.cs" /> <Compile Include="Project\Configuration\IConfigurable.cs" />
<Compile Include="Project\Configuration\ConfigurationMapping.cs" /> <Compile Include="Project\Configuration\ConfigurationMapping.cs" />
<Compile Include="Project\Configuration\IConfigurationOrPlatformNameCollection.cs" /> <Compile Include="Project\Configuration\IConfigurationOrPlatformNameCollection.cs" />
<Compile Include="Project\IProjectBinding.cs" />
<Compile Include="Project\IProjectService.cs" /> <Compile Include="Project\IProjectService.cs" />
<Compile Include="Project\ISolution.cs" /> <Compile Include="Project\ISolution.cs" />
<Compile Include="Project\ISolutionFolder.cs" /> <Compile Include="Project\ISolutionFolder.cs" />
<Compile Include="Project\ISolutionItem.cs" /> <Compile Include="Project\ISolutionItem.cs" />
<Compile Include="Project\ProjectBindingDescriptor.cs" />
<Compile Include="Project\ProjectBindingDoozer.cs" />
<Compile Include="Project\ProjectInformation.cs" /> <Compile Include="Project\ProjectInformation.cs" />
<Compile Include="Project\Project_TypeGuids.cs" /> <Compile Include="Project\Project_TypeGuids.cs" />
<Compile Include="Project\SolutionEventArgs.cs" /> <Compile Include="Project\SolutionEventArgs.cs" />
@ -592,10 +595,7 @@
<Compile Include="Src\Services\Tasks\Task.cs" /> <Compile Include="Src\Services\Tasks\Task.cs" />
<Compile Include="Src\Services\Tasks\TaskService.cs" /> <Compile Include="Src\Services\Tasks\TaskService.cs" />
<Compile Include="Src\Internal\ExternalTool\ToolLoader.cs" /> <Compile Include="Src\Internal\ExternalTool\ToolLoader.cs" />
<Compile Include="Src\Services\ProjectBinding\IProjectBinding.cs" />
<Compile Include="Src\Services\ProjectBinding\ProjectBindingService.cs" />
<Compile Include="Src\Internal\ConditionEvaluators\CombineOpenEvaluator.cs" /> <Compile Include="Src\Internal\ConditionEvaluators\CombineOpenEvaluator.cs" />
<Compile Include="Src\Services\ProjectBinding\ProjectBindingDoozer.cs" />
<Compile Include="Src\Services\Language\UILanguage.cs" /> <Compile Include="Src\Services\Language\UILanguage.cs" />
<Compile Include="Src\Internal\ConditionEvaluators\ProjectActiveEvaluator.cs" /> <Compile Include="Src\Internal\ConditionEvaluators\ProjectActiveEvaluator.cs" />
<Compile Include="Src\Services\AmbienceService\AmbienceService.cs" /> <Compile Include="Src\Services\AmbienceService\AmbienceService.cs" />
@ -725,7 +725,6 @@
<Compile Include="Src\Gui\Pads\ProjectBrowser\Commands\DefaultFileNodeCommands.cs" /> <Compile Include="Src\Gui\Pads\ProjectBrowser\Commands\DefaultFileNodeCommands.cs" />
<Compile Include="Src\Gui\Dialogs\ProjectOptionsView.cs" /> <Compile Include="Src\Gui\Dialogs\ProjectOptionsView.cs" />
<Compile Include="Src\Gui\Pads\ProjectBrowser\Commands\ToolbarCommands.cs" /> <Compile Include="Src\Gui\Pads\ProjectBrowser\Commands\ToolbarCommands.cs" />
<Compile Include="Src\Services\ProjectBinding\ProjectBindingDescriptor.cs" />
<Compile Include="Src\Gui\XmlForms\Lib\IPropertyValueCreator.cs" /> <Compile Include="Src\Gui\XmlForms\Lib\IPropertyValueCreator.cs" />
<Compile Include="Src\Gui\XmlForms\Lib\IStringValueFilter.cs" /> <Compile Include="Src\Gui\XmlForms\Lib\IStringValueFilter.cs" />
<Compile Include="Src\Gui\XmlForms\Lib\StringWrapper.cs" /> <Compile Include="Src\Gui\XmlForms\Lib\StringWrapper.cs" />

21
src/Main/Base/Project/Src/Services/ProjectBinding/IProjectBinding.cs → src/Main/Base/Project/Project/IProjectBinding.cs

@ -6,18 +6,17 @@ using System;
namespace ICSharpCode.SharpDevelop.Project namespace ICSharpCode.SharpDevelop.Project
{ {
/// <summary> /// <summary>
/// The <code>IProjectBinding</code> interface is the base interface /// The <c>IProjectBinding</c> interface is implemented by language binding AddIns
/// of all project bindings avaiable. /// in order to support project creation/loading.
/// </summary> /// </summary>
/// <seealso cref="ProjectBindingDoozer"/>
public interface IProjectBinding public interface IProjectBinding
{ {
/// <returns> /// <summary>
/// The language for this project binding. /// Loads a project from disk.
/// </returns> /// </summary>
string Language { /// <exception cref="ProjectLoadException">Invalid project file (or other error)</exception>
get; /// <exception cref="System.IO.IOException">Error reading from the project file</exception>
}
IProject LoadProject(ProjectLoadInformation info); IProject LoadProject(ProjectLoadInformation info);
/// <summary> /// <summary>
@ -25,10 +24,12 @@ namespace ICSharpCode.SharpDevelop.Project
/// Each project binding must provide a representation of the project /// Each project binding must provide a representation of the project
/// it 'controls'. /// it 'controls'.
/// </summary> /// </summary>
/// <exception cref="ProjectLoadException">Invalid project file (or other error)</exception>
/// <exception cref="System.IO.IOException">Error writing new project to disk</exception>
IProject CreateProject(ProjectCreateInformation info); IProject CreateProject(ProjectCreateInformation info);
/// <summary> /// <summary>
/// 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 /// itself or it relies on the default logic of creating MissingProject project
/// </summary> /// </summary>
bool HandlingMissingProject { get; } bool HandlingMissingProject { get; }

17
src/Main/Base/Project/Project/IProjectService.cs

@ -142,6 +142,23 @@ namespace ICSharpCode.SharpDevelop.Project
event EventHandler<ProjectItemEventArgs> ProjectItemAdded; event EventHandler<ProjectItemEventArgs> ProjectItemAdded;
event EventHandler<ProjectItemEventArgs> ProjectItemRemoved; event EventHandler<ProjectItemEventArgs> ProjectItemRemoved;
/// <summary>
/// Gets the list of registered project bindings.
/// </summary>
IReadOnlyList<ProjectBindingDescriptor> ProjectBindings { get; }
/// <summary>
/// Loads a project from disk without opening it in the IDE.
/// </summary>
/// <exception cref="ProjectLoadException">Invalid project file (or other error)</exception>
/// <exception cref="System.IO.IOException">Error reading from the project file</exception>
/// <remarks>
/// 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.
/// </remarks>
IProject LoadProject(ProjectLoadInformation info);
} }
public interface IProjectServiceRaiseEvents public interface IProjectServiceRaiseEvents

2
src/Main/Base/Project/Project/ISolutionFolder.cs

@ -48,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// </summary> /// </summary>
/// <param name="fileName">Path to the project file</param> /// <param name="fileName">Path to the project file</param>
/// <exception cref="ProjectLoadException">The specified file is not a valid project file</exception> /// <exception cref="ProjectLoadException">The specified file is not a valid project file</exception>
/// <exception cref="IOException">Error reading from the specified project file</exception> /// <exception cref="System.IO.IOException">Error reading from the specified project file</exception>
IProject AddExistingProject(FileName fileName); IProject AddExistingProject(FileName fileName);
/* if (solutionFolderNode.Solution.SolutionFolders.Any( /* if (solutionFolderNode.Solution.SolutionFolders.Any(

2
src/Main/Base/Project/Project/PortableLibrary/PortableLibraryProjectBehavior.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
public override IEnumerable<TargetFramework> GetAvailableTargetFrameworks() public override IEnumerable<TargetFramework> GetAvailableTargetFrameworks()
{ {
TargetFramework[] portableTargets = { this.CurrentTargetFramework, new PickPortableTargetFramework() }; 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 // we support converting back to regular projects
return base.GetAvailableTargetFrameworks().Union(portableTargets); return base.GetAvailableTargetFrameworks().Union(portableTargets);
} else { } else {

91
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
{
/// <summary>
/// Represents the registration of a project binding with the project service.
/// </summary>
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"]);
}
}
}

4
src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingDoozer.cs → src/Main/Base/Project/Project/ProjectBindingDoozer.cs

@ -5,7 +5,7 @@ using System;
using System.Collections; using System.Collections;
using ICSharpCode.Core; using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop namespace ICSharpCode.SharpDevelop.Project
{ {
/// <summary> /// <summary>
/// Creates ProjectBindingDescriptor objects for the project service. /// Creates ProjectBindingDescriptor objects for the project service.
@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop
/// <attribute name="class" use="required"> /// <attribute name="class" use="required">
/// Name of the IProjectBinding class. /// Name of the IProjectBinding class.
/// </attribute> /// </attribute>
/// <usage>Only in /SharpDevelop/Workbench/ProjectBinding</usage> /// <usage>Only in /SharpDevelop/Workbench/ProjectBindings</usage>
/// <returns> /// <returns>
/// A ProjectBindingDescriptor object that wraps the IProjectBinding object. /// A ProjectBindingDescriptor object that wraps the IProjectBinding object.
/// </returns> /// </returns>

2
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 SolutionFolder = Guid.Parse("{2150E333-8FDC-42A3-9474-1A3956D46DE8}");
public static readonly Guid CSharp = Guid.Parse("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"); 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 CPlusPlus = Guid.Parse("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}");
public static readonly Guid WebApplication = Guid.Parse("{349C5851-65DF-11DA-9384-00065B846F21}"); public static readonly Guid WebApplication = Guid.Parse("{349C5851-65DF-11DA-9384-00065B846F21}");

2
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) public void MapProjectLanguage(string language)
{ {
if (language == "VBNet") { if (language == "VB") {
Language = "VB"; Language = "VB";
} else { } else {
Language = "CS"; Language = "CS";

3
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/WebReference.cs

@ -7,6 +7,7 @@ using System.CodeDom.Compiler;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Web.Services.Description; using System.Web.Services.Description;
using System.Web.Services.Discovery; using System.Web.Services.Discovery;
using System.Xml.Schema; using System.Xml.Schema;
@ -301,7 +302,7 @@ namespace ICSharpCode.SharpDevelop.Gui
string GetProxyFileNameExtension(string language) string GetProxyFileNameExtension(string language)
{ {
ProjectBindingDescriptor binding = ProjectBindingService.GetCodonPerLanguageName(language); ProjectBindingDescriptor binding = SD.ProjectService.ProjectBindings.FirstOrDefault(b => b.Language == language);
if (binding != null) { if (binding != null) {
string[] extensions = binding.CodeFileExtensions; string[] extensions = binding.CodeFileExtensions;
if (extensions.Length > 0) { if (extensions.Length > 0) {

2
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<FileFilterDescriptor> fileFilters) int GetFileFilterIndex(IProject project, IReadOnlyList<FileFilterDescriptor> fileFilters)
{ {
if (project != null) { if (project != null) {
ProjectBindingDescriptor projectCodon = ProjectBindingService.GetCodonPerLanguageName(project.Language); ProjectBindingDescriptor projectCodon = SD.ProjectService.ProjectBindings.FirstOrDefault(b => b.Language == project.Language);
if (projectCodon != null) { if (projectCodon != null) {
for (int i = 0; i < fileFilters.Count; ++i) { for (int i = 0; i < fileFilters.Count; ++i) {
for (int j = 0; j < projectCodon.CodeFileExtensions.Length; ++j) { for (int j = 0; j < projectCodon.CodeFileExtensions.Length; ++j) {

12
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; AbstractProjectBrowserTreeNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode;
ISolutionFolderNode solutionFolderNode = node as ISolutionFolderNode; ISolutionFolderNode solutionFolderNode = node as ISolutionFolderNode;
if (node != null) { if (solutionFolderNode != null) {
using (OpenFileDialog fdiag = new OpenFileDialog()) { using (OpenFileDialog fdiag = new OpenFileDialog()) {
fdiag.AddExtension = true; fdiag.AddExtension = true;
fdiag.Filter = ProjectService.GetAllProjectsFilter(this, false); fdiag.Filter = ProjectService.GetAllProjectsFilter(this, false);
@ -64,8 +64,14 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
fdiag.CheckFileExists = true; fdiag.CheckFileExists = true;
fdiag.InitialDirectory = AddNewProjectToSolution.GetInitialDirectorySuggestion(solutionFolderNode.Folder); fdiag.InitialDirectory = AddNewProjectToSolution.GetInitialDirectorySuggestion(solutionFolderNode.Folder);
if (fdiag.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) { if (fdiag.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) {
foreach (string fileName in fdiag.FileNames) { try {
solutionFolderNode.Folder.AddExistingProject(FileName.Create(fileName)); 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(); ProjectService.SaveSolution();
} }

4
src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs

@ -17,6 +17,7 @@ using Microsoft.Build.Construction;
namespace ICSharpCode.SharpDevelop.Project.Converter namespace ICSharpCode.SharpDevelop.Project.Converter
{ {
/*
/// <summary> /// <summary>
/// Converts projects from one language to another, for example C# &lt;-&gt; VB /// Converts projects from one language to another, for example C# &lt;-&gt; VB
/// </summary> /// </summary>
@ -206,6 +207,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
} }
} }
} }
*/
/* /*
public abstract class NRefactoryLanguageConverter : LanguageConverter public abstract class NRefactoryLanguageConverter : LanguageConverter
@ -271,6 +273,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
} }
*/ */
/*
/// <summary> /// <summary>
/// Exception used when converting a file fails. /// Exception used when converting a file fails.
/// </summary> /// </summary>
@ -293,4 +296,5 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
{ {
} }
} }
*/
} }

6
src/Main/Base/Project/Src/Project/MSBuildFileProject.cs

@ -29,9 +29,9 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
} }
} catch (XmlException) { } catch (XmlException ex) {
} catch (IOException) { throw new ProjectLoadException(ex.Message, ex);
} } // IOException can also occur, but doesn't need to be converted to ProjectLoadException
} }
public override SolutionFormatVersion MinimumSolutionVersion { public override SolutionFormatVersion MinimumSolutionVersion {

5
src/Main/Base/Project/Src/Project/UnknownProject.cs

@ -27,13 +27,10 @@ namespace ICSharpCode.SharpDevelop.Project
MessageService.ShowError("Error loading " + this.FileName + ":\n" + warningText); 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(information)
{ {
this.warningText = warningText; this.warningText = warningText;
if (displayWarningToUser) {
ShowWarningMessageBox();
}
} }
public UnknownProject(ProjectLoadInformation information) public UnknownProject(ProjectLoadInformation information)

71
src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingDescriptor.cs

@ -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;
}
}
}

131
src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingService.cs

@ -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<ProjectBindingDescriptor> bindings;
static ProjectBindingService()
{
bindings = AddInTree.BuildItems<ProjectBindingDescriptor>("/SharpDevelop/Workbench/ProjectBindings", null, false);
}
/// <summary>
/// Overwrites the list of used bindings. Used for unit tests.
/// </summary>
public static void SetBindings(IList<ProjectBindingDescriptor> 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;
}
}
}

2
src/Main/Base/Project/Templates/ITemplateService.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Templates
/// <param name="fileSystem">File system used to open referenced input files. /// <param name="fileSystem">File system used to open referenced input files.
/// This should usually be a <see cref="ReadOnlyChrootFileSystem"/> so that the file template /// This should usually be a <see cref="ReadOnlyChrootFileSystem"/> so that the file template
/// can use relative paths. /// 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.
/// </param> /// </param>
/// <returns><see cref="FileTemplate"/> or <see cref="ProjectTemplate"/> instance.</returns> /// <returns><see cref="FileTemplate"/> or <see cref="ProjectTemplate"/> instance.</returns>
/// <exception cref="TemplateLoadException">Invalid file format</exception> /// <exception cref="TemplateLoadException">Invalid file format</exception>

2
src/Main/Base/Project/Util/SharpDevelopExtensions.cs

@ -512,7 +512,7 @@ namespace ICSharpCode.SharpDevelop
try { try {
return SD.AssemblyParserService.GetAssemblyModel(assembly.GetReferenceAssemblyLocation()); return SD.AssemblyParserService.GetAssemblyModel(assembly.GetReferenceAssemblyLocation());
} catch (Exception ex) { } catch (Exception) {
// TODO: use the exact exception types that GetAssemblyModel() throws (+document them) // TODO: use the exact exception types that GetAssemblyModel() throws (+document them)
// silently ignore errors when loading the assembly // silently ignore errors when loading the assembly
return null; return null;

2
src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj

@ -136,7 +136,7 @@
<Compile Include="WebReferences\ValidWebReferenceNamespaceTests.cs" /> <Compile Include="WebReferences\ValidWebReferenceNamespaceTests.cs" />
<Compile Include="WebReferences\WebReferenceTests.cs" /> <Compile Include="WebReferences\WebReferenceTests.cs" />
<Compile Include="WebReferences\ProjectHasExistingWebRefFolderTest.cs" /> <Compile Include="WebReferences\ProjectHasExistingWebRefFolderTest.cs" />
<Compile Include="WebReferences\VBNetWebReferenceTest.cs" /> <Compile Include="WebReferences\VBWebReferenceTest.cs" />
<Compile Include="WebReferences\WebReferenceTestHelper.cs" /> <Compile Include="WebReferences\WebReferenceTestHelper.cs" />
<Compile Include="WebReferences\UnsupportedLanguageTest.cs" /> <Compile Include="WebReferences\UnsupportedLanguageTest.cs" />
<Compile Include="WebReferences\WebReferenceFolderAlreadyExistsTest.cs" /> <Compile Include="WebReferences\WebReferenceFolderAlreadyExistsTest.cs" />

4
src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs

@ -39,7 +39,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
void CreateProjectWithVisualBasicMSBuildProject() void CreateProjectWithVisualBasicMSBuildProject()
{ {
msbuildProject = WebReferenceTestHelper.CreateTestProject("VBNet"); msbuildProject = WebReferenceTestHelper.CreateTestProject("VB");
project = new ProjectWithServiceReferences(msbuildProject); project = new ProjectWithServiceReferences(msbuildProject);
} }
@ -311,7 +311,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{ {
CreateProjectWithVisualBasicMSBuildProject(); CreateProjectWithVisualBasicMSBuildProject();
Assert.AreEqual("VBNet", project.Language); Assert.AreEqual("VB", project.Language);
} }
[Test] [Test]

2
src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs

@ -93,7 +93,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
void UseVisualBasicProject() void UseVisualBasicProject()
{ {
SetProjectLanguage("VBNet"); SetProjectLanguage("VB");
} }
void SetProjectLanguage(string language) void SetProjectLanguage(string language)

4
src/Main/Base/Test/WebReferences/VBNetWebReferenceTest.cs → src/Main/Base/Test/WebReferences/VBWebReferenceTest.cs

@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
/// a vb project. /// a vb project.
/// </summary> /// </summary>
[TestFixture] [TestFixture]
public class VBNetWebReferenceTest : SDTestFixtureBase public class VBWebReferenceTest : SDTestFixtureBase
{ {
Gui.WebReference webReference; Gui.WebReference webReference;
DiscoveryClientProtocol protocol; DiscoveryClientProtocol protocol;
@ -32,7 +32,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
public override void FixtureSetUp() public override void FixtureSetUp()
{ {
base.FixtureSetUp(); base.FixtureSetUp();
project = WebReferenceTestHelper.CreateTestProject("VBNet"); project = WebReferenceTestHelper.CreateTestProject("VB");
protocol = new DiscoveryClientProtocol(); protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference(); DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();

22
src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs

@ -48,20 +48,14 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
public static void InitializeProjectBindings() public static void InitializeProjectBindings()
{ {
Properties prop = new Properties(); SD.Services.AddStrictMockService<IProjectService>();
prop["id"] = "C#"; var projectBinding = MockRepository.GenerateStrictMock<IProjectBinding>();
prop["supportedextensions"] = ".cs";
prop["projectfileextension"] = ".csproj"; ProjectBindingDescriptor[] descriptors = {
Codon codon1 = new Codon(null, "ProjectBinding", prop, new Condition[0]); new ProjectBindingDescriptor(projectBinding, "C#", ".csproj", ProjectTypeGuids.CSharp, new[] { ".cs" }),
prop = new Properties(); new ProjectBindingDescriptor(projectBinding, "VB", ".vbproj", ProjectTypeGuids.VB, new[] { ".vb" }),
prop["id"] = "VBNet"; };
prop["supportedextensions"] = ".vb"; SD.ProjectService.Stub(p => p.ProjectBindings).Return(descriptors);
prop["projectfileextension"] = ".vbproj";
Codon codon2 = new Codon(null, "ProjectBinding", prop, new Condition[0]);
ProjectBindingService.SetBindings(new ProjectBindingDescriptor[] {
new ProjectBindingDescriptor(codon1),
new ProjectBindingDescriptor(codon2)
});
} }
public static ProjectItem GetProjectItem(List<ProjectItem> items, string include, ItemType itemType) { public static ProjectItem GetProjectItem(List<ProjectItem> items, string include, ItemType itemType) {

42
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) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq;
using System.Windows.Input; using System.Windows.Input;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
@ -19,6 +21,7 @@ namespace ICSharpCode.SharpDevelop.Project
{ {
allSolutions = new NullSafeSimpleModelCollection<ISolution>(); allSolutions = new NullSafeSimpleModelCollection<ISolution>();
allProjects = allSolutions.SelectMany(s => s.Projects); allProjects = allSolutions.SelectMany(s => s.Projects);
projectBindings = SD.AddInTree.BuildItems<ProjectBindingDescriptor>("/SharpDevelop/Workbench/ProjectBindings", null);
SD.GetFutureService<IWorkbench>().ContinueWith(t => t.Result.ActiveViewContentChanged += ActiveViewContentChanged); SD.GetFutureService<IWorkbench>().ContinueWith(t => t.Result.ActiveViewContentChanged += ActiveViewContentChanged);
@ -364,5 +367,44 @@ namespace ICSharpCode.SharpDevelop.Project
ProjectItemRemoved(this, e); ProjectItemRemoved(this, e);
} }
#endregion #endregion
#region Project Bindings
readonly IReadOnlyList<ProjectBindingDescriptor> projectBindings;
public IReadOnlyList<ProjectBindingDescriptor> 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
} }
} }

6
src/Main/SharpDevelop/Project/SolutionFolder.cs

@ -132,11 +132,7 @@ namespace ICSharpCode.SharpDevelop.Project
public IProject AddExistingProject(FileName fileName) public IProject AddExistingProject(FileName fileName)
{ {
ProjectLoadInformation loadInfo = new ProjectLoadInformation(parentSolution, fileName, fileName.GetFileNameWithoutExtension()); ProjectLoadInformation loadInfo = new ProjectLoadInformation(parentSolution, fileName, fileName.GetFileNameWithoutExtension());
var descriptor = ProjectBindingService.GetCodonPerProjectFile(fileName); IProject project = SD.ProjectService.LoadProject(loadInfo);
if (descriptor != null) {
loadInfo.TypeGuid = descriptor.Guid;
}
IProject project = ProjectBindingService.LoadProject(loadInfo);
Debug.Assert(project.IdGuid != Guid.Empty); Debug.Assert(project.IdGuid != Guid.Empty);
this.Items.Add(project); this.Items.Add(project);
project.ProjectLoaded(); project.ProjectLoaded();

20
src/Main/SharpDevelop/Project/SolutionLoader.cs

@ -139,7 +139,7 @@ namespace ICSharpCode.SharpDevelop.Project
projectInfo.ActiveProjectConfiguration = projectInfo.ConfigurationMapping.GetProjectConfiguration(solution.ActiveConfiguration); projectInfo.ActiveProjectConfiguration = projectInfo.ConfigurationMapping.GetProjectConfiguration(solution.ActiveConfiguration);
progress.TaskName = "Loading " + projectInfo.ProjectName; progress.TaskName = "Loading " + projectInfo.ProjectName;
using (projectInfo.ProgressMonitor = progress.CreateSubTask(1.0 / projectCount)) { using (projectInfo.ProgressMonitor = progress.CreateSubTask(1.0 / projectCount)) {
solutionItem = ProjectBindingService.LoadProject(projectInfo); solutionItem = LoadProjectWithErrorHandling(projectInfo);
} }
projectsLoaded++; projectsLoaded++;
progress.Progress = (double)projectsLoaded / projectCount; 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 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 #endregion
#region ReadFormatHeader #region ReadFormatHeader

11
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. /// Creates a project descriptor for the project node specified by the xml element.
/// </summary> /// </summary>
/// <param name="element">The &lt;Project&gt; node of the xml template file.</param> /// <param name="element">The &lt;Project&gt; node of the xml template file.</param>
/// <param name="hintPath">The directory on which relative paths (e.g. for referenced files) are based.</param> /// <param name="fileSystem">The file system from which referenced files are loaded. Use a ChrootFileSystem to specify the base directory for relative paths.</param>
public ProjectDescriptor(XmlElement element, IReadOnlyFileSystem fileSystem) public ProjectDescriptor(XmlElement element, IReadOnlyFileSystem fileSystem)
{ {
if (element == null) if (element == null)
@ -276,7 +276,7 @@ namespace ICSharpCode.SharpDevelop.Templates
try try
{ {
string language = string.IsNullOrEmpty(languageName) ? defaultLanguage : languageName; 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; IProjectBinding languageinfo = (descriptor != null) ? descriptor.Binding : null;
if (languageinfo == null) { if (languageinfo == null) {
@ -289,13 +289,12 @@ namespace ICSharpCode.SharpDevelop.Templates
DirectoryName projectBasePath = projectCreateOptions.ProjectBasePath; DirectoryName projectBasePath = projectCreateOptions.ProjectBasePath;
string newProjectName = StringParser.Parse(name, new StringTagPair("ProjectName", projectCreateOptions.ProjectName)); string newProjectName = StringParser.Parse(name, new StringTagPair("ProjectName", projectCreateOptions.ProjectName));
Directory.CreateDirectory(projectBasePath); Directory.CreateDirectory(projectBasePath);
FileName projectLocation = FileName.Create(Path.Combine(projectBasePath, FileName projectLocation = projectBasePath.CombineFile(newProjectName + descriptor.ProjectFileExtension);
newProjectName + ProjectBindingService.GetProjectFileExtension(language)));
ProjectCreateInformation info = new ProjectCreateInformation(parentSolution, projectLocation); ProjectCreateInformation info = new ProjectCreateInformation(parentSolution, projectLocation);
StringBuilder standardNamespace = new StringBuilder(); StringBuilder standardNamespace = new StringBuilder();
// filter 'illegal' chars from standard namespace // filter 'illegal' chars from standard namespace
if (newProjectName != null && newProjectName.Length > 0) { if (!string.IsNullOrEmpty(newProjectName)) {
char ch = '.'; char ch = '.';
for (int i = 0; i < newProjectName.Length; ++i) { for (int i = 0; i < newProjectName.Length; ++i) {
if (ch == '.') { if (ch == '.') {
@ -318,7 +317,7 @@ namespace ICSharpCode.SharpDevelop.Templates
} }
} }
info.TypeGuid = descriptor.Guid; info.TypeGuid = descriptor.TypeGuid;
info.RootNamespace = standardNamespace.ToString(); info.RootNamespace = standardNamespace.ToString();
info.ProjectName = newProjectName; info.ProjectName = newProjectName;
if (!string.IsNullOrEmpty(defaultPlatform)) if (!string.IsNullOrEmpty(defaultPlatform))

Loading…
Cancel
Save