| Index: pkg/analyzer/tool/summary/generate.dart
|
| diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
|
| index 88f7b349e63c49853ba7e2a7fb8e681c1faf1389..186a1010d691533a75fce83bfc79af10c3cd5109 100644
|
| --- a/pkg/analyzer/tool/summary/generate.dart
|
| +++ b/pkg/analyzer/tool/summary/generate.dart
|
| @@ -135,16 +135,16 @@ class _CodeGenerator {
|
| * represent [type] while building a serialized data structure.
|
| */
|
| String encodedType(idlModel.FieldType type) {
|
| + String typeStr;
|
| + if (_idl.classes.containsKey(type.typeName)) {
|
| + typeStr = '${type.typeName}Builder';
|
| + } else {
|
| + typeStr = type.typeName;
|
| + }
|
| if (type.isList) {
|
| - if (type.typeName == 'int') {
|
| - return 'List<int>';
|
| - } else {
|
| - return 'List<Object>';
|
| - }
|
| - } else if (_idl.classes.containsKey(type.typeName)) {
|
| - return 'Object';
|
| + return 'List<$typeStr>';
|
| } else {
|
| - return dartType(type);
|
| + return typeStr;
|
| }
|
| }
|
|
|
| @@ -313,11 +313,17 @@ class _CodeGenerator {
|
| String conversion = '_value';
|
| String condition = '';
|
| if (type.isList) {
|
| - conversion = '$conversion.toList()';
|
| + if (_idl.classes.containsKey(type.typeName)) {
|
| + conversion = '$conversion.map((b) => b.finish()).toList()';
|
| + } else {
|
| + conversion = '$conversion.toList()';
|
| + }
|
| condition = ' || _value.isEmpty';
|
| } else if (_idl.enums.containsKey(type.typeName)) {
|
| conversion = '$conversion.index';
|
| condition = ' || _value == ${defaultValue(type)}';
|
| + } else if (_idl.classes.containsKey(type.typeName)) {
|
| + conversion = '$conversion.finish()';
|
| }
|
| builderParams.add('${encodedType(type)} $fieldName');
|
| out('void set $fieldName(${encodedType(type)} _value) {');
|
| @@ -331,18 +337,22 @@ class _CodeGenerator {
|
| });
|
| out('}');
|
| });
|
| + if (cls.isTopLevel) {
|
| + out();
|
| + out('List<int> toBuffer() => UTF8.encode(JSON.encode(finish()));');
|
| + }
|
| out();
|
| - out('Object finish() => _json;');
|
| + out('Map finish() => _json;');
|
| });
|
| out('}');
|
| out();
|
| - out('Object encode$name(builder.BuilderContext builderContext, {${builderParams.join(', ')}}) {');
|
| + out('${name}Builder encode$name(builder.BuilderContext builderContext, {${builderParams.join(', ')}}) {');
|
| indent(() {
|
| out('${name}Builder builder = new ${name}Builder(builderContext);');
|
| cls.fields.forEach((String fieldName, idlModel.FieldType type) {
|
| out('builder.$fieldName = $fieldName;');
|
| });
|
| - out('return builder.finish();');
|
| + out('return builder;');
|
| });
|
| out('}');
|
| out();
|
|
|