1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
8
using Boo.Lang.Compiler;
9
using Boo.Lang.Compiler.Ast;
10
using Boo.Lang.Compiler.Ast.Visitors;
11
using ICSharpCode.Core;
12
using ICSharpCode.NRefactory.Ast;
13
using ICSharpCode.SharpDevelop.Dom;
14
using ICSharpCode.SharpDevelop.Dom.Refactoring;
15
using ICSharpCode.SharpDevelop.Editor;
16
using NRefactoryToBooConverter;
18
namespace Grunwald.BooBinding
21
/// Description of BooCodeGenerator.
23
public class BooCodeGenerator : CodeGenerator
25
public override void InsertCodeAtEnd(DomRegion region, IRefactoringDocument document, params AbstractNode[] nodes)
27
InsertCodeAfter(region.EndLine, document,
28
GetIndentation(document, region.BeginLine) + '\t', nodes);
31
public override string GenerateCode(AbstractNode node, string indentation)
33
StringBuilder errorBuilder = new StringBuilder();
34
ConverterSettings settings = new ConverterSettings("codegeneration.cs");
37
Node booNode = (Node)node.AcceptVisitor(new ConvertVisitor(settings), null);
39
if (settings.Errors.Count > 0) {
40
foreach (CompilerError error in settings.Errors) {
41
errorBuilder.AppendLine(error.ToString());
44
if (settings.Warnings.Count > 0) {
45
foreach (CompilerWarning warning in settings.Warnings) {
46
errorBuilder.AppendLine(warning.ToString());
49
booNode.Accept(new RemoveRedundantTypeReferencesVisitor());
50
using (StringWriter w = new StringWriter()) {
51
BooPrinterVisitor printer = new BooPrinterVisitor(w);
53
foreach (char c in indentation) {
60
while (indentCount-- > 0)
62
booNode.Accept(printer);
63
output = w.ToString();
66
if (errorBuilder.Length > 0) {
67
MessageService.ShowMessage(errorBuilder.ToString());
72
public static readonly BooCodeGenerator Instance = new BooCodeGenerator();