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

Unified Diff: lib/json_info_codec.dart

Issue 2459593002: make the parser able to parse old versions of the codec (Closed)
Patch Set: 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 | « no previous file | 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 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']);
« no previous file with comments | « no previous file | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698