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

Unified Diff: lib/json_info_codec.dart

Issue 2402473002: Add ClosureInfo for closures. (Closed)
Patch Set: update parse test Created 4 years, 2 months 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 | « lib/info.dart ('k') | pubspec.yaml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/json_info_codec.dart
diff --git a/lib/json_info_codec.dart b/lib/json_info_codec.dart
index 5176ce3038bf8f863d00ffe5a4897a6f91aaf1d7..8382bb0c2128ee98dbe91ffeb2e1970e7f9664c2 100644
--- a/lib/json_info_codec.dart
+++ b/lib/json_info_codec.dart
@@ -7,10 +7,10 @@ part of dart2js_info.info;
// TODO(sigmund): add unit tests.
class JsonToAllInfoConverter extends Converter<Map<String, dynamic>, AllInfo> {
- Map<String, Info> registry;
+ Map<String, Info> registry = <String, Info>{};
AllInfo convert(Map<String, dynamic> json) {
- registry = <String, Info>{};
+ registry.clear();
var result = new AllInfo();
var elements = json['elements'];
@@ -19,15 +19,13 @@ class JsonToAllInfoConverter extends Converter<Map<String, dynamic>, AllInfo> {
result.classes.addAll((elements['class'] as Map).values.map(parseClass));
result.functions
.addAll((elements['function'] as Map).values.map(parseFunction));
+ result.closures
+ .addAll((elements['closure'] as Map).values.map(parseClosure));
result.fields.addAll((elements['field'] as Map).values.map(parseField));
result.typedefs
.addAll((elements['typedef'] as Map).values.map(parseTypedef));
-
- // TODO(sigmund): remove null check on next breaking version
- var constants = elements['constant'];
- if (constants != null) {
- result.constants.addAll((constants as Map).values.map(parseConstant));
- }
+ result.constants
+ .addAll((elements['constant'] as Map).values.map(parseConstant));
var idMap = <String, Info>{};
for (var f in result.functions) {
@@ -208,11 +206,23 @@ class JsonToAllInfoConverter extends Converter<Map<String, dynamic>, AllInfo> {
isExternal: json['external'] == true);
}
+ ClosureInfo parseClosure(Map json) {
+ ClosureInfo result = parseId(json['id']);
+ return result
+ ..name = json['name']
+ ..parent = parseId(json['parent'])
+ ..outputUnit = parseId(json['outputUnit'])
+ ..size = json['size']
+ ..function = parseId(json['function']);
+ }
+
Info parseId(String serializedId) => registry.putIfAbsent(serializedId, () {
if (serializedId == null) {
return null;
} else if (serializedId.startsWith('function/')) {
return new FunctionInfo._(serializedId);
+ } else if (serializedId.startsWith('closure/')) {
+ return new ClosureInfo._(serializedId);
} else if (serializedId.startsWith('library/')) {
return new LibraryInfo._(serializedId);
} else if (serializedId.startsWith('class/')) {
@@ -249,13 +259,15 @@ class AllInfoToJsonConverter extends Converter<AllInfo, Map>
var jsonTypedefs = _visitList(info.typedefs);
var jsonFields = _visitList(info.fields);
var jsonConstants = _visitList(info.constants);
+ var jsonClosures = _visitList(info.closures);
return {
'library': jsonLibraries,
'class': jsonClasses,
'function': jsonFunctions,
'typedef': jsonTypedefs,
'field': jsonFields,
- 'constant': jsonConstants
+ 'constant': jsonConstants,
+ 'closure': jsonClosures,
};
}
@@ -433,6 +445,11 @@ class AllInfoToJsonConverter extends Converter<AllInfo, Map>
});
}
+ Map visitClosure(ClosureInfo info) {
+ return _visitBasicInfo(info)
+ ..addAll({'function': info.function.serializedId});
+ }
+
visitTypedef(TypedefInfo info) => _visitBasicInfo(info)..['type'] = info.type;
visitOutput(OutputUnitInfo info) =>
« no previous file with comments | « lib/info.dart ('k') | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698