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

Side by Side Diff: lib/json_info_codec.dart

Issue 2233093003: make dart2js_info strong-mode clean (Closed) Base URL: git@github.com:dart-lang/dart2js_info.git@master
Patch Set: Created 4 years, 4 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 unified diff | Download patch
« no previous file with comments | « bin/inference/print_summary.dart ('k') | lib/src/graph.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// Converters and codecs for converting between JSON and [Info] classes. 5 /// Converters and codecs for converting between JSON and [Info] classes.
6 part of dart2js_info.info; 6 part of dart2js_info.info;
7 7
8 // TODO(sigmund): add unit tests. 8 // TODO(sigmund): add unit tests.
9 class JsonToAllInfoConverter extends Converter<Map, AllInfo> { 9 class JsonToAllInfoConverter extends Converter<Map<String, dynamic>, AllInfo> {
10 Map<String, Info> registry; 10 Map<String, Info> registry;
11 11
12 AllInfo convert(Map json) { 12 AllInfo convert(Map<String, dynamic> json) {
13 registry = <String, Info>{}; 13 registry = <String, Info>{};
14 14
15 var result = new AllInfo(); 15 var result = new AllInfo();
16 var elements = json['elements']; 16 var elements = json['elements'] as Map<String, dynamic>;
17 result.libraries.addAll(elements['library'].values.map(parseLibrary)); 17 result.libraries.addAll(
18 result.classes.addAll(elements['class'].values.map(parseClass)); 18 (elements['library'] as Map<String, Map>).values.map(parseLibrary));
Siggi Cherem (dart-lang) 2016/08/10 21:40:28 I believe the way json is parsed that this and the
Harry Terkelsen 2016/08/10 22:18:27 Done.
19 result.functions.addAll(elements['function'].values.map(parseFunction)); 19 result.classes
20 result.fields.addAll(elements['field'].values.map(parseField)); 20 .addAll((elements['class'] as Map<String, Map>).values.map(parseClass));
21 result.typedefs.addAll(elements['typedef'].values.map(parseTypedef)); 21 result.functions.addAll(
22 (elements['function'] as Map<String, Map>).values.map(parseFunction));
23 result.fields
24 .addAll((elements['field'] as Map<String, Map>).values.map(parseField));
25 result.typedefs.addAll(
26 (elements['typedef'] as Map<String, Map>).values.map(parseTypedef));
22 27
23 // TODO(sigmund): remove null check on next breaking version 28 // TODO(sigmund): remove null check on next breaking version
24 var constants = elements['constant']; 29 var constants = elements['constant'];
25 if (constants != null) { 30 if (constants != null) {
26 result.constants.addAll(constants.values.map(parseConstant)); 31 result.constants
32 .addAll((constants as Map<String, Map>).values.map(parseConstant));
27 } 33 }
28 34
29 var idMap = {}; 35 var idMap = <String, Info>{};
30 for (var f in result.functions) { 36 for (var f in result.functions) {
31 idMap[f.serializedId] = f; 37 idMap[f.serializedId] = f;
32 } 38 }
33 for (var f in result.fields) { 39 for (var f in result.fields) {
34 idMap[f.serializedId] = f; 40 idMap[f.serializedId] = f;
35 } 41 }
36 42
37 json['holding'].forEach((k, deps) { 43 json['holding'].forEach((k, deps) {
38 var src = idMap[k]; 44 var src = idMap[k];
39 assert(src != null); 45 assert(src != null);
40 for (var dep in deps) { 46 for (var dep in deps) {
41 var target = idMap[dep['id']]; 47 var target = idMap[dep['id']];
42 assert(target != null); 48 assert(target != null);
43 src.uses.add(new DependencyInfo(target, dep['mask'])); 49 (src as CodeInfo).uses.add(new DependencyInfo(target, dep['mask']));
44 } 50 }
45 }); 51 });
46 52
47 json['dependencies']?.forEach((k, deps) { 53 json['dependencies']?.forEach((String k, List<String> deps) {
48 result.dependencies[idMap[k]] = deps.map((d) => idMap[d]).toList(); 54 result.dependencies[idMap[k]] = deps.map((d) => idMap[d]).toList();
49 }); 55 });
50 56
51 result.outputUnits.addAll(json['outputUnits'].map(parseOutputUnit)); 57 result.outputUnits
58 .addAll((json['outputUnits'] as List<Map>).map(parseOutputUnit));
52 59
53 result.program = parseProgram(json['program']); 60 result.program = parseProgram(json['program']);
54 // todo: version, etc 61 // todo: version, etc
55 return result; 62 return result;
56 } 63 }
57 64
58 OutputUnitInfo parseOutputUnit(Map json) { 65 OutputUnitInfo parseOutputUnit(Map json) {
59 OutputUnitInfo result = parseId(json['id']); 66 OutputUnitInfo result = parseId(json['id']);
60 result 67 result
61 ..name = json['name'] 68 ..name = json['name']
62 ..size = json['size']; 69 ..size = json['size'];
63 result.imports.addAll(json['imports'] ?? const []); 70 result.imports.addAll((json['imports'] as List<String>) ?? const []);
Siggi Cherem (dart-lang) 2016/08/10 21:40:28 same here and below, I think this cast will fail u
Harry Terkelsen 2016/08/10 22:18:28 Done.
64 return result; 71 return result;
65 } 72 }
66 73
67 LibraryInfo parseLibrary(Map json) { 74 LibraryInfo parseLibrary(Map json) {
68 LibraryInfo result = parseId(json['id']); 75 LibraryInfo result = parseId(json['id']);
69 result 76 result
70 ..name = json['name'] 77 ..name = json['name']
71 ..uri = Uri.parse(json['canonicalUri']) 78 ..uri = Uri.parse(json['canonicalUri'])
72 ..outputUnit = parseId(json['outputUnit']) 79 ..outputUnit = parseId(json['outputUnit'])
73 ..size = json['size']; 80 ..size = json['size'];
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 ..name = json['name'] 119 ..name = json['name']
113 ..parent = parseId(json['parent']) 120 ..parent = parseId(json['parent'])
114 ..coverageId = json['coverageId'] 121 ..coverageId = json['coverageId']
115 ..outputUnit = parseId(json['outputUnit']) 122 ..outputUnit = parseId(json['outputUnit'])
116 ..size = json['size'] 123 ..size = json['size']
117 ..type = json['type'] 124 ..type = json['type']
118 ..inferredType = json['inferredType'] 125 ..inferredType = json['inferredType']
119 ..code = json['code'] 126 ..code = json['code']
120 ..isConst = json['const'] ?? false 127 ..isConst = json['const'] ?? false
121 ..initializer = parseId(json['initializer']) 128 ..initializer = parseId(json['initializer'])
122 ..closures = json['children'].map(parseId).toList(); 129 ..closures = (json['children'] as List<String>).map(parseId).toList();
123 } 130 }
124 131
125 ConstantInfo parseConstant(Map json) { 132 ConstantInfo parseConstant(Map json) {
126 ConstantInfo result = parseId(json['id']); 133 ConstantInfo result = parseId(json['id']);
127 return result 134 return result
128 ..code = json['code'] 135 ..code = json['code']
129 ..size = json['size']; 136 ..size = json['size'];
130 } 137 }
131 138
132 TypedefInfo parseTypedef(Map json) { 139 TypedefInfo parseTypedef(Map json) {
(...skipping 13 matching lines...) Expand all
146 FunctionInfo result = parseId(json['id']); 153 FunctionInfo result = parseId(json['id']);
147 return result 154 return result
148 ..name = json['name'] 155 ..name = json['name']
149 ..parent = parseId(json['parent']) 156 ..parent = parseId(json['parent'])
150 ..coverageId = json['coverageId'] 157 ..coverageId = json['coverageId']
151 ..outputUnit = parseId(json['outputUnit']) 158 ..outputUnit = parseId(json['outputUnit'])
152 ..size = json['size'] 159 ..size = json['size']
153 ..type = json['type'] 160 ..type = json['type']
154 ..returnType = json['returnType'] 161 ..returnType = json['returnType']
155 ..inferredReturnType = json['inferredReturnType'] 162 ..inferredReturnType = json['inferredReturnType']
156 ..parameters = json['parameters'].map(parseParameter).toList() 163 ..parameters =
164 (json['parameters'] as List<Map>).map(parseParameter).toList()
157 ..code = json['code'] 165 ..code = json['code']
158 ..sideEffects = json['sideEffects'] 166 ..sideEffects = json['sideEffects']
159 ..modifiers = parseModifiers(json['modifiers']) 167 ..modifiers = parseModifiers(json['modifiers'] as Map<String, bool>)
160 ..closures = json['children'].map(parseId).toList() 168 ..closures = (json['children'] as List<String>).map(parseId).toList()
161 ..measurements = parseMeasurements(json['measurements']); 169 ..measurements = parseMeasurements(json['measurements']);
162 } 170 }
163 171
164 ParameterInfo parseParameter(Map json) => 172 ParameterInfo parseParameter(Map json) =>
165 new ParameterInfo(json['name'], json['type'], json['declaredType']); 173 new ParameterInfo(json['name'], json['type'], json['declaredType']);
166 174
167 Measurements parseMeasurements(Map json) { 175 Measurements parseMeasurements(Map json) {
168 if (json == null) return null; 176 if (json == null) return null;
169 var uri = json['sourceFile']; 177 var uri = json['sourceFile'];
170 var res = new Measurements(uri == null ? null : Uri.parse(uri)); 178 var res = new Measurements(uri == null ? null : Uri.parse(uri));
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 307
300 Map _visitBasicInfo(BasicInfo info) { 308 Map _visitBasicInfo(BasicInfo info) {
301 var res = { 309 var res = {
302 'id': info.serializedId, 310 'id': info.serializedId,
303 'kind': kindToString(info.kind), 311 'kind': kindToString(info.kind),
304 'name': info.name, 312 'name': info.name,
305 'size': info.size, 313 'size': info.size,
306 }; 314 };
307 // TODO(sigmund): Omit this also when outputUnit.id == 0 (most code is in 315 // TODO(sigmund): Omit this also when outputUnit.id == 0 (most code is in
308 // the main output unit by default). 316 // the main output unit by default).
309 if (info.outputUnit != null) res['outputUnit'] = 317 if (info.outputUnit != null)
Siggi Cherem (dart-lang) 2016/08/10 21:40:28 let's add braces here now that it doesn't fit on a
Harry Terkelsen 2016/08/10 22:18:27 Done.
310 info.outputUnit.serializedId; 318 res['outputUnit'] = info.outputUnit.serializedId;
311 if (info.coverageId != null) res['coverageId'] = info.coverageId; 319 if (info.coverageId != null) res['coverageId'] = info.coverageId;
312 if (info.parent != null) res['parent'] = info.parent.serializedId; 320 if (info.parent != null) res['parent'] = info.parent.serializedId;
313 return res; 321 return res;
314 } 322 }
315 323
316 Map visitLibrary(LibraryInfo info) { 324 Map visitLibrary(LibraryInfo info) {
317 return _visitBasicInfo(info) 325 return _visitBasicInfo(info)
318 ..addAll({ 326 ..addAll({
319 'children': [] 327 'children': []
320 ..addAll(info.topLevelFunctions.map((f) => f.serializedId)) 328 ..addAll(info.topLevelFunctions.map((f) => f.serializedId))
(...skipping 18 matching lines...) Expand all
339 Map visitField(FieldInfo info) { 347 Map visitField(FieldInfo info) {
340 var result = _visitBasicInfo(info) 348 var result = _visitBasicInfo(info)
341 ..addAll({ 349 ..addAll({
342 'children': info.closures.map((i) => i.serializedId).toList(), 350 'children': info.closures.map((i) => i.serializedId).toList(),
343 'inferredType': info.inferredType, 351 'inferredType': info.inferredType,
344 'code': info.code, 352 'code': info.code,
345 'type': info.type, 353 'type': info.type,
346 }); 354 });
347 if (info.isConst) { 355 if (info.isConst) {
348 result['const'] = true; 356 result['const'] = true;
349 if (info.initializer != null) result['initializer'] = 357 if (info.initializer != null)
Siggi Cherem (dart-lang) 2016/08/10 21:40:28 same here
Harry Terkelsen 2016/08/10 22:18:28 Done.
350 info.initializer.serializedId; 358 result['initializer'] = info.initializer.serializedId;
351 } 359 }
352 return result; 360 return result;
353 } 361 }
354 362
355 Map visitConstant(ConstantInfo info) => 363 Map visitConstant(ConstantInfo info) =>
356 _visitBasicInfo(info)..addAll({'code': info.code}); 364 _visitBasicInfo(info)..addAll({'code': info.code});
357 365
358 // TODO(sigmund): exclude false values (requires bumping the format version): 366 // TODO(sigmund): exclude false values (requires bumping the format version):
359 // var res = <String, bool>{}; 367 // var res = <String, bool>{};
360 // if (isStatic) res['static'] = true; 368 // if (isStatic) res['static'] = true;
361 // if (isConst) res['const'] = true; 369 // if (isConst) res['const'] = true;
362 // if (isFactory) res['factory'] = true; 370 // if (isFactory) res['factory'] = true;
363 // if (isExternal) res['external'] = true; 371 // if (isExternal) res['external'] = true;
364 // return res; 372 // return res;
365 Map _visitFunctionModifiers(FunctionModifiers mods) => { 373 Map _visitFunctionModifiers(FunctionModifiers mods) => {
366 'static': mods.isStatic, 374 'static': mods.isStatic,
367 'const': mods.isConst, 375 'const': mods.isConst,
368 'factory': mods.isFactory, 376 'factory': mods.isFactory,
369 'external': mods.isExternal, 377 'external': mods.isExternal,
370 }; 378 };
371 379
372 Map _visitParameterInfo(ParameterInfo info) => 380 Map _visitParameterInfo(ParameterInfo info) =>
373 {'name': info.name, 'type': info.type, 'declaredType': info.declaredType}; 381 {'name': info.name, 'type': info.type, 'declaredType': info.declaredType};
374 382
375 String _visitMetric(Metric metric) => metric.name; 383 String _visitMetric(Metric metric) => metric.name;
376 384
377 Map _visitMeasurements(Measurements measurements) { 385 Map _visitMeasurements(Measurements measurements) {
Siggi Cherem (dart-lang) 2016/08/10 21:40:28 FYI - I deleted the measurements code in d2js, so
Harry Terkelsen 2016/08/10 22:18:28 Acknowledged.
378 if (measurements == null) return null; 386 if (measurements == null) return null;
379 var jsonEntries = <String, List<Map>>{}; 387 var jsonEntries = <String, List<int>>{};
380 measurements.entries.forEach((metric, values) { 388 measurements.entries.forEach((metric, values) {
381 jsonEntries[_visitMetric(metric)] = 389 jsonEntries[_visitMetric(metric)] =
382 values.expand((e) => [e.begin, e.end]).toList(); 390 values.expand((e) => [e.begin, e.end]).toList();
383 }); 391 });
384 var json = {'entries': jsonEntries}; 392 var json = <String, dynamic>{'entries': jsonEntries};
385 // TODO(sigmund): encode uri as an offset of the URIs available in the parts 393 // TODO(sigmund): encode uri as an offset of the URIs available in the parts
386 // of the library info. 394 // of the library info.
387 if (measurements.uri != null) json['sourceFile'] = '${measurements.uri}'; 395 if (measurements.uri != null) json['sourceFile'] = '${measurements.uri}';
388 if (measurements.counters[Metric.functions] != null) { 396 if (measurements.counters[Metric.functions] != null) {
389 json[_visitMetric(Metric.functions)] = 397 json[_visitMetric(Metric.functions)] =
390 measurements.counters[Metric.functions]; 398 measurements.counters[Metric.functions];
391 } 399 }
392 if (measurements.counters[Metric.reachableFunctions] != null) { 400 if (measurements.counters[Metric.reachableFunctions] != null) {
393 json[_visitMetric(Metric.reachableFunctions)] = 401 json[_visitMetric(Metric.reachableFunctions)] =
394 measurements.counters[Metric.reachableFunctions]; 402 measurements.counters[Metric.reachableFunctions];
(...skipping 23 matching lines...) Expand all
418 visitTypedef(TypedefInfo info) => _visitBasicInfo(info)..['type'] = info.type; 426 visitTypedef(TypedefInfo info) => _visitBasicInfo(info)..['type'] = info.type;
419 427
420 visitOutput(OutputUnitInfo info) => 428 visitOutput(OutputUnitInfo info) =>
421 _visitBasicInfo(info)..['imports'] = info.imports; 429 _visitBasicInfo(info)..['imports'] = info.imports;
422 } 430 }
423 431
424 class AllInfoJsonCodec extends Codec<AllInfo, Map> { 432 class AllInfoJsonCodec extends Codec<AllInfo, Map> {
425 final Converter<AllInfo, Map> encoder = new AllInfoToJsonConverter(); 433 final Converter<AllInfo, Map> encoder = new AllInfoToJsonConverter();
426 final Converter<Map, AllInfo> decoder = new JsonToAllInfoConverter(); 434 final Converter<Map, AllInfo> decoder = new JsonToAllInfoConverter();
427 } 435 }
OLDNEW
« no previous file with comments | « bin/inference/print_summary.dart ('k') | lib/src/graph.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698