Skip to content

Commit 7ec4023

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Fix for linkNodeTokens(), test reordering enum constants.
Change-Id: Ibaadef9453e1776c75a37dcbe30f8b97df6e695d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449078 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent af37782 commit 7ec4023

File tree

2 files changed

+77
-7
lines changed

2 files changed

+77
-7
lines changed

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff 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
}

pkg/analyzer/test/src/dart/analysis/driver_test.dart

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff 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'''

0 commit comments

Comments
 (0)