Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(561)

Unified Diff: pkg/analyzer/tool/summary/generate.dart

Issue 1452363002: Modify summary Builder classes to avoid the use of Object. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/test/src/summary/summary_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
« no previous file with comments | « pkg/analyzer/test/src/summary/summary_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698