From 1cfbd49b3627995537be1eb9693723561e4cdc1d Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 8 Aug 2007 20:07:47 +0000 Subject: [PATCH] Fixed forum-18320: exception when converting VB code using named arguments to Boo. Add ShellExecuteDisplayBinding: allows to launch files using the default program associated with them in SharpDevelop's "Open With" menu. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2649 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- AddIns/ICSharpCode.SharpDevelop.addin | 4 ++ .../Project/ConvertVisitorExpressions.cs | 6 +++ .../Project/ConvertVisitorGlobal.cs | 7 +--- .../Project/ICSharpCode.SharpDevelop.csproj | 1 + .../ShellExecuteDisplayBinding.cs | 37 +++++++++++++++++++ 5 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 src/Main/Base/Project/Src/Services/DisplayBinding/ShellExecuteDisplayBinding.cs diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index 0072d1e66d..6537a384b1 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -1654,6 +1654,10 @@ insertafter = "Browser" title = "Text editor" class = "ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.TextEditorDisplayBinding" /> + diff --git a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs index 64f7affb64..213c2bfe25 100644 --- a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs +++ b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs @@ -122,6 +122,12 @@ namespace NRefactoryToBooConverter return null; } + public object VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, object data) + { + AddError(namedArgumentExpression, "Named arguments are not supported in boo. (argument name was " + namedArgumentExpression.Name + ")"); + return namedArgumentExpression.Expression.AcceptVisitor(this, data); + } + public object VisitIdentifierExpression(IdentifierExpression identifierExpression, object data) { return new B.ReferenceExpression(GetLexicalInfo(identifierExpression), identifierExpression.Identifier); diff --git a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorGlobal.cs b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorGlobal.cs index c6cb91236f..f9f82d623b 100644 --- a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorGlobal.cs +++ b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorGlobal.cs @@ -180,18 +180,13 @@ namespace NRefactoryToBooConverter return null; } - // Some classes are handled by their parent (NamedArgumentExpression by Attribute etc.) + // Some classes are handled by their parent (TemplateDefinition by TypeDeclaration/MethodDeclaration etc.) // so we don't need to implement Visit for them. public object VisitTemplateDefinition(TemplateDefinition templateDefinition, object data) { throw new ApplicationException("Visited TemplateDefinition."); } - public object VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, object data) - { - throw new ApplicationException("Visited NamedArgumentExpression."); - } - public object VisitInterfaceImplementation(InterfaceImplementation interfaceImplementation, object data) { throw new ApplicationException("Visited InterfaceImplementation."); diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index ef3fa39c2f..7b131db8ab 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -89,6 +89,7 @@ + diff --git a/src/Main/Base/Project/Src/Services/DisplayBinding/ShellExecuteDisplayBinding.cs b/src/Main/Base/Project/Src/Services/DisplayBinding/ShellExecuteDisplayBinding.cs new file mode 100644 index 0000000000..374c4c7da5 --- /dev/null +++ b/src/Main/Base/Project/Src/Services/DisplayBinding/ShellExecuteDisplayBinding.cs @@ -0,0 +1,37 @@ +// +// +// +// +// $Revision$ +// + +using System; +using ICSharpCode.Core; +using System.Diagnostics; + +namespace ICSharpCode.SharpDevelop +{ + /// + /// Opens files with the default Windows application for them. + /// + public class ShellExecuteDisplayBinding : IDisplayBinding + { + public bool CanCreateContentForFile(string fileName) + { + return !FileUtility.IsUrl(fileName); + } + + public ICSharpCode.SharpDevelop.Gui.IViewContent CreateContentForFile(OpenedFile file) + { + if (file.IsDirty) { + // TODO: warn user that the file must be saved + } + try { + Process.Start(file.FileName); + } catch (Exception ex) { + MessageService.ShowError(ex.Message); + } + return null; + } + } +}