xamarin-macios/tests/generator/noasyncinternalwrapper.cs

20 строки
360 B
C#
Исходник Обычный вид История

using System;
[generator] Remove Async members from internal BaseWrapper derived types Currently we generate FooAsync members inside internal BaseWrapper derived types used by protocol support. This generated Async members are useles so we remove them to avoid extra metadata. Old generated code ```csharp internal sealed class MyFooDelegateWrapper : BaseWrapper, IMyFooDelegate { [Preserve (Conditional = true)] public MyFooDelegateWrapper (IntPtr handle, bool owns) : base (handle, owns) { } [Export ("stringMethod:completion:")] [CompilerGenerated] public unsafe void StringMethod (int arg1, [BlockProxy (typeof (ObjCRuntime.Trampolines.NIDActionArity1V0))]global::System.Action<NSError> err) { if (err == null) throw new ArgumentNullException ("err"); BlockLiteral *block_ptr_err; BlockLiteral block_err; block_err = new BlockLiteral (); block_ptr_err = &block_err; block_err.SetupBlock (Trampolines.SDActionArity1V0.Handler, err); global::ApiDefinition.Messaging.void_objc_msgSend_int_IntPtr (this.Handle, Selector.GetHandle ("stringMethod:completion:"), arg1, (IntPtr) block_ptr_err); block_ptr_err->CleanupBlock (); } [CompilerGenerated] public unsafe Task StringMethodAsync (int arg1) { var tcs = new TaskCompletionSource<bool> (); StringMethod(arg1, (obj_) => { if (obj_ != null) tcs.SetException (new NSErrorException(obj_)); else tcs.SetResult (true); }); return tcs.Task; } } ``` new generated code: ```csharp internal sealed class MyFooDelegateWrapper : BaseWrapper, IMyFooDelegate { [Preserve (Conditional = true)] public MyFooDelegateWrapper (IntPtr handle, bool owns) : base (handle, owns) { } [Export ("stringMethod:completion:")] [CompilerGenerated] public unsafe void StringMethod (int arg1, [BlockProxy (typeof (ObjCRuntime.Trampolines.NIDActionArity1V0))]global::System.Action<NSError> err) { if (err == null) throw new ArgumentNullException ("err"); BlockLiteral *block_ptr_err; BlockLiteral block_err; block_err = new BlockLiteral (); block_ptr_err = &block_err; block_err.SetupBlock (Trampolines.SDActionArity1V0.Handler, err); global::ApiDefinition.Messaging.void_objc_msgSend_int_IntPtr (this.Handle, Selector.GetHandle ("stringMethod:completion:"), arg1, (IntPtr) block_ptr_err); block_ptr_err->CleanupBlock (); } } ``` Added unit test. build diff for this change: https://gist.github.com/dalexsoto/eeaefc9d86e37b0c5ce5fe6d5d091383
2017-03-25 02:40:55 +03:00
using Foundation;
using ObjCRuntime;
namespace NoAsyncInternalWrapperTests {
[Protocol]
interface MyFooDelegate {
[Abstract]
[Async]
[Export ("requiredMethod:completion:")]
void RequiredMethod (int arg1, Action<NSError> err);
[Async]
[Export ("optional:completion:")]
void OptionalMethod (int arg1, Action<NSError> err);
[generator] Remove Async members from internal BaseWrapper derived types Currently we generate FooAsync members inside internal BaseWrapper derived types used by protocol support. This generated Async members are useles so we remove them to avoid extra metadata. Old generated code ```csharp internal sealed class MyFooDelegateWrapper : BaseWrapper, IMyFooDelegate { [Preserve (Conditional = true)] public MyFooDelegateWrapper (IntPtr handle, bool owns) : base (handle, owns) { } [Export ("stringMethod:completion:")] [CompilerGenerated] public unsafe void StringMethod (int arg1, [BlockProxy (typeof (ObjCRuntime.Trampolines.NIDActionArity1V0))]global::System.Action<NSError> err) { if (err == null) throw new ArgumentNullException ("err"); BlockLiteral *block_ptr_err; BlockLiteral block_err; block_err = new BlockLiteral (); block_ptr_err = &block_err; block_err.SetupBlock (Trampolines.SDActionArity1V0.Handler, err); global::ApiDefinition.Messaging.void_objc_msgSend_int_IntPtr (this.Handle, Selector.GetHandle ("stringMethod:completion:"), arg1, (IntPtr) block_ptr_err); block_ptr_err->CleanupBlock (); } [CompilerGenerated] public unsafe Task StringMethodAsync (int arg1) { var tcs = new TaskCompletionSource<bool> (); StringMethod(arg1, (obj_) => { if (obj_ != null) tcs.SetException (new NSErrorException(obj_)); else tcs.SetResult (true); }); return tcs.Task; } } ``` new generated code: ```csharp internal sealed class MyFooDelegateWrapper : BaseWrapper, IMyFooDelegate { [Preserve (Conditional = true)] public MyFooDelegateWrapper (IntPtr handle, bool owns) : base (handle, owns) { } [Export ("stringMethod:completion:")] [CompilerGenerated] public unsafe void StringMethod (int arg1, [BlockProxy (typeof (ObjCRuntime.Trampolines.NIDActionArity1V0))]global::System.Action<NSError> err) { if (err == null) throw new ArgumentNullException ("err"); BlockLiteral *block_ptr_err; BlockLiteral block_err; block_err = new BlockLiteral (); block_ptr_err = &block_err; block_err.SetupBlock (Trampolines.SDActionArity1V0.Handler, err); global::ApiDefinition.Messaging.void_objc_msgSend_int_IntPtr (this.Handle, Selector.GetHandle ("stringMethod:completion:"), arg1, (IntPtr) block_ptr_err); block_ptr_err->CleanupBlock (); } } ``` Added unit test. build diff for this change: https://gist.github.com/dalexsoto/eeaefc9d86e37b0c5ce5fe6d5d091383
2017-03-25 02:40:55 +03:00
}
}