Chromium Code Reviews| Index: lib/json_info_codec.dart |
| diff --git a/lib/json_info_codec.dart b/lib/json_info_codec.dart |
| index 8382bb0c2128ee98dbe91ffeb2e1970e7f9664c2..10a4d96d1d60aea4a3e3510f99827e14932a1807 100644 |
| --- a/lib/json_info_codec.dart |
| +++ b/lib/json_info_codec.dart |
| @@ -19,8 +19,12 @@ 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)); |
| + |
| + // TODO(het): Revert this when the dart2js with the new codec is in stable |
| + if (elements['closure'] != null) { |
| + 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)); |
| @@ -142,17 +146,61 @@ class JsonToAllInfoConverter extends Converter<Map<String, dynamic>, AllInfo> { |
| ..size = 0; |
| } |
| - ProgramInfo parseProgram(Map json) => new ProgramInfo() |
| - ..entrypoint = parseId(json['entrypoint']) |
| - ..size = json['size'] |
| - ..dart2jsVersion = json['dart2jsVersion'] |
| - ..compilationMoment = DateTime.parse(json['compilationMoment']) |
| - ..compilationDuration = |
| - new Duration(microseconds: json['compilationDuration']) |
| - ..toJsonDuration = new Duration(microseconds: json['toJsonDuration']) |
| - ..dumpInfoDuration = new Duration(microseconds: json['dumpInfoDuration']) |
| - ..noSuchMethodEnabled = json['noSuchMethodEnabled'] |
| - ..minified = json['minified']; |
| + ProgramInfo parseProgram(Map json) { |
| + var programInfo = new ProgramInfo() |
| + ..entrypoint = parseId(json['entrypoint']) |
| + ..size = json['size'] |
| + ..dart2jsVersion = json['dart2jsVersion'] |
| + ..noSuchMethodEnabled = json['noSuchMethodEnabled'] |
| + ..minified = json['minified']; |
| + |
| + // TODO(het): Revert this when the dart2js with the new codec is in stable |
| + var compilationDuration = json['compilationDuration']; |
| + if (compilationDuration is String) { |
| + programInfo.compilationDuration = _parseDuration(compilationDuration); |
| + } else { |
| + assert(compilationDuration is int); |
| + programInfo.compilationDuration = |
| + new Duration(microseconds: compilationDuration); |
| + } |
| + |
| + var toJsonDuration = json['toJsonDuration']; |
| + if (toJsonDuration is String) { |
|
sra1
2016/10/27 14:19:47
You could put this repeated if-then-else in a help
|
| + programInfo.toJsonDuration = _parseDuration(toJsonDuration); |
| + } else { |
| + assert(toJsonDuration is int); |
| + programInfo.toJsonDuration = new Duration(microseconds: toJsonDuration); |
| + } |
| + |
| + var dumpInfoDuration = json['dumpInfoDuration']; |
| + if (dumpInfoDuration is String) { |
| + programInfo.dumpInfoDuration = _parseDuration(dumpInfoDuration); |
| + } else { |
| + assert(dumpInfoDuration is int); |
| + programInfo.dumpInfoDuration = |
| + new Duration(microseconds: dumpInfoDuration); |
| + } |
| + |
| + return programInfo; |
| + } |
| + |
| + /// Parse a string formatted as "XX:YY:ZZ.ZZZZZ" into a [Duration]. |
| + Duration _parseDuration(String duration) { |
| + if (!duration.contains(':')) { |
| + return new Duration(milliseconds: int.parse(duration)); |
| + } |
| + var parts = duration.split(':'); |
| + var hours = double.parse(parts[0]); |
| + var minutes = double.parse(parts[1]); |
| + var seconds = double.parse(parts[2]); |
| + const secondsInMillis = 1000; |
| + const minutesInMillis = 60 * secondsInMillis; |
| + const hoursInMillis = 60 * minutesInMillis; |
| + var totalMillis = secondsInMillis * seconds + |
| + minutesInMillis * minutes + |
| + hoursInMillis * hours; |
| + return new Duration(milliseconds: totalMillis.round()); |
| + } |
| FunctionInfo parseFunction(Map json) { |
| FunctionInfo result = parseId(json['id']); |