@@ -39,8 +39,22 @@ class _GeneratorHelper {
3939 final StringBuffer _buffer = new StringBuffer ();
4040
4141 String get _prefix => '_\$ ${_element .name }' ;
42- String get _mixClassName => '${_prefix }SerializerMixin' ;
43- String get _helpClassName => '${_prefix }JsonMapWrapper' ;
42+
43+ String _mixinClassName (bool withConstraints) =>
44+ '${_prefix }SerializerMixin${_genericClassArguments (withConstraints )}' ;
45+
46+ String _wrapperClassName ([bool withConstraints]) =>
47+ '${_prefix }JsonMapWrapper${_genericClassArguments (withConstraints )}' ;
48+
49+ /// Returns a [String] representing the type arguments that exist on
50+ /// [_element] .
51+ ///
52+ /// Returns the output of calling [genericClassArguments] with [_element] .
53+ String _genericClassArguments (bool withConstraints) =>
54+ genericClassArguments (_element, withConstraints);
55+
56+ String get _targetClassReference =>
57+ '${_element .name }${_genericClassArguments (false )}' ;
4458
4559 _GeneratorHelper (this ._generator, this ._element, this ._annotation);
4660
@@ -66,7 +80,7 @@ class _GeneratorHelper {
6680 //
6781 // Generate the mixin class
6882 //
69- _buffer.writeln ('abstract class $_mixClassName {' );
83+ _buffer.writeln ('abstract class ${ _mixinClassName ( true )} {' );
7084
7185 // write copies of the fields - this allows the toJson method to access
7286 // the fields of the target class
@@ -80,7 +94,7 @@ class _GeneratorHelper {
8094 var writeNaive = accessibleFields.every (_writeJsonValueNaive);
8195
8296 if (_generator.useWrappers) {
83- _buffer.writeln ('=> new $_helpClassName (this);' );
97+ _buffer.writeln ('=> new ${ _wrapperClassName ( false )} (this);' );
8498 } else {
8599 if (writeNaive) {
86100 // write simple `toJson` method that includes all keys...
@@ -126,7 +140,8 @@ class _GeneratorHelper {
126140 if (_annotation.createFactory) {
127141 _buffer.writeln ();
128142 var mapType = _generator.anyMap ? 'Map' : 'Map<String, dynamic>' ;
129- _buffer.writeln ('${_element .name } ${_prefix }FromJson($mapType json) =>' );
143+ _buffer.writeln ('$_targetClassReference '
144+ '${_prefix }FromJson${_genericClassArguments (true )}($mapType json) =>' );
130145
131146 String deserializeFun (String paramOrFieldName,
132147 {ParameterElement ctorParam}) =>
@@ -221,9 +236,10 @@ class _GeneratorHelper {
221236 void _writeWrapper (Iterable <FieldElement > fields) {
222237 _buffer.writeln ();
223238 // TODO(kevmoo): write JsonMapWrapper if annotation lib is prefix-imported
224- _buffer.writeln ('''class $_helpClassName extends \$ JsonMapWrapper {
225- final $_mixClassName _v;
226- $_helpClassName (this._v);
239+ _buffer
240+ .writeln ('''class ${_wrapperClassName (true )} extends \$ JsonMapWrapper {
241+ final ${_mixinClassName (false )} _v;
242+ ${_wrapperClassName ()}(this._v);
227243 ''' );
228244
229245 if (fields.every (_writeJsonValueNaive)) {
0 commit comments