diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs index 68bc29f4bf..bbd613e8c2 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs @@ -21,6 +21,7 @@ using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.TextEditor.Document; +using ReflectionLayer = ICSharpCode.SharpDevelop.Dom.ReflectionLayer; namespace ICSharpCode.FormsDesigner { @@ -397,6 +398,32 @@ namespace ICSharpCode.FormsDesigner return true; } + /// + /// Gets a method implementing the signature specified by the event descriptor + /// + protected IMethod ConvertDescriptorToDom(EventDescriptor edesc, string methodName) + { + MethodInfo mInfo = edesc.EventType.GetMethod("Invoke"); + DefaultMethod m = new DefaultMethod(completeClass, methodName); + m.ReturnType = ReflectionLayer.ReflectionReturnType.Create(m, mInfo.ReturnType, false); + foreach (ParameterInfo pInfo in mInfo.GetParameters()) { + m.Parameters.Add(new ReflectionLayer.ReflectionParameter(pInfo, m)); + } + return m; + } + + /// + /// Gets a method implementing the signature specified by the event descriptor + /// + protected ICSharpCode.NRefactory.Ast.MethodDeclaration + ConvertDescriptorToNRefactory(EventDescriptor edesc, string methodName) + { + return ICSharpCode.SharpDevelop.Dom.Refactoring.CodeGenerator.ConvertMember( + ConvertDescriptorToDom(edesc, methodName), + new ClassFinder(c, c.BodyRegion.BeginLine + 1, 1) + ) as ICSharpCode.NRefactory.Ast.MethodDeclaration; + } + protected virtual int GetEventHandlerInsertionLine(IClass c) { return c.Region.EndLine; diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CSharpDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CSharpDesignerGenerator.cs index b763f54de5..71cca630ff 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CSharpDesignerGenerator.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CSharpDesignerGenerator.cs @@ -13,6 +13,8 @@ using System.Text; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Dom; +using ICSharpCode.NRefactory.Ast; +using ICSharpCode.NRefactory.PrettyPrinter; namespace ICSharpCode.FormsDesigner { @@ -68,35 +70,14 @@ namespace ICSharpCode.FormsDesigner return r.BeginLine + 2; } - protected static string GenerateParams(EventDescriptor edesc, bool paramNames) + protected string GenerateParams(EventDescriptor edesc, bool paramNames) { - System.Type type = edesc.EventType; - MethodInfo mInfo = type.GetMethod("Invoke"); - string param = ""; - IAmbience csa = null; - try { - csa = (IAmbience)AddInTree.BuildItem("/SharpDevelop/Workbench/Ambiences/C#", null); - } catch (TreePathNotFoundException) { - LoggingService.Warn("C# ambience not found"); + CSharpOutputVisitor v = new CSharpOutputVisitor(); + MethodDeclaration md = ConvertDescriptorToNRefactory(edesc, "name"); + if (md != null) { + v.AppendCommaSeparatedList(md.Parameters); } - - for (int i = 0; i < mInfo.GetParameters().Length; ++i) { - ParameterInfo pInfo = mInfo.GetParameters()[i]; - - string typeStr = pInfo.ParameterType.ToString(); - if (csa != null) { - typeStr = csa.GetIntrinsicTypeName(typeStr); - } - param += typeStr; - if (paramNames == true) { - param += " "; - param += pInfo.Name; - } - if (i + 1 < mInfo.GetParameters().Length) { - param += ", "; - } - } - return param; + return v.Text; } } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/VBNetDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/VBNetDesignerGenerator.cs index a1e04c2ea3..021df0c689 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/VBNetDesignerGenerator.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/VBNetDesignerGenerator.cs @@ -12,6 +12,8 @@ using System.Text; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Dom; +using ICSharpCode.NRefactory.Ast; +using ICSharpCode.NRefactory.PrettyPrinter; namespace ICSharpCode.FormsDesigner { @@ -45,34 +47,14 @@ namespace ICSharpCode.FormsDesigner return b.ToString(); } - protected static string GenerateParams(EventDescriptor edesc) + protected string GenerateParams(EventDescriptor edesc) { - System.Type type = edesc.EventType; - MethodInfo mInfo = type.GetMethod("Invoke"); - string param = ""; - IAmbience csa = null; - try { - csa = (IAmbience)AddInTree.BuildItem("/SharpDevelop/Workbench/Ambiences/VBNet", null); - } catch (TreePathNotFoundException) { - LoggingService.Warn("VB ambience not found"); + VBNetOutputVisitor v = new VBNetOutputVisitor(); + MethodDeclaration md = ConvertDescriptorToNRefactory(edesc, "name"); + if (md != null) { + v.AppendCommaSeparatedList(md.Parameters); } - - for (int i = 0; i < mInfo.GetParameters().Length; ++i) { - ParameterInfo pInfo = mInfo.GetParameters()[i]; - - param += pInfo.Name; - param += " As "; - - string typeStr = pInfo.ParameterType.ToString(); - if (csa != null) { - typeStr = csa.GetIntrinsicTypeName(typeStr); - } - param += typeStr; - if (i + 1 < mInfo.GetParameters().Length) { - param += ", "; - } - } - return param; + return v.Text; } } } diff --git a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs index fa319ac673..2bbdcf11da 100644 --- a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs +++ b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs @@ -2472,11 +2472,12 @@ namespace ICSharpCode.NRefactory.PrettyPrinter } } - void AppendCommaSeparatedList(IList list) + public void AppendCommaSeparatedList(ICollection list) where T : class, INode { if (list != null) { - for (int i = 0; i < list.Count; ++i) { - nodeTracker.TrackedVisit(((INode)list[i]), null); + int i = 0; + foreach (T node in list) { + nodeTracker.TrackedVisit(node, null); if (i + 1 < list.Count) { PrintFormattedComma(); } @@ -2484,6 +2485,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter outputFormatter.NewLine(); outputFormatter.Indent(); } + i++; } } } diff --git a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs index 246f430ddb..f79b2348aa 100644 --- a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs +++ b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs @@ -2646,11 +2646,12 @@ namespace ICSharpCode.NRefactory.PrettyPrinter } } - void AppendCommaSeparatedList(IList list) + public void AppendCommaSeparatedList(ICollection list) where T : class, INode { if (list != null) { - for (int i = 0; i < list.Count; ++i) { - nodeTracker.TrackedVisit(((INode)list[i]), null); + int i = 0; + foreach (T node in list) { + nodeTracker.TrackedVisit(node, null); if (i + 1 < list.Count) { outputFormatter.PrintToken(Tokens.Comma); outputFormatter.Space(); @@ -2660,6 +2661,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter outputFormatter.PrintText("\t"); } } + i++; } } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionParameter.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionParameter.cs index d35b3c8d73..ebcf2fa0fd 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionParameter.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionParameter.cs @@ -10,7 +10,7 @@ using System.Reflection; namespace ICSharpCode.SharpDevelop.Dom.ReflectionLayer { - internal class ReflectionParameter : DefaultParameter + public class ReflectionParameter : DefaultParameter { public ReflectionParameter(ParameterInfo parameterInfo, IMember member) : base(parameterInfo.Name) { diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionReturnType.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionReturnType.cs index bdfdffb08a..e2f5d064e1 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionReturnType.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/ReflectionReturnType.cs @@ -10,7 +10,7 @@ using System.Collections.Generic; namespace ICSharpCode.SharpDevelop.Dom.ReflectionLayer { - internal static class ReflectionReturnType + public static class ReflectionReturnType { public static bool IsDefaultType(Type type) {