| Index: mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
 | 
| diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
 | 
| index bac34cb8cc68d568b6da2ae171fc56c67d23983e..fa8c8f322b380e565c50cb0805a08a083a30c879 100644
 | 
| --- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
 | 
| +++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
 | 
| @@ -79,6 +79,14 @@ class StructOfUnions extends bindings.Struct {
 | 
|  
 | 
|    StructOfUnions() : super(kVersions.last.size);
 | 
|  
 | 
| +  StructOfUnions.init(
 | 
| +    ObjectUnion this.u, 
 | 
| +    List<ObjectUnion> this.aOu, 
 | 
| +    List<HandleUnion> this.aHu, 
 | 
| +    Map<int, ObjectUnion> this.mOu, 
 | 
| +    Map<int, HandleUnion> this.mHu
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static StructOfUnions deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -324,6 +332,12 @@ class WrapperStruct extends bindings.Struct {
 | 
|  
 | 
|    WrapperStruct() : super(kVersions.last.size);
 | 
|  
 | 
| +  WrapperStruct.init(
 | 
| +    ObjectUnion this.objectUnion, 
 | 
| +    PodUnion this.podUnion, 
 | 
| +    HandleUnion this.handleUnion
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static WrapperStruct deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -419,6 +433,10 @@ class DummyStruct extends bindings.Struct {
 | 
|  
 | 
|    DummyStruct() : super(kVersions.last.size);
 | 
|  
 | 
| +  DummyStruct.init(
 | 
| +    int this.fInt8
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static DummyStruct deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -497,6 +515,16 @@ class SmallStruct extends bindings.Struct {
 | 
|  
 | 
|    SmallStruct() : super(kVersions.last.size);
 | 
|  
 | 
| +  SmallStruct.init(
 | 
| +    DummyStruct this.dummyStruct, 
 | 
| +    PodUnion this.podUnion, 
 | 
| +    List<PodUnion> this.podUnionArray, 
 | 
| +    List<PodUnion> this.nullablePodUnionArray, 
 | 
| +    List<DummyStruct> this.sArray, 
 | 
| +    Map<String, PodUnion> this.podUnionMap, 
 | 
| +    Map<String, PodUnion> this.nullablePodUnionMap
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static SmallStruct deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -814,6 +842,10 @@ class SmallStructNonNullableUnion extends bindings.Struct {
 | 
|  
 | 
|    SmallStructNonNullableUnion() : super(kVersions.last.size);
 | 
|  
 | 
| +  SmallStructNonNullableUnion.init(
 | 
| +    PodUnion this.podUnion
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static SmallStructNonNullableUnion deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -890,6 +922,10 @@ class StructNullObjectUnion extends bindings.Struct {
 | 
|  
 | 
|    StructNullObjectUnion() : super(kVersions.last.size);
 | 
|  
 | 
| +  StructNullObjectUnion.init(
 | 
| +    ObjectOnlyUnion this.objUnion
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static StructNullObjectUnion deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -963,6 +999,11 @@ class SmallObjStruct extends bindings.Struct {
 | 
|  
 | 
|    SmallObjStruct() : super(kVersions.last.size);
 | 
|  
 | 
| +  SmallObjStruct.init(
 | 
| +    ObjectUnion this.objUnion, 
 | 
| +    int this.fInt8
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static SmallObjStruct deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -1053,6 +1094,11 @@ class TryNonNullStruct extends bindings.Struct {
 | 
|  
 | 
|    TryNonNullStruct() : super(kVersions.last.size);
 | 
|  
 | 
| +  TryNonNullStruct.init(
 | 
| +    DummyStruct this.nullable, 
 | 
| +    DummyStruct this.nonNullable
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static TryNonNullStruct deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -1140,6 +1186,10 @@ class IncludingStruct extends bindings.Struct {
 | 
|  
 | 
|    IncludingStruct() : super(kVersions.last.size);
 | 
|  
 | 
| +  IncludingStruct.init(
 | 
| +    test_included_unions_mojom.IncludedUnion this.a
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static IncludingStruct deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -1216,6 +1266,10 @@ class _SmallCacheSetIntValueParams extends bindings.Struct {
 | 
|  
 | 
|    _SmallCacheSetIntValueParams() : super(kVersions.last.size);
 | 
|  
 | 
| +  _SmallCacheSetIntValueParams.init(
 | 
| +    int this.intValue
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static _SmallCacheSetIntValueParams deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -1287,6 +1341,9 @@ class _SmallCacheGetIntValueParams extends bindings.Struct {
 | 
|  
 | 
|    _SmallCacheGetIntValueParams() : super(kVersions.last.size);
 | 
|  
 | 
| +  _SmallCacheGetIntValueParams.init(
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static _SmallCacheGetIntValueParams deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -1346,6 +1403,10 @@ class SmallCacheGetIntValueResponseParams extends bindings.Struct {
 | 
|  
 | 
|    SmallCacheGetIntValueResponseParams() : super(kVersions.last.size);
 | 
|  
 | 
| +  SmallCacheGetIntValueResponseParams.init(
 | 
| +    int this.intValue
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static SmallCacheGetIntValueResponseParams deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -1418,6 +1479,10 @@ class _UnionInterfaceEchoParams extends bindings.Struct {
 | 
|  
 | 
|    _UnionInterfaceEchoParams() : super(kVersions.last.size);
 | 
|  
 | 
| +  _UnionInterfaceEchoParams.init(
 | 
| +    PodUnion this.inVal
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static _UnionInterfaceEchoParams deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -1494,6 +1559,10 @@ class UnionInterfaceEchoResponseParams extends bindings.Struct {
 | 
|  
 | 
|    UnionInterfaceEchoResponseParams() : super(kVersions.last.size);
 | 
|  
 | 
| +  UnionInterfaceEchoResponseParams.init(
 | 
| +    PodUnion this.outVal
 | 
| +  ) : super(kVersions.last.size);
 | 
| +
 | 
|    static UnionInterfaceEchoResponseParams deserialize(bindings.Message message) {
 | 
|      var decoder = new bindings.Decoder(message);
 | 
|      var result = decode(decoder);
 | 
| @@ -2954,14 +3023,17 @@ const int _smallCacheMethodSetIntValueName = 0;
 | 
|  const int _smallCacheMethodGetIntValueName = 1;
 | 
|  
 | 
|  class _SmallCacheServiceDescription 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 SmallCache {
 | 
| @@ -2987,7 +3059,7 @@ abstract class SmallCache {
 | 
|      return p;
 | 
|    }
 | 
|    void setIntValue(int intValue);
 | 
| -  dynamic getIntValue([Function responseFactory = null]);
 | 
| +  void getIntValue(void callback(int intValue));
 | 
|  }
 | 
|  
 | 
|  abstract class SmallCacheInterface
 | 
| @@ -3037,18 +3109,14 @@ class _SmallCacheProxyControl
 | 
|            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.intValue );
 | 
|          break;
 | 
|        default:
 | 
|          proxyError("Unexpected message type: ${message.header.type}");
 | 
| @@ -3107,16 +3175,18 @@ class SmallCacheProxy
 | 
|      ctrl.sendMessage(params,
 | 
|          _smallCacheMethodSetIntValueName);
 | 
|    }
 | 
| -  dynamic getIntValue([Function responseFactory = null]) {
 | 
| +  void getIntValue(void callback(int intValue)) {
 | 
|      if (impl != null) {
 | 
| -      return new Future(() => impl.getIntValue(_SmallCacheStubControl._smallCacheGetIntValueResponseParamsFactory));
 | 
| +      impl.getIntValue(callback);
 | 
| +      return;
 | 
|      }
 | 
|      var params = new _SmallCacheGetIntValueParams();
 | 
| -    return ctrl.sendMessageWithRequestId(
 | 
| +    ctrl.sendMessageWithRequestId(
 | 
|          params,
 | 
|          _smallCacheMethodGetIntValueName,
 | 
|          -1,
 | 
| -        bindings.MessageHeader.kMessageExpectsResponse);
 | 
| +        bindings.MessageHeader.kMessageExpectsResponse,
 | 
| +        callback);
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -3142,17 +3212,24 @@ class _SmallCacheStubControl
 | 
|    String get serviceName => SmallCache.serviceName;
 | 
|  
 | 
|  
 | 
| -  static SmallCacheGetIntValueResponseParams _smallCacheGetIntValueResponseParamsFactory(int intValue) {
 | 
| -    var result = new SmallCacheGetIntValueResponseParams();
 | 
| -    result.intValue = intValue;
 | 
| -    return result;
 | 
| +  Function _smallCacheGetIntValueResponseParamsResponder(
 | 
| +      int requestId) {
 | 
| +  return (int intValue) {
 | 
| +      var result = new SmallCacheGetIntValueResponseParams();
 | 
| +      result.intValue = intValue;
 | 
| +      sendResponse(buildResponseWithId(
 | 
| +          result,
 | 
| +          _smallCacheMethodGetIntValueName,
 | 
| +          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");
 | 
| @@ -3164,30 +3241,12 @@ class _SmallCacheStubControl
 | 
|          _impl.setIntValue(params.intValue);
 | 
|          break;
 | 
|        case _smallCacheMethodGetIntValueName:
 | 
| -        var response = _impl.getIntValue(_smallCacheGetIntValueResponseParamsFactory);
 | 
| -        if (response is Future) {
 | 
| -          return response.then((response) {
 | 
| -            if (response != null) {
 | 
| -              return buildResponseWithId(
 | 
| -                  response,
 | 
| -                  _smallCacheMethodGetIntValueName,
 | 
| -                  message.header.requestId,
 | 
| -                  bindings.MessageHeader.kMessageIsResponse);
 | 
| -            }
 | 
| -          });
 | 
| -        } else if (response != null) {
 | 
| -          return buildResponseWithId(
 | 
| -              response,
 | 
| -              _smallCacheMethodGetIntValueName,
 | 
| -              message.header.requestId,
 | 
| -              bindings.MessageHeader.kMessageIsResponse);
 | 
| -        }
 | 
| +        _impl.getIntValue(_smallCacheGetIntValueResponseParamsResponder(message.header.requestId));
 | 
|          break;
 | 
|        default:
 | 
|          throw new bindings.MojoCodecError("Unexpected message name");
 | 
|          break;
 | 
|      }
 | 
| -    return null;
 | 
|    }
 | 
|  
 | 
|    SmallCache get impl => _impl;
 | 
| @@ -3244,22 +3303,25 @@ class SmallCacheStub
 | 
|    void setIntValue(int intValue) {
 | 
|      return impl.setIntValue(intValue);
 | 
|    }
 | 
| -  dynamic getIntValue([Function responseFactory = null]) {
 | 
| -    return impl.getIntValue(responseFactory);
 | 
| +  void getIntValue(void callback(int intValue)) {
 | 
| +    return impl.getIntValue(callback);
 | 
|    }
 | 
|  }
 | 
|  
 | 
|  const int _unionInterfaceMethodEchoName = 0;
 | 
|  
 | 
|  class _UnionInterfaceServiceDescription 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 UnionInterface {
 | 
| @@ -3284,7 +3346,7 @@ abstract class UnionInterface {
 | 
|      s.connectToService(url, p, name);
 | 
|      return p;
 | 
|    }
 | 
| -  dynamic echo(PodUnion inVal,[Function responseFactory = null]);
 | 
| +  void echo(PodUnion inVal,void callback(PodUnion outVal));
 | 
|  }
 | 
|  
 | 
|  abstract class UnionInterfaceInterface
 | 
| @@ -3334,18 +3396,14 @@ class _UnionInterfaceProxyControl
 | 
|            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.outVal );
 | 
|          break;
 | 
|        default:
 | 
|          proxyError("Unexpected message type: ${message.header.type}");
 | 
| @@ -3390,17 +3448,19 @@ class UnionInterfaceProxy
 | 
|    }
 | 
|  
 | 
|  
 | 
| -  dynamic echo(PodUnion inVal,[Function responseFactory = null]) {
 | 
| +  void echo(PodUnion inVal,void callback(PodUnion outVal)) {
 | 
|      if (impl != null) {
 | 
| -      return new Future(() => impl.echo(inVal,_UnionInterfaceStubControl._unionInterfaceEchoResponseParamsFactory));
 | 
| +      impl.echo(inVal,callback);
 | 
| +      return;
 | 
|      }
 | 
|      var params = new _UnionInterfaceEchoParams();
 | 
|      params.inVal = inVal;
 | 
| -    return ctrl.sendMessageWithRequestId(
 | 
| +    ctrl.sendMessageWithRequestId(
 | 
|          params,
 | 
|          _unionInterfaceMethodEchoName,
 | 
|          -1,
 | 
| -        bindings.MessageHeader.kMessageExpectsResponse);
 | 
| +        bindings.MessageHeader.kMessageExpectsResponse,
 | 
| +        callback);
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -3426,17 +3486,24 @@ class _UnionInterfaceStubControl
 | 
|    String get serviceName => UnionInterface.serviceName;
 | 
|  
 | 
|  
 | 
| -  static UnionInterfaceEchoResponseParams _unionInterfaceEchoResponseParamsFactory(PodUnion outVal) {
 | 
| -    var result = new UnionInterfaceEchoResponseParams();
 | 
| -    result.outVal = outVal;
 | 
| -    return result;
 | 
| +  Function _unionInterfaceEchoResponseParamsResponder(
 | 
| +      int requestId) {
 | 
| +  return (PodUnion outVal) {
 | 
| +      var result = new UnionInterfaceEchoResponseParams();
 | 
| +      result.outVal = outVal;
 | 
| +      sendResponse(buildResponseWithId(
 | 
| +          result,
 | 
| +          _unionInterfaceMethodEchoName,
 | 
| +          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");
 | 
| @@ -3445,30 +3512,12 @@ class _UnionInterfaceStubControl
 | 
|        case _unionInterfaceMethodEchoName:
 | 
|          var params = _UnionInterfaceEchoParams.deserialize(
 | 
|              message.payload);
 | 
| -        var response = _impl.echo(params.inVal,_unionInterfaceEchoResponseParamsFactory);
 | 
| -        if (response is Future) {
 | 
| -          return response.then((response) {
 | 
| -            if (response != null) {
 | 
| -              return buildResponseWithId(
 | 
| -                  response,
 | 
| -                  _unionInterfaceMethodEchoName,
 | 
| -                  message.header.requestId,
 | 
| -                  bindings.MessageHeader.kMessageIsResponse);
 | 
| -            }
 | 
| -          });
 | 
| -        } else if (response != null) {
 | 
| -          return buildResponseWithId(
 | 
| -              response,
 | 
| -              _unionInterfaceMethodEchoName,
 | 
| -              message.header.requestId,
 | 
| -              bindings.MessageHeader.kMessageIsResponse);
 | 
| -        }
 | 
| +        _impl.echo(params.inVal, _unionInterfaceEchoResponseParamsResponder(message.header.requestId));
 | 
|          break;
 | 
|        default:
 | 
|          throw new bindings.MojoCodecError("Unexpected message name");
 | 
|          break;
 | 
|      }
 | 
| -    return null;
 | 
|    }
 | 
|  
 | 
|    UnionInterface get impl => _impl;
 | 
| @@ -3522,8 +3571,8 @@ class UnionInterfaceStub
 | 
|    }
 | 
|  
 | 
|  
 | 
| -  dynamic echo(PodUnion inVal,[Function responseFactory = null]) {
 | 
| -    return impl.echo(inVal,responseFactory);
 | 
| +  void echo(PodUnion inVal,void callback(PodUnion outVal)) {
 | 
| +    return impl.echo(inVal,callback);
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -3540,7 +3589,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);
 | 
| 
 |