diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin
index 12730e83ab..612c3d16a8 100644
--- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin
@@ -6,6 +6,7 @@
version = "1.0.0">
+
@@ -44,6 +45,13 @@
resource = "Grunwald.BooBinding.Resources.Boo.xshd" />
+
+
+
+
+
@@ -50,6 +51,10 @@
..\..\RequiredLibraries\Boo.Lang.Parser.dll
False
+
+ ..\..\RequiredLibraries\Boo.Lang.CodeDom.dll
+ False
+
@@ -69,6 +74,10 @@
+
+
+
+
@@ -110,6 +119,12 @@
True
+
+ {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}
+ FormDesigner
+ False
+
+
\ No newline at end of file
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooParser.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooParser.cs
index 42f4f8c00b..47a87f9960 100644
--- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooParser.cs
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooParser.cs
@@ -112,8 +112,7 @@ namespace Grunwald.BooBinding.CodeCompletion
try {
compiler.Run();
- // somehow the SD parser thread goes into an endless loop if this flag is not set
- visitor.Cu.ErrorsDuringCompile = true; //context.Errors.Count > 0
+ //visitor.Cu.ErrorsDuringCompile = compiler.Errors.Count > 0
} catch (Exception ex) {
MessageService.ShowError(ex);
}
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs
index a4a8efca62..d7d2c6187a 100644
--- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs
@@ -295,7 +295,9 @@ namespace Grunwald.BooBinding.CodeCompletion
public override bool EnterModule(AST.Module node)
{
- if (_firstModule) EnterTypeDefinition(node, ClassType.Class);
+ if (!_firstModule && node.Members.Count > 0) {
+ EnterTypeDefinition(node, ClassType.Module);
+ }
_firstModule = false;
return base.EnterModule(node);
}
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerGenerator.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerGenerator.cs
new file mode 100644
index 0000000000..5305ca0a88
--- /dev/null
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerGenerator.cs
@@ -0,0 +1,59 @@
+//
+// 2002-2005 AlphaSierraPapa
+// GNU General Public License
+//
+// $Revision$
+//
+
+using System;
+using System.ComponentModel;
+using System.Reflection;
+using ICSharpCode.Core;
+using ICSharpCode.FormDesigner;
+
+namespace Grunwald.BooBinding.Designer
+{
+ public class BooDesignerGenerator : AbstractDesignerGenerator
+ {
+ protected override string GenerateFieldDeclaration(Type fieldType, string name)
+ {
+ return "private " + name + " as " + fieldType;
+ }
+
+ protected override System.CodeDom.Compiler.CodeDomProvider CreateCodeProvider()
+ {
+ return new Boo.Lang.CodeDom.BooCodeProvider();
+ }
+
+ protected override string CreateEventHandler(EventDescriptor edesc, string eventMethodName, string body)
+ {
+ if (string.IsNullOrEmpty(body)) body = "\tpass";
+ string param = GenerateParams(edesc);
+ return "private def " + eventMethodName + "(" + param + "):\n" +
+ body +
+ "\n";
+ }
+
+ protected static string GenerateParams(EventDescriptor edesc)
+ {
+ Type type = edesc.EventType;
+ MethodInfo mInfo = type.GetMethod("Invoke");
+ string param = "";
+
+ for (int i = 0; i < mInfo.GetParameters().Length; ++i) {
+ ParameterInfo pInfo = mInfo.GetParameters()[i];
+
+ param += pInfo.Name;
+ param += " as ";
+
+ string typeStr = pInfo.ParameterType.ToString();
+ typeStr = BooAmbience.Instance.GetIntrinsicTypeName(typeStr);
+ param += typeStr;
+ if (i + 1 < mInfo.GetParameters().Length) {
+ param += ", ";
+ }
+ }
+ return param;
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs
new file mode 100644
index 0000000000..1e71936e4d
--- /dev/null
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/BooDesignerLoader.cs
@@ -0,0 +1,141 @@
+//
+// 2002-2005 AlphaSierraPapa
+// GNU General Public License
+//
+// $Revision$
+//
+
+using System;
+using System.Collections;
+using System.Drawing;
+using System.IO;
+using System.ComponentModel.Design;
+using System.CodeDom;
+using System.CodeDom.Compiler;
+using System.ComponentModel.Design.Serialization;
+using System.Text;
+using System.Windows.Forms;
+using System.Windows.Forms.Design;
+
+using ICSharpCode.Core;
+using ICSharpCode.TextEditor;
+using ICSharpCode.TextEditor.Document;
+
+using ICSharpCode.FormDesigner;
+using ICSharpCode.FormDesigner.Services;
+using Boo.Lang.Parser;
+using Boo.Lang.Compiler.Ast;
+
+namespace Grunwald.BooBinding.Designer
+{
+ public class BooDesignerLoader : CodeDomDesignerLoader
+ {
+ bool loading = true;
+ IDesignerLoaderHost designerLoaderHost = null;
+ ITypeResolutionService typeResolutionService = null;
+ CodeDomProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
+
+ TextEditorControl textEditorControl;
+
+ public string TextContent {
+ get {
+ return textEditorControl.Document.TextContent;
+ }
+ }
+
+ public override bool Loading {
+ get {
+ return loading;
+ }
+ }
+
+ public IDesignerLoaderHost DesignerLoaderHost {
+ get {
+ return designerLoaderHost;
+ }
+ }
+
+ protected override CodeDomProvider CodeDomProvider {
+ get {
+ return provider;
+ }
+ }
+
+ protected override ITypeResolutionService TypeResolutionService {
+ get {
+ return typeResolutionService;
+ }
+ }
+
+ protected override bool IsReloadNeeded()
+ {
+ return base.IsReloadNeeded() || TextContent != lastTextContent;
+ }
+
+ public BooDesignerLoader(TextEditorControl textEditorControl)
+ {
+ this.textEditorControl = textEditorControl;
+ }
+
+ public override void BeginLoad(IDesignerLoaderHost host)
+ {
+ this.loading = true;
+ typeResolutionService = (ITypeResolutionService)host.GetService(typeof(ITypeResolutionService));
+ base.BeginLoad(host);
+ }
+
+ protected override void OnEndLoad(bool successful, ICollection errors)
+ {
+ this.loading = false;
+ base.OnEndLoad(successful, errors);
+ }
+
+ string lastTextContent;
+
+ protected override CodeCompileUnit Parse()
+ {
+ LoggingService.Debug("BooDesignerLoader.Parse()");
+
+ lastTextContent = TextContent;
+ BooParsingStep step = new BooParsingStep();
+
+ StringBuilder errors = new StringBuilder();
+ Module module = BooParser.ParseModule(4, new CompileUnit(), "BooDesignerLoaderModule",
+ new StringReader(lastTextContent),
+ delegate(antlr.RecognitionException e) {
+ errors.AppendLine(e.ToString());
+ });
+
+ if (errors.Length > 0) {
+ throw new FormDesignerLoadException(errors.ToString());
+ }
+
+ // Try to fix the type names to fully qualified ones
+ ParseInformation parseInfo = ParserService.GetParseInformation(textEditorControl.FileName);
+
+ /*
+ bool foundInitMethod = false;
+ //FixTypeNames(p.CompilationUnit, parseInfo.BestCompilationUnit, ref foundInitMethod);
+ if (!foundInitMethod)
+ throw new FormDesignerLoadException("The InitializeComponent method was not found. Designer cannot be loaded.");
+ */
+
+ CodeDomVisitor visitor = new CodeDomVisitor(parseInfo.MostRecentCompilationUnit.ProjectContent);
+ module.Accept(visitor);
+
+ // output generated CodeDOM to the console :
+ ICSharpCode.NRefactory.Parser.CodeDOMVerboseOutputGenerator outputGenerator = new ICSharpCode.NRefactory.Parser.CodeDOMVerboseOutputGenerator();
+ outputGenerator.GenerateCodeFromMember(visitor.OutputCompileUnit.Namespaces[0].Types[0], Console.Out, null);
+ provider.GenerateCodeFromCompileUnit(visitor.OutputCompileUnit, Console.Out, null);
+
+ LoggingService.Debug("BooDesignerLoader.Parse() finished");
+ return visitor.OutputCompileUnit;
+ }
+
+ protected override void Write(CodeCompileUnit unit)
+ {
+ LoggingService.Info("BooDesignerLoader.Write called");
+ provider.GenerateCodeFromCompileUnit(unit, Console.Out, null);
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/CodeDomVisitor.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/CodeDomVisitor.cs
new file mode 100644
index 0000000000..da5bab5517
--- /dev/null
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/CodeDomVisitor.cs
@@ -0,0 +1,410 @@
+//
+// 2002-2005 AlphaSierraPapa
+// GNU General Public License
+//
+// $Revision$
+//
+
+using System;
+using System.Collections;
+using System.CodeDom;
+using System.Text;
+using Boo.Lang.Compiler;
+using Boo.Lang.Compiler.Ast;
+using Boo.Lang.Compiler.Ast.Visitors;
+using Boo.Lang.Parser;
+using ICSharpCode.Core;
+using ICSharpCode.SharpDevelop.Dom;
+
+namespace Grunwald.BooBinding.Designer
+{
+ ///
+ /// The CodeDomVisitor is able to convert from the Boo AST to System.CodeDom
+ /// It makes use of the SharpDevelop parser service to get necessary additional
+ /// information about the types.
+ ///
+ public class CodeDomVisitor : DepthFirstVisitor
+ {
+ CodeCompileUnit _compileUnit = new CodeCompileUnit();
+
+ public CodeCompileUnit OutputCompileUnit {
+ get {
+ return _compileUnit;
+ }
+ }
+
+ IProjectContent pc;
+
+ public CodeDomVisitor(IProjectContent pc)
+ {
+ this.pc = pc;
+ }
+
+ CodeNamespace _namespace;
+ CodeTypeDeclaration _class;
+ CodeStatementCollection _statements;
+ CodeExpression _expression;
+
+ MemberAttributes ConvModifiers(TypeMember member)
+ {
+ if (member is Field)
+ return ConvModifiers(member.Modifiers, MemberAttributes.Family);
+ else
+ return ConvModifiers(member.Modifiers, MemberAttributes.Public);
+ }
+
+ MemberAttributes ConvModifiers(TypeMemberModifiers modifier, MemberAttributes defaultAttr)
+ {
+ MemberAttributes attr = 0;
+ if ((modifier & TypeMemberModifiers.Abstract) == TypeMemberModifiers.Abstract)
+ attr |= MemberAttributes.Abstract;
+ if ((modifier & TypeMemberModifiers.Final) == TypeMemberModifiers.Final)
+ attr |= MemberAttributes.Const;
+ if ((modifier & TypeMemberModifiers.Internal) == TypeMemberModifiers.Internal)
+ attr |= MemberAttributes.Assembly;
+ if ((modifier & TypeMemberModifiers.Override) == TypeMemberModifiers.Override)
+ attr |= MemberAttributes.Override;
+ if ((modifier & TypeMemberModifiers.Private) == TypeMemberModifiers.Private)
+ attr |= MemberAttributes.Private;
+ if ((modifier & TypeMemberModifiers.Protected) == TypeMemberModifiers.Protected)
+ attr |= MemberAttributes.Family;
+ if ((modifier & TypeMemberModifiers.Public) == TypeMemberModifiers.Public)
+ attr |= MemberAttributes.Public;
+ if ((modifier & TypeMemberModifiers.Static) == TypeMemberModifiers.Static)
+ attr |= MemberAttributes.Static;
+ if ((modifier & TypeMemberModifiers.Virtual) != TypeMemberModifiers.Virtual)
+ attr |= MemberAttributes.Final;
+ if (attr == 0)
+ return defaultAttr;
+ else
+ return attr;
+ }
+
+ CodeTypeReference ConvTypeRef(TypeReference tr)
+ {
+ if (tr == null) return null;
+ string name = tr.ToString();
+ if (BooAmbience.ReverseTypeConversionTable.ContainsKey(name))
+ name = BooAmbience.ReverseTypeConversionTable[name];
+ return new CodeTypeReference(name);
+ }
+
+ public override void OnCompileUnit(CompileUnit node)
+ {
+ foreach (Module m in node.Modules)
+ m.Accept(this);
+ }
+
+ public override void OnModule(Module node)
+ {
+ if (node.Namespace == null) {
+ _namespace = new CodeNamespace("Global");
+ _compileUnit.Namespaces.Add(_namespace);
+ } else {
+ node.Namespace.Accept(this);
+ }
+ foreach (Import i in node.Imports)
+ i.Accept(this);
+ foreach (TypeMember m in node.Members)
+ m.Accept(this);
+ }
+
+ public override void OnNamespaceDeclaration(NamespaceDeclaration node)
+ {
+ _namespace = new CodeNamespace(node.Name);
+ _compileUnit.Namespaces.Add(_namespace);
+ }
+
+ public override void OnImport(Import node)
+ {
+ _namespace.Imports.Add(new CodeNamespaceImport(node.Namespace));
+ }
+
+ CodeTypeDeclaration ConvertTypeDefinition(TypeDefinition node)
+ {
+ CodeTypeDeclaration oldClass = _class;
+ CodeTypeDeclaration newClass = new CodeTypeDeclaration(node.Name);
+ _class = newClass;
+
+ foreach (TypeReference b in node.BaseTypes)
+ newClass.BaseTypes.Add(ConvTypeRef(b));
+
+ foreach (TypeMember member in node.Members)
+ member.Accept(this);
+
+ if (oldClass == null)
+ _namespace.Types.Add(newClass);
+ else
+ oldClass.Members.Add(newClass);
+ _class = oldClass;
+ return newClass;
+ }
+
+ public override void OnClassDefinition(ClassDefinition node)
+ {
+ ConvertTypeDefinition(node).IsClass = true;
+ }
+
+ public override void OnStructDefinition(StructDefinition node)
+ {
+ ConvertTypeDefinition(node).IsStruct = true;
+ }
+ public override void OnInterfaceDefinition(InterfaceDefinition node)
+ {
+ ConvertTypeDefinition(node).IsInterface = true;
+ }
+
+ public override void OnField(Field node)
+ {
+ CodeMemberField field = new CodeMemberField(ConvTypeRef(node.Type), node.Name);
+ field.Attributes = ConvModifiers(node);
+ if (node.Initializer != null) {
+ _expression = null;
+ //Visit(node.Initializer);
+ field.InitExpression = _expression;
+ }
+ _class.Members.Add(field);
+ }
+
+ public override void OnConstructor(Boo.Lang.Compiler.Ast.Constructor node)
+ {
+ ConvertMethod(node, new CodeConstructor());
+ }
+ public override void OnMethod(Method node)
+ {
+ CodeMemberMethod cmm = new CodeMemberMethod();
+ cmm.Name = node.Name;
+ cmm.ReturnType = ConvTypeRef(node.ReturnType);
+ ConvertMethod(node, cmm);
+ }
+ public override void OnDestructor(Boo.Lang.Compiler.Ast.Destructor node)
+ {
+ CodeMemberMethod cmm = new CodeMemberMethod();
+ cmm.Name = "Finalize";
+ ConvertMethod(node, cmm);
+ }
+ void ConvertMethod(Method node, CodeMemberMethod method)
+ {
+ method.Attributes = ConvModifiers(node);
+ if (node.Parameters != null) {
+ foreach (ParameterDeclaration p in node.Parameters)
+ method.Parameters.Add(new CodeParameterDeclarationExpression(ConvTypeRef(p.Type), p.Name));
+ }
+ _statements = method.Statements;
+
+ if (node.Body != null)
+ node.Body.Accept(this);
+
+ _class.Members.Add(method);
+ }
+ public override void OnBinaryExpression(BinaryExpression node)
+ {
+ BinaryOperatorType op = node.Operator;
+ if (op == BinaryOperatorType.Assign) {
+ _expression = null;
+ node.Left.Accept(this);
+ CodeExpression left = _expression;
+ _expression = null;
+ node.Right.Accept(this);
+ if (left != null && _expression != null)
+ _statements.Add(new CodeAssignStatement(left, _expression));
+ _expression = null;
+ }
+ }
+ public override void OnBlock(Block node)
+ {
+ foreach (Statement n in node.Statements)
+ n.Accept(this);
+ }
+
+ public override void OnExpressionStatement(ExpressionStatement node)
+ {
+ _expression = null;
+ node.Expression.Accept(this);
+ if (_expression != null)
+ _statements.Add(new CodeExpressionStatement(_expression));
+ }
+
+ public override void OnGotoStatement(GotoStatement node)
+ {
+ _statements.Add(new CodeGotoStatement(node.Label.Name));
+ }
+
+ public override void OnNullLiteralExpression(NullLiteralExpression node)
+ {
+ _expression = new CodePrimitiveExpression(null);
+ }
+
+ public override void OnBoolLiteralExpression(BoolLiteralExpression node)
+ {
+ _expression = new CodePrimitiveExpression(node.Value);
+ }
+
+ public override void OnStringLiteralExpression(StringLiteralExpression node)
+ {
+ _expression = new CodePrimitiveExpression(node.Value);
+ }
+
+ public override void OnCharLiteralExpression(CharLiteralExpression node)
+ {
+ _expression = new CodePrimitiveExpression(node.Value);
+ }
+
+ public override void OnIntegerLiteralExpression(IntegerLiteralExpression node)
+ {
+ _expression = new CodePrimitiveExpression(node.Value);
+ }
+
+ public override void OnDoubleLiteralExpression(DoubleLiteralExpression node)
+ {
+ _expression = new CodePrimitiveExpression(node.Value);
+ }
+
+ public override void OnMemberReferenceExpression(MemberReferenceExpression node)
+ {
+ _expression = null;
+ node.Target.Accept(this);
+ if (_expression != null) {
+ if (_expression is CodeTypeReferenceExpression) {
+ string baseName = ((CodeTypeReferenceExpression)_expression).Type.BaseType;
+ _expression = CreateMemberExpression(_expression, baseName, node.Name, true);
+ } else {
+ _expression = CreateMemberExpression(_expression, node.Name);
+ }
+ }
+ }
+
+ public override void OnReferenceExpression(ReferenceExpression node)
+ {
+ if (pc.GetClass(node.Name) != null)
+ _expression = new CodeTypeReferenceExpression(node.Name);
+ else if (pc.NamespaceExists(node.Name))
+ _expression = new CodeTypeReferenceExpression(node.Name);
+ else
+ _expression = CreateMemberExpression(new CodeThisReferenceExpression(), node.Name);
+ }
+
+ CodeExpression CreateMemberExpression(CodeExpression expr, string name)
+ {
+ if (expr is CodeTypeReferenceExpression) {
+ string typeRef = ((CodeTypeReferenceExpression)_expression).Type.BaseType;
+ return CreateMemberExpression(expr, typeRef, name, true);
+ } else if (expr is CodeThisReferenceExpression) {
+ string typeRef = _namespace.Name + "." + _class.Name;
+ return CreateMemberExpression(expr, typeRef, name, false);
+ } else if (expr is CodeFieldReferenceExpression || expr is CodePropertyReferenceExpression) {
+ if (_fieldReferenceType == null)
+ return new CodePropertyReferenceExpression(expr, name);
+ return CreateMemberExpression(expr, _fieldReferenceType.FullyQualifiedName, name, false);
+ } else {
+ _fieldReferenceType = null;
+ return new CodePropertyReferenceExpression(expr, name);
+ }
+ }
+
+ IReturnType _fieldReferenceType;
+
+ CodeExpression CreateMemberExpression(CodeExpression target, string parentName, string name, bool isStatic)
+ {
+ _fieldReferenceType = null;
+
+ string combinedName = parentName + "." + name;
+ if (pc.GetClass(combinedName) != null)
+ return new CodeTypeReferenceExpression(combinedName);
+ else if (pc.NamespaceExists(combinedName))
+ return new CodeTypeReferenceExpression(combinedName);
+
+ GetClassReturnType rt = new GetClassReturnType(pc, parentName, 0);
+ foreach (IProperty prop in rt.GetProperties()) {
+ if (prop.IsStatic == isStatic && prop.Name == name) {
+ _fieldReferenceType = prop.ReturnType;
+ return new CodePropertyReferenceExpression(target, name);
+ }
+ }
+ foreach (IEvent ev in rt.GetEvents()) {
+ if (ev.IsStatic == isStatic && ev.Name == name) {
+ _fieldReferenceType = ev.ReturnType;
+ return new CodeEventReferenceExpression(target, name);
+ }
+ }
+ foreach (IMethod me in rt.GetMethods()) {
+ if (me.IsStatic == isStatic && me.Name == name) {
+ _fieldReferenceType = me.ReturnType;
+ return new CodeMethodReferenceExpression(target, name);
+ }
+ }
+ foreach (IField field in rt.GetFields()) {
+ if (field.IsStatic == isStatic && field.Name == name) {
+ _fieldReferenceType = field.ReturnType;
+ return new CodeFieldReferenceExpression(target, name);
+ }
+ }
+ // unknown member, guess:
+ if (char.IsUpper(name, 0))
+ return new CodePropertyReferenceExpression(target, name);
+ else
+ return new CodeFieldReferenceExpression(target, name);
+ }
+
+ public override void OnAstLiteralExpression(AstLiteralExpression node)
+ {
+ _expression = new CodeObjectCreateExpression(node.Node.GetType());
+ }
+
+ public override void OnMethodInvocationExpression(MethodInvocationExpression node)
+ {
+ _expression = null;
+ node.Target.Accept(this);
+ if (_expression != null) {
+ CodeMethodInvokeExpression cmie;
+ CodeObjectCreateExpression coce;
+
+ if (_expression is CodeTypeReferenceExpression) {
+ coce = new CodeObjectCreateExpression(((CodeTypeReferenceExpression)_expression).Type);
+ ConvertExpressions(coce.Parameters, node.Arguments);
+ _expression = coce;
+ } else if (_expression is CodeMethodReferenceExpression) {
+ cmie = new CodeMethodInvokeExpression((CodeMethodReferenceExpression)_expression);
+ ConvertExpressions(cmie.Parameters, node.Arguments);
+ _expression = cmie;
+ } else if (_expression is CodeFieldReferenceExpression) {
+ // when a type is unknown, a MemberReferenceExpression is translated into a CodeFieldReferenceExpression
+ CodeFieldReferenceExpression cfre = (CodeFieldReferenceExpression)_expression;
+ cmie = new CodeMethodInvokeExpression(cfre.TargetObject, cfre.FieldName);
+ ConvertExpressions(cmie.Parameters, node.Arguments);
+ _expression = cmie;
+ } else {
+ _expression = null;
+ }
+ }
+ }
+
+ /// Converts a list of expressions to CodeDom expressions.
+ void ConvertExpressions(CodeExpressionCollection args, ExpressionCollection expressions)
+ {
+ foreach (Expression e in expressions) {
+ _expression = null;
+ e.Accept(this);
+ args.Add(_expression);
+ }
+ }
+
+ public override void OnReturnStatement(ReturnStatement node)
+ {
+ _expression = null;
+ if (node.Expression != null)
+ node.Expression.Accept(this);
+ _statements.Add(new CodeMethodReturnStatement(_expression));
+ }
+
+ public override void OnSelfLiteralExpression(SelfLiteralExpression node)
+ {
+ _expression = new CodeThisReferenceExpression();
+ }
+
+ public override void OnSuperLiteralExpression(SuperLiteralExpression node)
+ {
+ _expression = new CodeBaseReferenceExpression();
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/FormDesignerBinding.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/FormDesignerBinding.cs
new file mode 100644
index 0000000000..35bdfa55b6
--- /dev/null
+++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/Designer/FormDesignerBinding.cs
@@ -0,0 +1,61 @@
+//
+// 2002-2005 AlphaSierraPapa
+// GNU General Public License
+//
+// $Revision$
+//
+
+using System;
+using System.IO;
+
+using ICSharpCode.Core;
+using ICSharpCode.SharpDevelop.Gui;
+using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
+using ICSharpCode.SharpDevelop.Dom;
+using ICSharpCode.FormDesigner;
+using ICSharpCode.TextEditor;
+
+namespace Grunwald.BooBinding.Designer
+{
+ public class FormDesignerDisplayBinding : ISecondaryDisplayBinding
+ {
+ public bool CanAttachTo(IViewContent viewContent)
+ {
+ if (viewContent is ITextEditorControlProvider) {
+ ITextEditorControlProvider textAreaControlProvider = (ITextEditorControlProvider)viewContent;
+ string fileExtension = String.Empty;
+ string fileName = viewContent.IsUntitled ? viewContent.UntitledName : viewContent.FileName;
+ if (fileName == null)
+ return false;
+ if (Path.GetExtension(fileName).Equals(".boo", StringComparison.InvariantCultureIgnoreCase)) {
+ ParseInformation info = ParserService.ParseFile(fileName, textAreaControlProvider.TextEditorControl.Document.TextContent, false, true);
+ if (FormDesignerSecondaryDisplayBinding.IsDesignable(info))
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public ISecondaryViewContent[] CreateSecondaryViewContent(IViewContent viewContent)
+ {
+ IDesignerLoaderProvider loader = new BooDesignerLoaderProvider(((ITextEditorControlProvider)viewContent).TextEditorControl);
+ IDesignerGenerator generator = new BooDesignerGenerator();
+ return new ISecondaryViewContent[] { new FormDesignerViewContent(viewContent, loader, generator) };
+ }
+ }
+
+ public class BooDesignerLoaderProvider : IDesignerLoaderProvider
+ {
+ TextEditorControl textEditorControl;
+
+ public BooDesignerLoaderProvider(TextEditorControl textEditorControl)
+ {
+ this.textEditorControl = textEditorControl;
+ }
+
+ public System.ComponentModel.Design.Serialization.DesignerLoader CreateLoader()
+ {
+ return new BooDesignerLoader(textEditorControl);
+ }
+ }
+}
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.csproj b/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.csproj
index 3e46e77df2..cc38af8586 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.csproj
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/FormDesigner.csproj
@@ -105,6 +105,7 @@
+
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/AbstractDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/AbstractDesignerGenerator.cs
new file mode 100644
index 0000000000..c41cf5a8fc
--- /dev/null
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/AbstractDesignerGenerator.cs
@@ -0,0 +1,249 @@
+//
+// 2002-2005 AlphaSierraPapa
+// GNU General Public License
+//
+// $Revision$
+//
+
+using System;
+using System.IO;
+using System.Collections;
+using System.Diagnostics;
+using System.Drawing;
+using System.Reflection;
+using System.ComponentModel;
+using System.ComponentModel.Design;
+
+using ICSharpCode.SharpDevelop.Gui;
+using ICSharpCode.SharpDevelop.Dom;
+using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
+
+using ICSharpCode.Core;
+
+namespace ICSharpCode.FormDesigner
+{
+ public abstract class AbstractDesignerGenerator : IDesignerGenerator
+ {
+ IClass c;
+ IMethod initializeComponents;
+
+ FormDesignerViewContent viewContent;
+ bool failedDesignerInitialize = false;
+
+ public const string NonVisualComponentContainerName = "components";
+
+ public void Attach(FormDesignerViewContent viewContent)
+ {
+ this.viewContent = viewContent;
+ IComponentChangeService componentChangeService = (IComponentChangeService)viewContent.DesignSurface.GetService(typeof(IComponentChangeService));
+ componentChangeService.ComponentAdded += new ComponentEventHandler(ComponentAdded);
+ componentChangeService.ComponentRename += new ComponentRenameEventHandler(ComponentRenamed);
+ componentChangeService.ComponentRemoving += new ComponentEventHandler(ComponentRemoved);
+ }
+
+ public void Detach()
+ {
+ IComponentChangeService componentChangeService = (IComponentChangeService)viewContent.DesignSurface.GetService(typeof(IComponentChangeService));
+ componentChangeService.ComponentAdded -= new ComponentEventHandler(ComponentAdded);
+ componentChangeService.ComponentRename -= new ComponentRenameEventHandler(ComponentRenamed);
+ componentChangeService.ComponentRemoving -= new ComponentEventHandler(ComponentRemoved);
+ this.viewContent = null;
+ }
+
+ void ComponentRemoved(object sender, ComponentEventArgs e)
+ {
+ try {
+ Reparse(viewContent.Document.TextContent);
+ foreach (IField field in c.Fields) {
+ if (field.Name == e.Component.Site.Name) {
+ int startOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.BeginLine - 1));
+ int endOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.EndLine));
+ viewContent.Document.Remove(startOffset, endOffset - startOffset);
+ }
+ }
+ } catch (Exception ex) {
+ MessageService.ShowError(ex);
+ }
+ }
+
+ protected abstract string GenerateFieldDeclaration(Type fieldType, string name);
+
+ ///
+ /// Contains the tabs in front of the InitializeComponents declaration.
+ /// Used to indent the fields and generated statements.
+ ///
+ protected string tabs;
+
+ void ComponentAdded(object sender, ComponentEventArgs e)
+ {
+ try {
+ Reparse(viewContent.Document.TextContent);
+ int endOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.EndLine));
+ viewContent.Document.Insert(endOffset, tabs + GenerateFieldDeclaration(e.Component.GetType(), e.Component.Site.Name) + Environment.NewLine);
+ if (CodeDOMGenerator.IsNonVisualComponent(viewContent.Host, e.Component)) {
+ if (!IsNonVisualComponentContainerDefined) {
+ viewContent.Document.Insert(endOffset, tabs + GenerateFieldDeclaration(typeof(Container), NonVisualComponentContainerName) + Environment.NewLine);
+ }
+ }
+ } catch (Exception ex) {
+ MessageService.ShowError(ex);
+ }
+ }
+
+ void ComponentRenamed(object sender, ComponentRenameEventArgs e)
+ {
+ Reparse(viewContent.Document.TextContent);
+ foreach (IField field in c.Fields) {
+ if (field.Name == e.OldName) {
+ int startOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.BeginLine - 1));
+ int endOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.EndLine));
+ viewContent.Document.Replace(startOffset, endOffset - startOffset, tabs + GenerateFieldDeclaration(e.Component.GetType(), e.NewName) + Environment.NewLine);
+ }
+ }
+ }
+
+ protected abstract System.CodeDom.Compiler.CodeDomProvider CreateCodeProvider();
+
+ public void MergeFormChanges()
+ {
+ if (tabs == null) Reparse(viewContent.Document.TextContent);
+
+ // generate file and get initialize components string
+ StringWriter writer = new StringWriter();
+ new CodeDOMGenerator(viewContent.Host, CreateCodeProvider(), tabs + '\t').ConvertContentDefinition(writer);
+ string statements = writer.ToString();
+
+ Reparse(viewContent.Document.TextContent);
+
+ int startOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.BeginLine + 1));
+ int endOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.EndLine - 1));
+
+ viewContent.Document.Replace(startOffset, endOffset - startOffset, statements);
+ }
+
+ protected void Reparse(string content)
+ {
+ // get new initialize components
+ ParseInformation info = ParserService.ParseFile(viewContent.TextEditorControl.FileName, content, false, true);
+ ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit;
+ foreach (IClass c in cu.Classes) {
+ if (FormDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(c)) {
+ initializeComponents = FormDesignerSecondaryDisplayBinding.GetInitializeComponents(c);
+ if (initializeComponents != null) {
+ using (StringReader r = new StringReader(content)) {
+ int count = initializeComponents.Region.BeginLine;
+ for (int i = 1; i < count; i++)
+ r.ReadLine();
+ string line = r.ReadLine();
+ tabs = line.Substring(0, line.Length - line.TrimStart().Length);
+ }
+ this.c = c;
+ break;
+ }
+ }
+ }
+ }
+
+ protected abstract string CreateEventHandler(EventDescriptor edesc, string eventMethodName, string body);
+
+ ///
+ /// If found return true and int as position
+ ///
+ ///
+ ///
+ ///
+ public bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out int position)
+ {
+ if (this.failedDesignerInitialize) {
+ position = 0;
+ return false;
+ }
+
+ Reparse(viewContent.Document.TextContent);
+
+ foreach (IMethod method in c.Methods) {
+ if (method.Name == eventMethodName) {
+ position = method.Region.BeginLine + 1;
+ return true;
+ }
+ }
+ MergeFormChanges();
+ Reparse(viewContent.Document.TextContent);
+
+ position = c.Region.EndLine + 1;
+
+ int offset = viewContent.Document.GetLineSegment(c.Region.EndLine - 1).Offset;
+
+ viewContent.Document.Insert(offset, CreateEventHandler(edesc, eventMethodName, body));
+ viewContent.Document.FormattingStrategy.IndentLines(viewContent.TextEditorControl.ActiveTextAreaControl.TextArea, c.Region.EndLine - 1, c.Region.EndLine + 3);
+
+ return false;
+ }
+
+ public ICollection GetCompatibleMethods(EventDescriptor edesc)
+ {
+ Reparse(viewContent.Document.TextContent);
+ ArrayList compatibleMethods = new ArrayList();
+ MethodInfo methodInfo = edesc.EventType.GetMethod("Invoke");
+ foreach (IMethod method in c.Methods) {
+ if (method.Parameters.Count == methodInfo.GetParameters().Length) {
+ bool found = true;
+ for (int i = 0; i < methodInfo.GetParameters().Length; ++i) {
+ ParameterInfo pInfo = methodInfo.GetParameters()[i];
+ IParameter p = method.Parameters[i];
+ if (p.ReturnType.FullyQualifiedName != pInfo.ParameterType.ToString()) {
+ found = false;
+ break;
+ }
+ }
+ if (found) {
+ compatibleMethods.Add(method.Name);
+ }
+ }
+ }
+
+ return compatibleMethods;
+ }
+
+ public ICollection GetCompatibleMethods(EventInfo edesc)
+ {
+ Reparse(viewContent.Document.TextContent);
+ ArrayList compatibleMethods = new ArrayList();
+ MethodInfo methodInfo = edesc.GetAddMethod();
+ ParameterInfo pInfo = methodInfo.GetParameters()[0];
+ string eventName = pInfo.ParameterType.ToString().Replace("EventHandler", "EventArgs");
+
+ foreach (IMethod method in c.Methods) {
+ if (method.Parameters.Count == 2) {
+ bool found = true;
+
+ IParameter p = method.Parameters[1];
+ if (p.ReturnType.FullyQualifiedName != eventName) {
+ found = false;
+ }
+ if (found) {
+ compatibleMethods.Add(method.Name);
+ }
+ }
+ }
+ return compatibleMethods;
+ }
+
+ bool IsNonVisualComponentContainerDefined
+ {
+ get {
+ return GetField(c, NonVisualComponentContainerName) != null;
+ }
+ }
+
+ IField GetField(IClass c, string name)
+ {
+ foreach (IField field in c.Fields) {
+ if (field.Name == name) {
+ return field;
+ }
+ }
+ return null;
+ }
+ }
+}
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs
index cf3f3d573f..c5278df8f7 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CSharpDesignerGenerator.cs
@@ -1,162 +1,36 @@
-//
+//
// 2002-2005 AlphaSierraPapa
// GNU General Public License
-//
+//
// $Revision$
//
using System;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Drawing;
-using System.Drawing.Design;
-using System.Reflection;
-using System.Windows.Forms;
-using System.Drawing.Printing;
using System.ComponentModel;
-using System.ComponentModel.Design;
-using System.ComponentModel.Design.Serialization;
-using System.Xml;
-
-using ICSharpCode.SharpDevelop.Gui;
-using ICSharpCode.SharpDevelop.Dom;
-using ICSharpCode.SharpDevelop.Project;
-using ICSharpCode.SharpDevelop.Internal.Undo;
-using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
-
+using System.Reflection;
using ICSharpCode.Core;
-using ICSharpCode.FormDesigner.Services;
-using ICSharpCode.TextEditor;
-using ICSharpCode.TextEditor.Document;
-
-using ICSharpCode.NRefactory.Parser;
-using ICSharpCode.NRefactory.Parser.AST;
-using ICSharpCode.NRefactory.PrettyPrinter;
-
-using System.CodeDom;
-using System.CodeDom.Compiler;
-
-using Microsoft.CSharp;
-using Microsoft.VisualBasic;
namespace ICSharpCode.FormDesigner
{
- public class CSharpDesignerGenerator : IDesignerGenerator
+ public class CSharpDesignerGenerator : AbstractDesignerGenerator
{
- IClass c;
- IMethod initializeComponents;
-
- FormDesignerViewContent viewContent;
- bool failedDesignerInitialize = false;
-
- string NonVisualComponentContainerName = "components";
-
- public void Attach(FormDesignerViewContent viewContent)
- {
- this.viewContent = viewContent;
- IComponentChangeService componentChangeService = (IComponentChangeService)viewContent.DesignSurface.GetService(typeof(IComponentChangeService));
- componentChangeService.ComponentAdded += new ComponentEventHandler(ComponentAdded);
- componentChangeService.ComponentRename += new ComponentRenameEventHandler(ComponentRenamed);
- componentChangeService.ComponentRemoving += new ComponentEventHandler(ComponentRemoved);
- }
-
- public void Detach()
- {
- IComponentChangeService componentChangeService = (IComponentChangeService)viewContent.DesignSurface.GetService(typeof(IComponentChangeService));
- componentChangeService.ComponentAdded -= new ComponentEventHandler(ComponentAdded);
- componentChangeService.ComponentRename -= new ComponentRenameEventHandler(ComponentRenamed);
- componentChangeService.ComponentRemoving -= new ComponentEventHandler(ComponentRemoved);
- this.viewContent = null;
- }
-
- void ComponentRemoved(object sender, ComponentEventArgs e)
- {
- try {
- Reparse(viewContent.Document.TextContent);
- foreach (IField field in c.Fields) {
- if (field.Name == e.Component.Site.Name) {
- int startOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.BeginLine - 1));
- int endOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.EndLine));
- viewContent.Document.Remove(startOffset, endOffset - startOffset);
- }
- }
- } catch (Exception ex) {
- MessageService.ShowError(ex);
- }
- }
-
- void ComponentAdded(object sender, ComponentEventArgs e)
+ protected override string GenerateFieldDeclaration(Type fieldType, string name)
{
- try {
- Reparse(viewContent.Document.TextContent);
- int endOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.EndLine));
- viewContent.Document.Insert(endOffset, "\t\tprivate " + e.Component.GetType() + " " + e.Component.Site.Name + ";" + Environment.NewLine);
- if (CodeDOMGenerator.IsNonVisualComponent(viewContent.Host, e.Component)) {
- if (!IsNonVisualComponentContainerDefined) {
- viewContent.Document.Insert(endOffset, "\t\tprivate " + typeof(Container) + " " + NonVisualComponentContainerName + ";" + Environment.NewLine);
- }
- }
- } catch (Exception ex) {
- MessageService.ShowError(ex);
- }
+ return "private " + fieldType + " " + name + ";";
}
- void ComponentRenamed(object sender, ComponentRenameEventArgs e)
+ protected override System.CodeDom.Compiler.CodeDomProvider CreateCodeProvider()
{
- Reparse(viewContent.Document.TextContent);
- foreach (IField field in c.Fields) {
- if (field.Name == e.OldName) {
- int startOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.BeginLine - 1));
- int endOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.EndLine));
- viewContent.Document.Replace(startOffset, endOffset - startOffset, "\t\tprivate " + e.Component.GetType() + " " + e.NewName + ";" + Environment.NewLine);
- }
- }
+ return new Microsoft.CSharp.CSharpCodeProvider();
}
- public void MergeFormChanges()
+ protected override string CreateEventHandler(EventDescriptor edesc, string eventMethodName, string body)
{
+ string param = GenerateParams(edesc, true);
- // generate file and get initialize components string
- StringWriter writer = new StringWriter();
- new CodeDOMGenerator(viewContent.Host, new Microsoft.CSharp.CSharpCodeProvider()).ConvertContentDefinition(writer);
- string statements = writer.ToString();
-
- Reparse(viewContent.Document.TextContent);
-
- int startOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.BeginLine + 1));
- int endOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.EndLine - 1));
-
- viewContent.Document.Replace(startOffset, endOffset - startOffset, statements);
- }
-
- protected void Reparse(string content)
- {
- // get new initialize components
- ParseInformation info = ParserService.ParseFile(viewContent.TextEditorControl.FileName, content, false, true);
- ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit;
- foreach (IClass c in cu.Classes) {
- if (FormDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(c)) {
- initializeComponents = GetInitializeComponents(c);
- if (initializeComponents != null) {
- this.c = c;
- break;
- }
- }
- }
- }
-
- IMethod GetInitializeComponents(IClass c)
- {
- foreach (IMethod method in c.Methods) {
- if ((method.Name == "InitializeComponents" || method.Name == "InitializeComponent") && method.Parameters.Count == 0) {
- return method;
- }
- }
- return null;
+ return "void " + eventMethodName + "(" + param + ")\n" +
+ "{\n" + body +
+ "\n}\n\n";
}
protected static string GenerateParams(EventDescriptor edesc, bool paramNames)
@@ -189,110 +63,5 @@ namespace ICSharpCode.FormDesigner
}
return param;
}
-
- ///
- /// If found return true and int as position
- ///
- ///
- ///
- ///
- public bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out int position)
- {
- if (this.failedDesignerInitialize) {
- position = 0;
- return false;
- }
-
- Reparse(viewContent.Document.TextContent);
-
- foreach (IMethod method in c.Methods) {
- if (method.Name == eventMethodName) {
- position = method.Region.BeginLine + 1;
- return true;
- }
- }
- MergeFormChanges();
- Reparse(viewContent.Document.TextContent);
-
- position = c.Region.EndLine + 1;
-
- int offset = viewContent.Document.GetLineSegment(c.Region.EndLine - 1).Offset;
-
- string param = GenerateParams(edesc, true);
-
- string text = "void " + eventMethodName + "(" + param + ")\n" +
- "{\n" + body +
- "\n}\n\n";
- viewContent.Document.Insert(offset, text);
- viewContent.Document.FormattingStrategy.IndentLines(viewContent.TextEditorControl.ActiveTextAreaControl.TextArea, c.Region.EndLine - 1, c.Region.EndLine + 3);
-
- return false;
- }
-
- public ICollection GetCompatibleMethods(EventDescriptor edesc)
- {
- Reparse(viewContent.Document.TextContent);
- ArrayList compatibleMethods = new ArrayList();
- MethodInfo methodInfo = edesc.EventType.GetMethod("Invoke");
- foreach (IMethod method in c.Methods) {
- if (method.Parameters.Count == methodInfo.GetParameters().Length) {
- bool found = true;
- for (int i = 0; i < methodInfo.GetParameters().Length; ++i) {
- ParameterInfo pInfo = methodInfo.GetParameters()[i];
- IParameter p = method.Parameters[i];
- if (p.ReturnType.FullyQualifiedName != pInfo.ParameterType.ToString()) {
- found = false;
- break;
- }
- }
- if (found) {
- compatibleMethods.Add(method.Name);
- }
- }
- }
-
- return compatibleMethods;
- }
-
- public ICollection GetCompatibleMethods(EventInfo edesc)
- {
- Reparse(viewContent.Document.TextContent);
- ArrayList compatibleMethods = new ArrayList();
- MethodInfo methodInfo = edesc.GetAddMethod();
- ParameterInfo pInfo = methodInfo.GetParameters()[0];
- string eventName = pInfo.ParameterType.ToString().Replace("EventHandler", "EventArgs");
-
- foreach (IMethod method in c.Methods) {
- if (method.Parameters.Count == 2) {
- bool found = true;
-
- IParameter p = method.Parameters[1];
- if (p.ReturnType.FullyQualifiedName != eventName) {
- found = false;
- }
- if (found) {
- compatibleMethods.Add(method.Name);
- }
- }
- }
- return compatibleMethods;
- }
-
- bool IsNonVisualComponentContainerDefined
- {
- get {
- return GetField(c, NonVisualComponentContainerName) != null;
- }
- }
-
- IField GetField(IClass c, string name)
- {
- foreach (IField field in c.Fields) {
- if (field.Name == name) {
- return field;
- }
- }
- return null;
- }
}
}
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CodeDOMGenerator.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CodeDOMGenerator.cs
index 6e773c0f8e..d4aa3b920f 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CodeDOMGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/CodeDOMGenerator.cs
@@ -40,11 +40,13 @@ namespace ICSharpCode.FormDesigner
CodeDOMGeneratorUtility codeDOMGeneratorUtility = new CodeDOMGeneratorUtility();
List addedVariables = new List();
+ string indentation;
- public CodeDOMGenerator(IDesignerHost host, CodeDomProvider codeProvider)
+ public CodeDOMGenerator(IDesignerHost host, CodeDomProvider codeProvider, string indentation)
{
this.host = host;
this.codeProvider = codeProvider;
+ this.indentation = indentation;
}
public void ConvertContentDefinition(TextWriter writer)
@@ -57,9 +59,68 @@ namespace ICSharpCode.FormDesigner
addedVariables.Clear();
+ List statements = new List();
+
foreach (IComponent component in host.Container.Components) {
if (!IsComponentAdded(component)) {
- GenerateComponentCode(component, writer, serializationManager);
+ GenerateComponentCode(component, statements, serializationManager);
+ }
+ }
+
+ // Sort statements a bit:
+ // Move initialization statements up (but keep the order of everything else!)
+ int insertIndex = 0;
+ for (int i = 0; i < statements.Count; i++) {
+ CodeStatement statement = statements[i];
+ if (statement is CodeVariableDeclarationStatement
+ || (statement is CodeAssignStatement
+ && ((CodeAssignStatement)statement).Right is CodeObjectCreateExpression
+ && ((CodeAssignStatement)statement).Left is CodeVariableReferenceExpression)) {
+ // move i up to insertIndex
+ for (int j = i; j > insertIndex; j--) {
+ statements[j] = statements[j - 1];
+ }
+ statements[insertIndex++] = statement;
+ }
+ }
+ // Move SuspendLayout statements up
+ for (int i = insertIndex; i < statements.Count; i++) {
+ CodeStatement statement = statements[i];
+ if (IsMethodCall(statement, "SuspendLayout")) {
+ // move i up to insertIndex
+ for (int j = i; j > insertIndex; j--) {
+ statements[j] = statements[j - 1];
+ }
+ statements[insertIndex++] = statement;
+ }
+ }
+ // Move ResumeLayout statements down
+ insertIndex = statements.Count - 1;
+ for (int i = insertIndex; i >= 0; i--) {
+ CodeStatement statement = statements[i];
+ if (IsMethodCall(statement, "ResumeLayout")) {
+ // move i down to insertIndex
+ for (int j = i; j < insertIndex; j++) {
+ statements[j] = statements[j + 1];
+ }
+ statements[insertIndex--] = statement;
+ }
+ }
+
+
+ CodeGeneratorOptions options = codeDOMGeneratorUtility.CreateCodeGeneratorOptions;
+ options.IndentString = indentation;
+ foreach (CodeStatement statement in statements) {
+ // indentation isn't generated when calling GenerateCodeFromStatement
+ writer.Write(options.IndentString);
+ try {
+// outputGenerator.PublicGenerateCodeFromStatement(statement, Console.Out, options);
+ codeProvider.GenerateCodeFromStatement(statement, writer, options);
+ } catch (Exception e) {
+ codeProvider.GenerateCodeFromStatement(new CodeCommentStatement("TODO: Error while generating statement : " + e.Message),
+ writer,
+ options);
+ LoggingService.Error(e);
}
}
@@ -68,13 +129,22 @@ namespace ICSharpCode.FormDesigner
LoggingService.Info("End CodeCOMGenerator.ConvertContentDefinition");
}
+ bool IsMethodCall(CodeStatement statement, string methodName)
+ {
+ CodeExpressionStatement ces = statement as CodeExpressionStatement;
+ if (ces == null) return false;
+ CodeMethodInvokeExpression cmie = ces.Expression as CodeMethodInvokeExpression;
+ if (cmie == null) return false;
+ return cmie.Method.MethodName == methodName;
+ }
+
public static bool IsNonVisualComponent(IDesignerHost host, IComponent component)
{
IDesigner designer = host.GetDesigner(component);
return !(designer is ControlDesigner);
}
- void GenerateComponentCode(IComponent component, TextWriter writer, DesignerSerializationManager serializationManager)
+ void GenerateComponentCode(IComponent component, List outputStatements, DesignerSerializationManager serializationManager)
{
LoggingService.Debug("Generate code for: " + component.Site.Name);
Type componentType = component.GetType();
@@ -88,8 +158,6 @@ namespace ICSharpCode.FormDesigner
}
ICollection statements = serializer.Serialize(serializationManager, component) as ICollection;
- CodeGeneratorOptions options = codeDOMGeneratorUtility.CreateCodeGeneratorOptions;
- options.IndentString = "\t\t\t";
// ICSharpCode.NRefactory.Parser.CodeDOMVerboseOutputGenerator outputGenerator = new ICSharpCode.NRefactory.Parser.CodeDOMVerboseOutputGenerator();
@@ -117,17 +185,7 @@ namespace ICSharpCode.FormDesigner
}
}
- // indentation isn't generated when calling GenerateCodeFromStatement
- writer.Write(options.IndentString);
- try {
-// outputGenerator.PublicGenerateCodeFromStatement(statement, Console.Out, options);
- codeProvider.GenerateCodeFromStatement(statement, writer, options);
- } catch (Exception e) {
- codeProvider.GenerateCodeFromStatement(new CodeCommentStatement("TODO: Error while generating statement : " + e.Message),
- writer,
- options);
- LoggingService.Error(e);
- }
+ outputStatements.Add(statement);
}
}
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs
index dbee98df63..e10bf4bdc4 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/IDesignerGenerator.cs
@@ -6,42 +6,11 @@
//
using System;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.IO;
using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Drawing;
-using System.Drawing.Design;
-using System.Reflection;
-using System.Windows.Forms;
-using System.Drawing.Printing;
using System.ComponentModel;
-using System.ComponentModel.Design;
-using System.ComponentModel.Design.Serialization;
-using System.Xml;
+using System.Reflection;
using ICSharpCode.SharpDevelop.Gui;
-using ICSharpCode.SharpDevelop.Dom;
-using ICSharpCode.SharpDevelop.Project;
-using ICSharpCode.SharpDevelop.Internal.Undo;
-using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
-
-using ICSharpCode.Core;
-using ICSharpCode.FormDesigner.Services;
-using ICSharpCode.TextEditor;
-using ICSharpCode.TextEditor.Document;
-
-using ICSharpCode.NRefactory.Parser;
-using ICSharpCode.NRefactory.Parser.AST;
-using ICSharpCode.NRefactory.PrettyPrinter;
-
-using System.CodeDom;
-using System.CodeDom.Compiler;
-
-using Microsoft.CSharp;
-using Microsoft.VisualBasic;
namespace ICSharpCode.FormDesigner
{
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs
index 830efe9d35..b13e2a0820 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/DesignerGenerator/VBNetDesignerGenerator.cs
@@ -1,161 +1,36 @@
//
// 2002-2005 AlphaSierraPapa
// GNU General Public License
-//
+//
// $Revision$
//
using System;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Drawing;
-using System.Drawing.Design;
-using System.Reflection;
-using System.Windows.Forms;
-using System.Drawing.Printing;
using System.ComponentModel;
-using System.ComponentModel.Design;
-using System.ComponentModel.Design.Serialization;
-using System.Xml;
-
-using ICSharpCode.SharpDevelop.Gui;
-using ICSharpCode.SharpDevelop.Dom;
-using ICSharpCode.SharpDevelop.Project;
-using ICSharpCode.SharpDevelop.Internal.Undo;
-using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
-
+using System.Reflection;
using ICSharpCode.Core;
-using ICSharpCode.FormDesigner.Services;
-using ICSharpCode.TextEditor;
-using ICSharpCode.TextEditor.Document;
-
-using ICSharpCode.NRefactory.Parser;
-using ICSharpCode.NRefactory.Parser.AST;
-using ICSharpCode.NRefactory.PrettyPrinter;
-
-using System.CodeDom;
-using System.CodeDom.Compiler;
-
-using Microsoft.CSharp;
-using Microsoft.VisualBasic;
namespace ICSharpCode.FormDesigner
{
- public class VBNetDesignerGenerator : IDesignerGenerator
+ public class VBNetDesignerGenerator : AbstractDesignerGenerator
{
- IClass c;
- IMethod initializeComponents;
-
- FormDesignerViewContent viewContent;
- bool failedDesignerInitialize = false;
-
- string NonVisualComponentContainerName = "components";
-
- public void Attach(FormDesignerViewContent viewContent)
- {
- this.viewContent = viewContent;
- IComponentChangeService componentChangeService = (IComponentChangeService)viewContent.DesignSurface.GetService(typeof(IComponentChangeService));
- componentChangeService.ComponentAdded += new ComponentEventHandler(ComponentAdded);
- componentChangeService.ComponentRename += new ComponentRenameEventHandler(ComponentRenamed);
- componentChangeService.ComponentRemoving += new ComponentEventHandler(ComponentRemoved);
- }
-
- public void Detach()
- {
- IComponentChangeService componentChangeService = (IComponentChangeService)viewContent.DesignSurface.GetService(typeof(IComponentChangeService));
- componentChangeService.ComponentAdded -= new ComponentEventHandler(ComponentAdded);
- componentChangeService.ComponentRename -= new ComponentRenameEventHandler(ComponentRenamed);
- componentChangeService.ComponentRemoving -= new ComponentEventHandler(ComponentRemoved);
- this.viewContent = null;
- }
-
- void ComponentRemoved(object sender, ComponentEventArgs e)
- {
- try {
- Reparse(viewContent.Document.TextContent);
- foreach (IField field in c.Fields) {
- if (field.Name == e.Component.Site.Name) {
- int startOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.BeginLine - 1));
- int endOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.EndLine));
- viewContent.Document.Remove(startOffset, endOffset - startOffset);
- }
- }
- } catch (Exception ex) {
- MessageService.ShowError(ex);
- }
- }
-
- void ComponentAdded(object sender, ComponentEventArgs e)
+ protected override string GenerateFieldDeclaration(Type fieldType, string name)
{
- try {
- Reparse(viewContent.Document.TextContent);
- int endOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.EndLine));
- viewContent.Document.Insert(endOffset, "\tPrivate " + e.Component.Site.Name + " As " + e.Component.GetType() + Environment.NewLine);
- if (CodeDOMGenerator.IsNonVisualComponent(viewContent.Host, e.Component)) {
- if (!IsNonVisualComponentContainerDefined) {
- viewContent.Document.Insert(endOffset, "\tPrivate " + NonVisualComponentContainerName + " As " + typeof(Container) + Environment.NewLine);
- }
- }
- } catch (Exception ex) {
- MessageService.ShowError(ex);
- }
+ return "Private " + name + " As " + fieldType;
}
- void ComponentRenamed(object sender, ComponentRenameEventArgs e)
+ protected override System.CodeDom.Compiler.CodeDomProvider CreateCodeProvider()
{
- Reparse(viewContent.Document.TextContent);
- foreach (IField field in c.Fields) {
- if (field.Name == e.OldName) {
- int startOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.BeginLine - 1));
- int endOffset = viewContent.Document.PositionToOffset(new Point(0, field.Region.EndLine));
- viewContent.Document.Replace(startOffset, endOffset - startOffset, "\tPrivate " + e.NewName + " As " + e.Component.GetType() + Environment.NewLine);
- }
- }
+ return new Microsoft.VisualBasic.VBCodeProvider();
}
- public void MergeFormChanges()
+ protected override string CreateEventHandler(EventDescriptor edesc, string eventMethodName, string body)
{
- // generate file and get initialize components string
- StringWriter writer = new StringWriter();
- new CodeDOMGenerator(viewContent.Host, new Microsoft.VisualBasic.VBCodeProvider()).ConvertContentDefinition(writer);
- string statements = writer.ToString();
-
- Reparse(viewContent.Document.TextContent);
-
- int startOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.BeginLine + 1));
- int endOffset = viewContent.Document.PositionToOffset(new Point(0, initializeComponents.BodyRegion.EndLine - 1));
+ string param = GenerateParams(edesc);
- viewContent.Document.Replace(startOffset, endOffset - startOffset, statements);
- }
-
- protected void Reparse(string content)
- {
- // get new initialize components
- ParseInformation info = ParserService.ParseFile(viewContent.TextEditorControl.FileName, content, false, true);
- ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit;
- foreach (IClass c in cu.Classes) {
- if (FormDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(c)) {
- initializeComponents = GetInitializeComponents(c);
- if (initializeComponents != null) {
- this.c = c;
- break;
- }
- }
- }
- }
-
- IMethod GetInitializeComponents(IClass c)
- {
- foreach (IMethod method in c.Methods) {
- if ((method.Name == "InitializeComponents" || method.Name == "InitializeComponent") && method.Parameters.Count == 0) {
- return method;
- }
- }
- return null;
+ return "Sub " + eventMethodName + "(" + param + ")\n" +
+ body +
+ "\nEnd Sub\n\n";
}
protected static string GenerateParams(EventDescriptor edesc)
@@ -187,110 +62,5 @@ namespace ICSharpCode.FormDesigner
}
return param;
}
-
- ///
- /// If found return true and int as position
- ///
- ///
- ///
- ///
- public bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out int position)
- {
- if (this.failedDesignerInitialize) {
- position = 0;
- return false;
- }
-
- Reparse(viewContent.Document.TextContent);
-
- foreach (IMethod method in c.Methods) {
- if (method.Name == eventMethodName) {
- position = method.Region.BeginLine + 1;
- return true;
- }
- }
- MergeFormChanges();
- Reparse(viewContent.Document.TextContent);
-
- position = c.Region.EndLine + 1;
-
- int offset = viewContent.Document.GetLineSegment(c.Region.EndLine - 1).Offset;
-
- string param = GenerateParams(edesc);
-
- string text = "Sub " + eventMethodName + "(" + param + ")\n" +
- body +
- "\nEnd Sub\n\n";
- viewContent.Document.Insert(offset, text);
- viewContent.Document.FormattingStrategy.IndentLines(viewContent.TextEditorControl.ActiveTextAreaControl.TextArea, c.Region.EndLine - 1, c.Region.EndLine + 3);
-
- return false;
- }
-
- public ICollection GetCompatibleMethods(EventDescriptor edesc)
- {
- Reparse(viewContent.Document.TextContent);
- ArrayList compatibleMethods = new ArrayList();
- MethodInfo methodInfo = edesc.EventType.GetMethod("Invoke");
- foreach (IMethod method in c.Methods) {
- if (method.Parameters.Count == methodInfo.GetParameters().Length) {
- bool found = true;
- for (int i = 0; i < methodInfo.GetParameters().Length; ++i) {
- ParameterInfo pInfo = methodInfo.GetParameters()[i];
- IParameter p = method.Parameters[i];
- if (p.ReturnType.FullyQualifiedName != pInfo.ParameterType.ToString()) {
- found = false;
- break;
- }
- }
- if (found) {
- compatibleMethods.Add(method.Name);
- }
- }
- }
-
- return compatibleMethods;
- }
-
- public ICollection GetCompatibleMethods(EventInfo edesc)
- {
- Reparse(viewContent.Document.TextContent);
- ArrayList compatibleMethods = new ArrayList();
- MethodInfo methodInfo = edesc.GetAddMethod();
- ParameterInfo pInfo = methodInfo.GetParameters()[0];
- string eventName = pInfo.ParameterType.ToString().Replace("EventHandler", "EventArgs");
-
- foreach (IMethod method in c.Methods) {
- if (method.Parameters.Count == 2) {
- bool found = true;
-
- IParameter p = method.Parameters[1];
- if (p.ReturnType.FullyQualifiedName != eventName) {
- found = false;
- }
- if (found) {
- compatibleMethods.Add(method.Name);
- }
- }
- }
- return compatibleMethods;
- }
-
- bool IsNonVisualComponentContainerDefined
- {
- get {
- return GetField(c, NonVisualComponentContainerName) != null;
- }
- }
-
- IField GetField(IClass c, string name)
- {
- foreach (IField field in c.Fields) {
- if (field.Name == name) {
- return field;
- }
- }
- return null;
- }
}
}
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs
index e96d114ea6..02b7257a93 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerSecondaryDisplayBinding.cs
@@ -6,47 +6,19 @@
//
using System;
-using System.Text;
-using System.Text.RegularExpressions;
using System.IO;
-using System.Collections;
-using System.Diagnostics;
-using System.Drawing;
-using System.Drawing.Design;
-using System.Reflection;
-using System.Windows.Forms;
-using System.Drawing.Printing;
-using System.ComponentModel;
-using System.ComponentModel.Design;
-using System.ComponentModel.Design.Serialization;
-using System.Xml;
+using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
-using ICSharpCode.SharpDevelop.Project;
-using ICSharpCode.SharpDevelop.Internal.Undo;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
-
-using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
-using ICSharpCode.FormDesigner.Services;
-using ICSharpCode.TextEditor;
-using ICSharpCode.TextEditor.Document;
-
using ICSharpCode.NRefactory.Parser;
-using ICSharpCode.NRefactory.Parser.AST;
-using ICSharpCode.NRefactory.PrettyPrinter;
-
-using System.CodeDom;
-using System.CodeDom.Compiler;
-
-using Microsoft.CSharp;
-using Microsoft.VisualBasic;
namespace ICSharpCode.FormDesigner
{
public class FormDesignerSecondaryDisplayBinding : ISecondaryDisplayBinding
{
- IMethod GetInitializeComponents(IClass c)
+ public static IMethod GetInitializeComponents(IClass c)
{
foreach (IMethod method in c.Methods) {
if ((method.Name == "InitializeComponents" || method.Name == "InitializeComponent") && method.Parameters.Count == 0) {
@@ -69,6 +41,23 @@ namespace ICSharpCode.FormDesigner
return c.IsTypeInInheritanceTree(pc.GetClass("System.Windows.Forms.Form")) || c.IsTypeInInheritanceTree(pc.GetClass("System.Windows.Forms.UserControl"));
}
+ public static bool IsDesignable(ParseInformation info)
+ {
+ if (info != null) {
+ ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit;
+ foreach (IClass c in cu.Classes) {
+ if (BaseClassIsFormOrControl(c)) {
+ IMethod method = GetInitializeComponents(c);
+ if (method == null) {
+ return false;
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
public bool CanAttachTo(IViewContent viewContent)
{
if (viewContent is ITextEditorControlProvider) {
@@ -78,40 +67,14 @@ namespace ICSharpCode.FormDesigner
if (fileName == null)
return false;
- fileExtension = Path.GetExtension(fileName).ToLower();
+ fileExtension = Path.GetExtension(fileName).ToLowerInvariant();
switch (fileExtension) {
case ".cs":
- ParseInformation info = ParserService.ParseFile(fileName, textAreaControlProvider.TextEditorControl.Document.TextContent, false, true);
- if (info != null) {
- ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit;
- foreach (IClass c in cu.Classes) {
- if (BaseClassIsFormOrControl(c)) {
- IMethod method = GetInitializeComponents(c);
- if (method == null) {
- continue;
- }
- Console.WriteLine("TRUE "+ info);
-
- return true;
- }
- }
- }
- break;
case ".vb":
- info = ParserService.ParseFile(fileName, textAreaControlProvider.TextEditorControl.Document.TextContent, false, true);
- if (info != null) {
- ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit;
- foreach (IClass c in cu.Classes) {
- if (BaseClassIsFormOrControl(c)) {
- IMethod method = GetInitializeComponents(c);
- if (method == null) {
- continue;
- }
- return true;
- }
- }
- }
+ ParseInformation info = ParserService.ParseFile(fileName, textAreaControlProvider.TextEditorControl.Document.TextContent, false, true);
+ if (IsDesignable(info))
+ return true;
break;
case ".xfrm":
return true;
@@ -125,11 +88,8 @@ namespace ICSharpCode.FormDesigner
string fileExtension = String.Empty;
string fileName = viewContent.IsUntitled ? viewContent.UntitledName : viewContent.FileName;
- fileExtension = Path.GetExtension(fileName).ToLower();
+ fileExtension = Path.GetExtension(fileName).ToLowerInvariant();
- if (!FormKeyHandler.inserted) {
- FormKeyHandler.Insert();
- }
IDesignerLoaderProvider loader;
IDesignerGenerator generator;
diff --git a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
index 51f7e3f645..0352eb8ea9 100644
--- a/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
+++ b/src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/FormDesignerViewContent.cs
@@ -99,6 +99,10 @@ namespace ICSharpCode.FormDesigner
}
public FormDesignerViewContent(IViewContent viewContent, IDesignerLoaderProvider loader, IDesignerGenerator generator)
{
+ if (!FormKeyHandler.inserted) {
+ FormKeyHandler.Insert();
+ }
+
this.loader = loader;
this.generator = generator;
p.BackColor = Color.White;
diff --git a/src/Libraries/NRefactory/Project/Src/Output/CodeDOM/CodeDOMVerboseOutputGenerator.cs b/src/Libraries/NRefactory/Project/Src/Output/CodeDOM/CodeDOMVerboseOutputGenerator.cs
index d00911085a..64d99ed339 100644
--- a/src/Libraries/NRefactory/Project/Src/Output/CodeDOM/CodeDOMVerboseOutputGenerator.cs
+++ b/src/Libraries/NRefactory/Project/Src/Output/CodeDOM/CodeDOMVerboseOutputGenerator.cs
@@ -269,6 +269,9 @@ namespace ICSharpCode.NRefactory.Parser
protected override void GenerateConstructor(CodeConstructor e, CodeTypeDeclaration c)
{
Output.WriteLine("[CodeConstructor : {0}]", e.ToString());
+ ++Indent;
+ GenerateStatements(e.Statements);
+ --Indent;
}
protected override void GenerateTypeConstructor(CodeTypeConstructor e)
@@ -338,7 +341,7 @@ namespace ICSharpCode.NRefactory.Parser
protected override string QuoteSnippetString(string value)
{
- return value;
+ return "\"" + value + "\"";
}
#endregion