diff options
author | Atsushi Eno <atsushieno@gmail.com> | 2009-08-10 18:55:40 +0400 |
---|---|---|
committer | Atsushi Eno <atsushieno@gmail.com> | 2009-08-10 18:55:40 +0400 |
commit | a2c0c025641175dc69d916341c5043b97babfcc9 (patch) | |
tree | 053f68e4d2e29f1b5e19471bee695ba1bf5f4a43 /mcs | |
parent | 31a3d7f1019b2f2e22aa815153c83b0563692a60 (diff) |
2009-08-10 Atsushi Enomoto <atsushi@ximian.com>
* MoonlightChannelBaseExtension.cs : fixed a couple of generated
code to compile on .NET (not in mcs yet; some nested generics bug).
svn path=/trunk/mcs/; revision=139645
Diffstat (limited to 'mcs')
-rw-r--r-- | mcs/tools/svcutil/ChangeLog | 5 | ||||
-rw-r--r-- | mcs/tools/svcutil/MoonlightChannelBaseExtension.cs | 28 |
2 files changed, 20 insertions, 13 deletions
diff --git a/mcs/tools/svcutil/ChangeLog b/mcs/tools/svcutil/ChangeLog index ee5e9deb32c..e96b040110e 100644 --- a/mcs/tools/svcutil/ChangeLog +++ b/mcs/tools/svcutil/ChangeLog @@ -1,5 +1,10 @@ 2009-08-10 Atsushi Enomoto <atsushi@ximian.com> + * MoonlightChannelBaseExtension.cs : fixed a couple of generated + code to compile on .NET (not in mcs yet; some nested generics bug). + +2009-08-10 Atsushi Enomoto <atsushi@ximian.com> + * Driver.cs, CommandLineOptions.cs : add moonlight proxy generator support. * MoonlightChannelBaseExtension.cs : new, moonlight proxy generator. diff --git a/mcs/tools/svcutil/MoonlightChannelBaseExtension.cs b/mcs/tools/svcutil/MoonlightChannelBaseExtension.cs index 06457cf1c68..8a99a6ed4b5 100644 --- a/mcs/tools/svcutil/MoonlightChannelBaseExtension.cs +++ b/mcs/tools/svcutil/MoonlightChannelBaseExtension.cs @@ -138,9 +138,9 @@ namespace Mono.ServiceContractTool var channelBase = new CodeTypeReference ("ChannelBase", gt); var type = new CodeTypeDeclaration (name); parentClass.Members.Add (type); - type.TypeAttributes = TypeAttributes.Public; type.BaseTypes.Add (channelBase); type.BaseTypes.Add (new CodeTypeReference (cd.Name)); + type.TypeAttributes |= TypeAttributes.NestedPrivate; ml_context.ChannelType = type; @@ -215,24 +215,24 @@ namespace Mono.ServiceContractTool cm.Attributes = MemberAttributes.Public | MemberAttributes.Final; - List<CodeExpression> inArgs = new List<CodeExpression> (); - List<CodeExpression> outArgs = new List<CodeExpression> (); + var inArgs = new List<CodeParameterDeclarationExpression > (); + var outArgs = new List<CodeParameterDeclarationExpression > (); - foreach (var md in od.Messages) { - var l = md.Direction == MessageDirection.Input ? inArgs : outArgs; - foreach (var p in md.Body.Parts) - if (p != md.Body.ReturnValue) - l.Add (new CodeArgumentReferenceExpression (p.Name)); + foreach (CodeParameterDeclarationExpression p in context.BeginMethod.Parameters) { + inArgs.Add (p); + cm.Parameters.Add (p); } + inArgs.RemoveAt (inArgs.Count - 1); + inArgs.RemoveAt (inArgs.Count - 1); - cm.Parameters.Add (new CodeParameterDeclarationExpression (new CodeTypeReference (typeof (AsyncCallback)), "asyncCallback")); - cm.Parameters.Add (new CodeParameterDeclarationExpression (new CodeTypeReference (typeof (object)), "userState")); +// cm.Parameters.Add (new CodeParameterDeclarationExpression (new CodeTypeReference (typeof (AsyncCallback)), "asyncCallback")); +// cm.Parameters.Add (new CodeParameterDeclarationExpression (new CodeTypeReference (typeof (object)), "userState")); cm.ReturnType = new CodeTypeReference (typeof (IAsyncResult)); var argsDecl = new CodeVariableDeclarationStatement ( typeof (object []), "args", - new CodeArrayCreateExpression (typeof (object), inArgs.ToArray ())); + new CodeArrayCreateExpression (typeof (object), inArgs.ConvertAll<CodeExpression> (decl => new CodeArgumentReferenceExpression (decl.Name)).ToArray ())); cm.Statements.Add (argsDecl); var args = new List<CodeExpression> (); @@ -271,12 +271,14 @@ namespace Mono.ServiceContractTool new CodeArrayCreateExpression (typeof (object), new CodePrimitiveExpression (outArgs.Count))); cm.Statements.Add (argsDecl); - call = new CodeMethodInvokeExpression ( + call = new CodeCastExpression ( + context.EndMethod.ReturnType, + new CodeMethodInvokeExpression ( new CodeBaseReferenceExpression (), "EndInvoke", new CodePrimitiveExpression (od.Name), new CodeVariableReferenceExpression ("args"), - new CodeArgumentReferenceExpression (resultArgName)); + new CodeArgumentReferenceExpression (resultArgName))); if (cm.ReturnType.BaseType == "System.Void") cm.Statements.Add (new CodeExpressionStatement (call)); |