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)
{