From 4b0ac9160e45aedc96b2574247ab431aa32ca7ca Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 9 Oct 2005 19:52:34 +0000 Subject: [PATCH] Add "Convert buffer to Boo" command to BooBinding. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@553 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Boo/BooBinding/Project/BooBinding.addin | 20 +++++ .../Boo/BooBinding/Project/BooBinding.csproj | 14 ++++ .../BooBinding/Project/Src/ConvertBuffer.cs | 73 +++++++++++++++++++ .../Project/NRefactoryToBooConverter.csproj | 13 +++- .../AST/General/Expressions/Expression.cs | 7 +- 5 files changed, 122 insertions(+), 5 deletions(-) create mode 100644 src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertBuffer.cs diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin index 41b65901a5..12730e83ab 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin @@ -75,4 +75,24 @@ projectfileextension = ".booproj" class = "Grunwald.BooBinding.BooLanguageBinding" /> + + + + + + + + + + + + + + + + diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj index a522236160..13839162f5 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj @@ -66,6 +66,7 @@ + @@ -84,14 +85,27 @@ {2748AD25-9C63-4E12-877B-4DCE96FBED54} ICSharpCode.SharpDevelop + False {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} ICSharpCode.Core + False + + + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} + ICSharpCode.Core + False {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} ICSharpCode.TextEditor + False + + + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} + NRefactoryToBooConverter + True diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertBuffer.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertBuffer.cs new file mode 100644 index 0000000000..5fb43a9e9f --- /dev/null +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertBuffer.cs @@ -0,0 +1,73 @@ +// +// 2002-2005 AlphaSierraPapa +// GNU General Public License +// +// $Revision$ +// + +using System; +using System.Collections.Generic; +using System.IO; + +using Boo.Lang.Compiler; +using Boo.Lang.Compiler.Ast; +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Gui; +using ICSharpCode.SharpDevelop.Project; +using ICSharpCode.Core; +using System.Text; + +using ICSharpCode.NRefactory.PrettyPrinter; +using ICSharpCode.NRefactory.Parser; +using NRefactoryToBooConverter; + +namespace Grunwald.BooBinding +{ + public class ConvertBuffer : AbstractMenuCommand + { + ConverterSettings ApplySettings(string fileName, CompilerErrorCollection errors, CompilerWarningCollection warnings) + { + ConverterSettings settings = new ConverterSettings(fileName, errors, warnings); + settings.SimplifyTypeNames = true; + return settings; + } + + public override void Run() + { + IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow; + + if (window != null && window.ViewContent is IEditable) { + StringBuilder errorBuilder = new StringBuilder(); + + CompilerErrorCollection errors = new CompilerErrorCollection(); + CompilerWarningCollection warnings = new CompilerWarningCollection(); + Module module; + IList specials; + CompileUnit compileUnit = new CompileUnit(); + using (StringReader r = new StringReader(((IEditable)window.ViewContent).Text)) { + module = Parser.ParseModule(compileUnit, r, ApplySettings(window.ViewContent.FileName, errors, warnings), out specials); + } + if (errors.Count > 0) { + foreach (CompilerError error in errors) { + errorBuilder.AppendLine(error.ToString()); + } + } else { + if (warnings.Count > 0) { + foreach (CompilerWarning warning in warnings) { + errorBuilder.AppendLine(warning.ToString()); + } + } + using (StringWriter w = new StringWriter()) { + BooPrinterVisitorWithComments printer = new BooPrinterVisitorWithComments(specials, w); + printer.OnModule(module); + printer.Finish(); + FileService.NewFile("Generated.boo", "Boo", w.ToString()); + } + } + if (errorBuilder.Length > 0) { + MessageService.ShowMessage(errorBuilder.ToString()); + } + } + } + } +} diff --git a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/NRefactoryToBooConverter.csproj b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/NRefactoryToBooConverter.csproj index 70ed134e98..273ceddbd1 100644 --- a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/NRefactoryToBooConverter.csproj +++ b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/NRefactoryToBooConverter.csproj @@ -24,14 +24,12 @@ ..\..\RequiredLibraries\Boo.Lang.Compiler.dll False + True ..\..\RequiredLibraries\Boo.Lang.dll False - - - ..\..\..\..\..\..\bin\ICSharpCode.NRefactory.dll - False + True @@ -51,5 +49,12 @@ + + + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} + ICSharpCode.Core + False + + \ No newline at end of file diff --git a/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/Expression.cs b/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/Expression.cs index b2fa1aafc7..7ff39bd3d6 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/Expression.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/Expression.cs @@ -42,8 +42,13 @@ namespace ICSharpCode.NRefactory.Parser.AST return new PrimitiveExpression(newVal, newVal.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); } BinaryOperatorExpression boe = expr as BinaryOperatorExpression; - if (boe != null) { + if (boe != null && boe.Op == BinaryOperatorType.Add) { boe.Right = AddInteger(boe.Right, value); + if (boe.Right is PrimitiveExpression && ((PrimitiveExpression)boe.Right).Value is int) { + if ((int)((PrimitiveExpression)boe.Right).Value == 0) { + return boe.Left; + } + } return boe; } return new BinaryOperatorExpression(expr, BinaryOperatorType.Add, new PrimitiveExpression(value, value.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)));