File tree Expand file tree Collapse file tree 2 files changed +77
-7
lines changed Expand file tree Collapse file tree 2 files changed +77
-7
lines changed Original file line number Diff line number Diff line change @@ -1497,19 +1497,25 @@ sealed class AstNodeImpl implements AstNode {
14971497 return offset <= rangeOffset && end >= rangeEnd;
14981498 }
14991499
1500- static void linkNodeTokens(AstNode parent ) {
1500+ static void linkNodeTokens(AstNodeImpl root ) {
15011501 Token? lastToken;
1502- for (var entity in parent.childEntities) {
1502+ var stack = <Object>[root];
1503+ while (stack.isNotEmpty) {
1504+ var entity = stack.removeLast();
15031505 switch (entity) {
15041506 case Token token:
15051507 lastToken?.next = token;
15061508 token.previous = lastToken;
15071509 lastToken = token;
1508- case AstNode node:
1509- linkNodeTokens(node);
1510- lastToken?.next = node.beginToken;
1511- node.beginToken.previous = lastToken;
1512- lastToken = node.endToken;
1510+ case NodeListImpl nodeList:
1511+ // Push in reverse order, so process in source order.
1512+ stack.addAll(nodeList.reversed);
1513+ case AstNodeImpl node:
1514+ // Push in reverse order, so process in source order.
1515+ var entities = node._childEntities.entities;
1516+ stack.addAll(entities.reversed.map((e) => e.value));
1517+ default:
1518+ throw UnimplementedError('${entity.runtimeType}');
15131519 }
15141520 }
15151521 }
Original file line number Diff line number Diff line change @@ -59934,6 +59934,70 @@ const d = b;
5993459934 );
5993559935 }
5993659936
59937+ test_manifest_enum_constants_reorder() async {
59938+ await _runLibraryManifestScenario(
59939+ initialCode: r'''
59940+ enum A {
59941+ c1, c2
59942+ }
59943+ ''',
59944+ expectedInitialEvents: r'''
59945+ [operation] linkLibraryCycle SDK
59946+ [operation] linkLibraryCycle
59947+ package:test/test.dart
59948+ declaredEnums
59949+ A: #M0
59950+ declaredFields
59951+ c1: #M1
59952+ c2: #M2
59953+ values: #M3
59954+ declaredGetters
59955+ c1: #M4
59956+ c2: #M5
59957+ values: #M6
59958+ interface: #M7
59959+ map
59960+ index: #M8
59961+ implemented
59962+ index: #M8
59963+ superImplemented
59964+ [0]
59965+ index: #M8
59966+ inherited
59967+ index: #M8
59968+ ''',
59969+ updatedCode: r'''
59970+ enum A {
59971+ c2, c1
59972+ }
59973+ ''',
59974+ expectedUpdatedEvents: r'''
59975+ [operation] linkLibraryCycle
59976+ package:test/test.dart
59977+ declaredEnums
59978+ A: #M0
59979+ declaredFields
59980+ c1: #M1
59981+ c2: #M2
59982+ values: #M9
59983+ declaredGetters
59984+ c1: #M4
59985+ c2: #M5
59986+ values: #M6
59987+ interface: #M7
59988+ map
59989+ index: #M8
59990+ implemented
59991+ index: #M8
59992+ superImplemented
59993+ [0]
59994+ index: #M8
59995+ inherited
59996+ index: #M8
59997+ ''',
59998+ );
59999+ }
60000+
5993760001 test_manifest_enum_constants_replace() async {
5993860002 await _runLibraryManifestScenario(
5993960003 initialCode: r'''
You can’t perform that action at this time.
0 commit comments