| Index: mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
|
| diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
|
| index 69f2adfddb70f485a0f6dfcd55a65fe8dea7db69..0e5d5fcd155475c59bbf1b7582ce420865ee11de 100644
|
| --- a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
|
| +++ b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
|
| @@ -95,6 +95,13 @@ class Bar extends bindings.Struct {
|
|
|
| Bar() : super(kVersions.last.size);
|
|
|
| + Bar.init(
|
| + int this.alpha,
|
| + int this.beta,
|
| + int this.gamma,
|
| + BarType this.type
|
| + ) : super(kVersions.last.size);
|
| +
|
| static Bar deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -225,6 +232,24 @@ class Foo extends bindings.Struct {
|
|
|
| Foo() : super(kVersions.last.size);
|
|
|
| + Foo.init(
|
| + int this.x,
|
| + int this.y,
|
| + bool this.a,
|
| + bool this.b,
|
| + bool this.c,
|
| + core.MojoMessagePipeEndpoint this.source,
|
| + Bar this.bar,
|
| + List<int> this.data,
|
| + List<Bar> this.extraBars,
|
| + String this.name,
|
| + List<core.MojoDataPipeConsumer> this.inputStreams,
|
| + List<core.MojoDataPipeProducer> this.outputStreams,
|
| + List<List<bool>> this.arrayOfArrayOfBools,
|
| + List<List<List<String>>> this.multiArrayOfStrings,
|
| + List<bool> this.arrayOfBools
|
| + ) : super(kVersions.last.size);
|
| +
|
| static Foo deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -578,6 +603,41 @@ class DefaultsTest extends bindings.Struct {
|
|
|
| DefaultsTest() : super(kVersions.last.size);
|
|
|
| + DefaultsTest.init(
|
| + int this.a0,
|
| + int this.a1,
|
| + int this.a2,
|
| + int this.a3,
|
| + bool this.a11,
|
| + bool this.a12,
|
| + int this.a4,
|
| + int this.a5,
|
| + int this.a6,
|
| + int this.a7,
|
| + int this.a8,
|
| + int this.a9,
|
| + int this.a10,
|
| + double this.a13,
|
| + double this.a14,
|
| + double this.a15,
|
| + double this.a16,
|
| + double this.a17,
|
| + List<int> this.a18,
|
| + String this.a19,
|
| + BarType this.a20,
|
| + double this.a29,
|
| + sample_import_mojom.Point this.a21,
|
| + sample_import2_mojom.Thing this.a22,
|
| + int this.a23,
|
| + int this.a24,
|
| + int this.a25,
|
| + double this.a26,
|
| + double this.a27,
|
| + double this.a28,
|
| + double this.a30,
|
| + double this.a31
|
| + ) : super(kVersions.last.size);
|
| +
|
| static DefaultsTest deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -1060,6 +1120,11 @@ class StructWithHoleV1 extends bindings.Struct {
|
|
|
| StructWithHoleV1() : super(kVersions.last.size);
|
|
|
| + StructWithHoleV1.init(
|
| + int this.v1,
|
| + int this.v2
|
| + ) : super(kVersions.last.size);
|
| +
|
| static StructWithHoleV1 deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -1147,6 +1212,12 @@ class StructWithHoleV2 extends bindings.Struct {
|
|
|
| StructWithHoleV2() : super(kVersions.last.size);
|
|
|
| + StructWithHoleV2.init(
|
| + int this.v1,
|
| + int this.v3,
|
| + int this.v2
|
| + ) : super(kVersions.last.size);
|
| +
|
| static StructWithHoleV2 deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -1245,6 +1316,10 @@ class NonNullableMapStruct extends bindings.Struct {
|
|
|
| NonNullableMapStruct() : super(kVersions.last.size);
|
|
|
| + NonNullableMapStruct.init(
|
| + Map<String, String> this.mapField
|
| + ) : super(kVersions.last.size);
|
| +
|
| static NonNullableMapStruct deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -1370,6 +1445,12 @@ class _ServiceFrobinateParams extends bindings.Struct {
|
|
|
| _ServiceFrobinateParams() : super(kVersions.last.size);
|
|
|
| + _ServiceFrobinateParams.init(
|
| + Foo this.foo,
|
| + ServiceBazOptions this.baz,
|
| + PortInterface this.port
|
| + ) : super(kVersions.last.size);
|
| +
|
| static _ServiceFrobinateParams deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -1470,6 +1551,10 @@ class ServiceFrobinateResponseParams extends bindings.Struct {
|
|
|
| ServiceFrobinateResponseParams() : super(kVersions.last.size);
|
|
|
| + ServiceFrobinateResponseParams.init(
|
| + int this.result
|
| + ) : super(kVersions.last.size);
|
| +
|
| static ServiceFrobinateResponseParams deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -1542,6 +1627,10 @@ class _ServiceGetPortParams extends bindings.Struct {
|
|
|
| _ServiceGetPortParams() : super(kVersions.last.size);
|
|
|
| + _ServiceGetPortParams.init(
|
| + PortInterfaceRequest this.port
|
| + ) : super(kVersions.last.size);
|
| +
|
| static _ServiceGetPortParams deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -1614,6 +1703,11 @@ class _PortPostMessageParams extends bindings.Struct {
|
|
|
| _PortPostMessageParams() : super(kVersions.last.size);
|
|
|
| + _PortPostMessageParams.init(
|
| + String this.messageText,
|
| + PortInterface this.port
|
| + ) : super(kVersions.last.size);
|
| +
|
| static _PortPostMessageParams deserialize(bindings.Message message) {
|
| var decoder = new bindings.Decoder(message);
|
| var result = decode(decoder);
|
| @@ -1744,14 +1838,17 @@ class ServiceBazOptions extends bindings.MojoEnum {
|
| }
|
|
|
| class _ServiceServiceDescription implements service_describer.ServiceDescription {
|
| - dynamic getTopLevelInterface([Function responseFactory]) =>
|
| - responseFactory(null);
|
| + void getTopLevelInterface(Function responder) {
|
| + responder(null);
|
| + }
|
|
|
| - dynamic getTypeDefinition(String typeKey, [Function responseFactory]) =>
|
| - responseFactory(null);
|
| + void getTypeDefinition(String typeKey, Function responder) {
|
| + responder(null);
|
| + }
|
|
|
| - dynamic getAllTypeDefinitions([Function responseFactory]) =>
|
| - responseFactory(null);
|
| + void getAllTypeDefinitions(Function responder) {
|
| + responder(null);
|
| + }
|
| }
|
|
|
| abstract class Service {
|
| @@ -1776,7 +1873,7 @@ abstract class Service {
|
| s.connectToService(url, p, name);
|
| return p;
|
| }
|
| - dynamic frobinate(Foo foo,ServiceBazOptions baz,PortInterface port,[Function responseFactory = null]);
|
| + void frobinate(Foo foo,ServiceBazOptions baz,PortInterface port,void callback(int result));
|
| void getPort(PortInterfaceRequest port);
|
| static const int kFavoriteBaz = 1;
|
| }
|
| @@ -1828,18 +1925,14 @@ class _ServiceProxyControl
|
| proxyError("Expected a message with a valid request Id.");
|
| return;
|
| }
|
| - Completer c = completerMap[message.header.requestId];
|
| - if (c == null) {
|
| + Function callback = callbackMap[message.header.requestId];
|
| + if (callback == null) {
|
| proxyError(
|
| "Message had unknown request Id: ${message.header.requestId}");
|
| return;
|
| }
|
| - completerMap.remove(message.header.requestId);
|
| - if (c.isCompleted) {
|
| - proxyError("Response completer already completed");
|
| - return;
|
| - }
|
| - c.complete(r);
|
| + callbackMap.remove(message.header.requestId);
|
| + callback(r.result );
|
| break;
|
| default:
|
| proxyError("Unexpected message type: ${message.header.type}");
|
| @@ -1884,19 +1977,21 @@ class ServiceProxy
|
| }
|
|
|
|
|
| - dynamic frobinate(Foo foo,ServiceBazOptions baz,PortInterface port,[Function responseFactory = null]) {
|
| + void frobinate(Foo foo,ServiceBazOptions baz,PortInterface port,void callback(int result)) {
|
| if (impl != null) {
|
| - return new Future(() => impl.frobinate(foo,baz,port,_ServiceStubControl._serviceFrobinateResponseParamsFactory));
|
| + impl.frobinate(foo,baz,port,callback);
|
| + return;
|
| }
|
| var params = new _ServiceFrobinateParams();
|
| params.foo = foo;
|
| params.baz = baz;
|
| params.port = port;
|
| - return ctrl.sendMessageWithRequestId(
|
| + ctrl.sendMessageWithRequestId(
|
| params,
|
| _serviceMethodFrobinateName,
|
| -1,
|
| - bindings.MessageHeader.kMessageExpectsResponse);
|
| + bindings.MessageHeader.kMessageExpectsResponse,
|
| + callback);
|
| }
|
| void getPort(PortInterfaceRequest port) {
|
| if (impl != null) {
|
| @@ -1936,17 +2031,24 @@ class _ServiceStubControl
|
| String get serviceName => Service.serviceName;
|
|
|
|
|
| - static ServiceFrobinateResponseParams _serviceFrobinateResponseParamsFactory(int result) {
|
| - var result = new ServiceFrobinateResponseParams();
|
| - result.result = result;
|
| - return result;
|
| + Function _serviceFrobinateResponseParamsResponder(
|
| + int requestId) {
|
| + return (int result) {
|
| + var result = new ServiceFrobinateResponseParams();
|
| + result.result = result;
|
| + sendResponse(buildResponseWithId(
|
| + result,
|
| + _serviceMethodFrobinateName,
|
| + requestId,
|
| + bindings.MessageHeader.kMessageIsResponse));
|
| + };
|
| }
|
|
|
| - dynamic handleMessage(bindings.ServiceMessage message) {
|
| + void handleMessage(bindings.ServiceMessage message) {
|
| if (bindings.ControlMessageHandler.isControlMessage(message)) {
|
| - return bindings.ControlMessageHandler.handleMessage(this,
|
| - 0,
|
| - message);
|
| + bindings.ControlMessageHandler.handleMessage(
|
| + this, 0, message);
|
| + return;
|
| }
|
| if (_impl == null) {
|
| throw new core.MojoApiError("$this has no implementation set");
|
| @@ -1955,24 +2057,7 @@ class _ServiceStubControl
|
| case _serviceMethodFrobinateName:
|
| var params = _ServiceFrobinateParams.deserialize(
|
| message.payload);
|
| - var response = _impl.frobinate(params.foo,params.baz,params.port,_serviceFrobinateResponseParamsFactory);
|
| - if (response is Future) {
|
| - return response.then((response) {
|
| - if (response != null) {
|
| - return buildResponseWithId(
|
| - response,
|
| - _serviceMethodFrobinateName,
|
| - message.header.requestId,
|
| - bindings.MessageHeader.kMessageIsResponse);
|
| - }
|
| - });
|
| - } else if (response != null) {
|
| - return buildResponseWithId(
|
| - response,
|
| - _serviceMethodFrobinateName,
|
| - message.header.requestId,
|
| - bindings.MessageHeader.kMessageIsResponse);
|
| - }
|
| + _impl.frobinate(params.foo, params.baz, params.port, _serviceFrobinateResponseParamsResponder(message.header.requestId));
|
| break;
|
| case _serviceMethodGetPortName:
|
| var params = _ServiceGetPortParams.deserialize(
|
| @@ -1983,7 +2068,6 @@ class _ServiceStubControl
|
| throw new bindings.MojoCodecError("Unexpected message name");
|
| break;
|
| }
|
| - return null;
|
| }
|
|
|
| Service get impl => _impl;
|
| @@ -2037,8 +2121,8 @@ class ServiceStub
|
| }
|
|
|
|
|
| - dynamic frobinate(Foo foo,ServiceBazOptions baz,PortInterface port,[Function responseFactory = null]) {
|
| - return impl.frobinate(foo,baz,port,responseFactory);
|
| + void frobinate(Foo foo,ServiceBazOptions baz,PortInterface port,void callback(int result)) {
|
| + return impl.frobinate(foo,baz,port,callback);
|
| }
|
| void getPort(PortInterfaceRequest port) {
|
| return impl.getPort(port);
|
| @@ -2048,14 +2132,17 @@ class ServiceStub
|
| const int _portMethodPostMessageName = 0;
|
|
|
| class _PortServiceDescription implements service_describer.ServiceDescription {
|
| - dynamic getTopLevelInterface([Function responseFactory]) =>
|
| - responseFactory(null);
|
| + void getTopLevelInterface(Function responder) {
|
| + responder(null);
|
| + }
|
|
|
| - dynamic getTypeDefinition(String typeKey, [Function responseFactory]) =>
|
| - responseFactory(null);
|
| + void getTypeDefinition(String typeKey, Function responder) {
|
| + responder(null);
|
| + }
|
|
|
| - dynamic getAllTypeDefinitions([Function responseFactory]) =>
|
| - responseFactory(null);
|
| + void getAllTypeDefinitions(Function responder) {
|
| + responder(null);
|
| + }
|
| }
|
|
|
| abstract class Port {
|
| @@ -2206,11 +2293,11 @@ class _PortStubControl
|
|
|
|
|
|
|
| - dynamic handleMessage(bindings.ServiceMessage message) {
|
| + void handleMessage(bindings.ServiceMessage message) {
|
| if (bindings.ControlMessageHandler.isControlMessage(message)) {
|
| - return bindings.ControlMessageHandler.handleMessage(this,
|
| - 0,
|
| - message);
|
| + bindings.ControlMessageHandler.handleMessage(
|
| + this, 0, message);
|
| + return;
|
| }
|
| if (_impl == null) {
|
| throw new core.MojoApiError("$this has no implementation set");
|
| @@ -2225,7 +2312,6 @@ class _PortStubControl
|
| throw new bindings.MojoCodecError("Unexpected message name");
|
| break;
|
| }
|
| - return null;
|
| }
|
|
|
| Port get impl => _impl;
|
| @@ -2297,7 +2383,7 @@ mojom_types.RuntimeTypeInfo _initRuntimeTypeInfo() {
|
| // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
|
| // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
|
| // file. The string contains the base64 encoding of the gzip-compressed bytes.
|
| - var serializedRuntimeTypeInfo = "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";
|
| + var serializedRuntimeTypeInfo = "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";
|
|
|
| // Deserialize RuntimeTypeInfo
|
| var bytes = BASE64.decode(serializedRuntimeTypeInfo);
|
|
|