@@ -329,8 +329,13 @@ class JsonToAllInfoConverter extends Converter<Map<String, dynamic>, AllInfo> {
329
329
330
330
class AllInfoToJsonConverter extends Converter <AllInfo , Map >
331
331
implements InfoVisitor <Map > {
332
+ /// Whether to generate json compatible with format 5.1
333
+ final bool isBackwardCompatible;
332
334
final Map <Info , Id > ids = new HashMap <Info , Id >();
333
335
final Set <String > usedIds = new Set <String >();
336
+ final Set <int > usedOldIds = new Set <int >();
337
+
338
+ AllInfoToJsonConverter ({this .isBackwardCompatible: false });
334
339
335
340
Id idFor (Info info) {
336
341
var serializedId = ids[info];
@@ -344,25 +349,42 @@ class AllInfoToJsonConverter extends Converter<AllInfo, Map>
344
349
"$info " );
345
350
346
351
String id;
352
+ int oldId;
347
353
if (info is ConstantInfo ) {
348
354
// No name and no parent, so `longName` isn't helpful
349
355
assert (info.name == null );
350
356
assert (info.parent == null );
351
357
assert (info.code != null );
352
358
// Instead, use the content of the code.
353
- id = info.code.first.text ?? "_" ;
359
+ if (isBackwardCompatible) {
360
+ oldId = info.code.first.text.hashCode;
361
+ } else {
362
+ id = info.code.first.text ?? "_" ;
363
+ }
354
364
} else {
355
365
id = longName (info, useLibraryUri: true , forId: true );
356
- if (info is FieldInfo || info is FunctionInfo || info is ClosureInfo ) {
357
- id = "${id }_${info .size }" ;
366
+ if (isBackwardCompatible) {
367
+ oldId = id.hashCode;
368
+ } else {
369
+ if (info is FieldInfo || info is FunctionInfo || info is ClosureInfo ) {
370
+ id = "${id }_${info .size }" ;
371
+ }
358
372
}
359
373
}
360
- int suffix = 0 ;
374
+
361
375
String candidateId;
362
- do {
363
- candidateId = id + (suffix == 0 ? '' : '.$suffix ' );
364
- suffix++ ;
365
- } while (! usedIds.add (candidateId));
376
+ if (isBackwardCompatible) {
377
+ while (! usedOldIds.add (oldId)) {
378
+ oldId++ ;
379
+ }
380
+ candidateId = '$oldId ' ;
381
+ } else {
382
+ int suffix = 0 ;
383
+ do {
384
+ candidateId = id + (suffix == 0 ? '' : '.$suffix ' );
385
+ suffix++ ;
386
+ } while (! usedIds.add (candidateId));
387
+ }
366
388
serializedId = new Id (info.kind, candidateId);
367
389
return ids[info] = serializedId;
368
390
}
@@ -432,9 +454,9 @@ class AllInfoToJsonConverter extends Converter<AllInfo, Map>
432
454
'holding' : jsonHolding,
433
455
'dependencies' : jsonDependencies,
434
456
'outputUnits' : info.outputUnits.map ((u) => u.accept (this )).toList (),
435
- 'dump_version' : info.version,
457
+ 'dump_version' : isBackwardCompatible ? 5 : info.version,
436
458
'deferredFiles' : info.deferredFiles,
437
- 'dump_minor_version' : info.minorVersion,
459
+ 'dump_minor_version' : isBackwardCompatible ? 1 : info.minorVersion,
438
460
'program' : info.program.accept (this )
439
461
};
440
462
}
@@ -564,7 +586,10 @@ class AllInfoToJsonConverter extends Converter<AllInfo, Map>
564
586
visitOutput (OutputUnitInfo info) =>
565
587
_visitBasicInfo (info)..['imports' ] = info.imports;
566
588
567
- List <Object > _serializeCode (List <CodeSpan > code) {
589
+ Object _serializeCode (List <CodeSpan > code) {
590
+ if (isBackwardCompatible) {
591
+ return code.map ((c) => c.text).join ('\n ' );
592
+ }
568
593
return code
569
594
.map <Object >((c) => {
570
595
'start' : c.start,
@@ -576,8 +601,12 @@ class AllInfoToJsonConverter extends Converter<AllInfo, Map>
576
601
}
577
602
578
603
class AllInfoJsonCodec extends Codec <AllInfo , Map > {
579
- final Converter <AllInfo , Map > encoder = new AllInfoToJsonConverter () ;
604
+ final Converter <AllInfo , Map > encoder;
580
605
final Converter <Map , AllInfo > decoder = new JsonToAllInfoConverter ();
606
+
607
+ AllInfoJsonCodec ({bool isBackwardCompatible: false })
608
+ : encoder = new AllInfoToJsonConverter (
609
+ isBackwardCompatible: isBackwardCompatible);
581
610
}
582
611
583
612
class Id {
0 commit comments