Skip to content

Commit 15a7b57

Browse files
Dan Rubelcommit-bot@chromium.org
authored andcommitted
split endFields into endClass/Mixin/ExtensionFields events
Change-Id: I538d21a595f957ef6080bf3bfe6f0b7299b4bc8d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114881 Reviewed-by: Brian Wilkerson <[email protected]>
1 parent ed1b4ff commit 15a7b57

File tree

10 files changed

+147
-46
lines changed

10 files changed

+147
-46
lines changed

pkg/analyzer/lib/src/fasta/ast_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -930,7 +930,7 @@ class AstBuilder extends StackListener {
930930
}
931931

932932
@override
933-
void endFields(Token staticToken, Token covariantToken, Token lateToken,
933+
void endClassFields(Token staticToken, Token covariantToken, Token lateToken,
934934
Token varFinalOrConst, int count, Token beginToken, Token semicolon) {
935935
assert(optional(';', semicolon));
936936
debugEvent("Fields");

pkg/analyzer/test/generated/parser_fasta_listener.dart

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,15 @@ class ForwardingTestListener extends ForwardingListener {
606606
super.endClassFactoryMethod(beginToken, factoryKeyword, endToken);
607607
}
608608

609+
@override
610+
void endClassFields(Token staticToken, Token covariantToken, Token lateToken,
611+
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
612+
// beginMember --> endClassFields, endMember
613+
expectIn('Member');
614+
super.endClassFields(staticToken, covariantToken, lateToken,
615+
varFinalOrConst, count, beginToken, endToken);
616+
}
617+
609618
@override
610619
void endClassOrMixinBody(
611620
DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
@@ -703,18 +712,24 @@ class ForwardingTestListener extends ForwardingListener {
703712
}
704713

705714
@override
706-
void endFieldInitializer(Token assignment, Token token) {
707-
end('FieldInitializer');
708-
super.endFieldInitializer(assignment, token);
715+
void endExtensionFields(
716+
Token staticToken,
717+
Token covariantToken,
718+
Token lateToken,
719+
Token varFinalOrConst,
720+
int count,
721+
Token beginToken,
722+
Token endToken) {
723+
// beginMember --> endExtensionFields, endMember
724+
expectIn('Member');
725+
super.endExtensionFields(staticToken, covariantToken, lateToken,
726+
varFinalOrConst, count, beginToken, endToken);
709727
}
710728

711729
@override
712-
void endFields(Token staticToken, Token covariantToken, Token lateToken,
713-
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
714-
// beginMember --> endFields, endMember
715-
expectIn('Member');
716-
super.endFields(staticToken, covariantToken, lateToken, varFinalOrConst,
717-
count, beginToken, endToken);
730+
void endFieldInitializer(Token assignment, Token token) {
731+
end('FieldInitializer');
732+
super.endFieldInitializer(assignment, token);
718733
}
719734

720735
@override
@@ -936,6 +951,15 @@ class ForwardingTestListener extends ForwardingListener {
936951
super.endMixinFactoryMethod(beginToken, factoryKeyword, endToken);
937952
}
938953

954+
@override
955+
void endMixinFields(Token staticToken, Token covariantToken, Token lateToken,
956+
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
957+
// beginMember --> endMixinFields, endMember
958+
expectIn('Member');
959+
super.endMixinFields(staticToken, covariantToken, lateToken,
960+
varFinalOrConst, count, beginToken, endToken);
961+
}
962+
939963
@override
940964
void endNamedFunctionExpression(Token endToken) {
941965
end('NamedFunctionExpression');

pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
589589
}
590590

591591
@override
592-
void endFields(Token staticToken, Token covariantToken, Token lateToken,
592+
void endClassFields(Token staticToken, Token covariantToken, Token lateToken,
593593
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
594594
debugEvent("Fields");
595595
if (!libraryBuilder.loader.target.enableNonNullable) {

pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,13 @@ class ForwardingListener implements Listener {
520520
listener?.endClassFactoryMethod(beginToken, factoryKeyword, endToken);
521521
}
522522

523+
@override
524+
void endClassFields(Token staticToken, Token covariantToken, Token lateToken,
525+
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
526+
listener?.endClassFields(staticToken, covariantToken, lateToken,
527+
varFinalOrConst, count, beginToken, endToken);
528+
}
529+
523530
@override
524531
void endClassOrMixinBody(
525532
DeclarationKind kind, int memberCount, Token beginToken, Token endToken) {
@@ -606,15 +613,21 @@ class ForwardingListener implements Listener {
606613
}
607614

608615
@override
609-
void endFieldInitializer(Token assignment, Token token) {
610-
listener?.endFieldInitializer(assignment, token);
616+
void endExtensionFields(
617+
Token staticToken,
618+
Token covariantToken,
619+
Token lateToken,
620+
Token varFinalOrConst,
621+
int count,
622+
Token beginToken,
623+
Token endToken) {
624+
listener?.endExtensionFields(staticToken, covariantToken, lateToken,
625+
varFinalOrConst, count, beginToken, endToken);
611626
}
612627

613628
@override
614-
void endFields(Token staticToken, Token covariantToken, Token lateToken,
615-
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
616-
listener?.endFields(staticToken, covariantToken, lateToken, varFinalOrConst,
617-
count, beginToken, endToken);
629+
void endFieldInitializer(Token assignment, Token token) {
630+
listener?.endFieldInitializer(assignment, token);
618631
}
619632

620633
@override
@@ -811,6 +824,13 @@ class ForwardingListener implements Listener {
811824
listener?.endMixinFactoryMethod(beginToken, factoryKeyword, endToken);
812825
}
813826

827+
@override
828+
void endMixinFields(Token staticToken, Token covariantToken, Token lateToken,
829+
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
830+
listener?.endMixinFields(staticToken, covariantToken, lateToken,
831+
varFinalOrConst, count, beginToken, endToken);
832+
}
833+
814834
@override
815835
void endNamedFunctionExpression(Token endToken) {
816836
listener?.endNamedFunctionExpression(endToken);

pkg/front_end/lib/src/fasta/parser/listener.dart

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,18 +337,52 @@ class Listener implements UnescapeErrorListener {
337337
logEvent("FormalParameters");
338338
}
339339

340-
/// Handle the end of a field declaration. Substructures:
340+
/// Handle the end of a class field declaration. Substructures:
341341
/// - Metadata
342342
/// - Modifiers
343343
/// - Type
344344
/// - Variable declarations (count times)
345345
///
346346
/// Doesn't have a corresponding begin event, use [beginMember] instead.
347-
void endFields(Token staticToken, Token covariantToken, Token lateToken,
347+
void endClassFields(Token staticToken, Token covariantToken, Token lateToken,
348348
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
349349
logEvent("Fields");
350350
}
351351

352+
/// Handle the end of a mixin field declaration. Substructures:
353+
/// - Metadata
354+
/// - Modifiers
355+
/// - Type
356+
/// - Variable declarations (count times)
357+
///
358+
/// Doesn't have a corresponding begin event, use [beginMember] instead.
359+
void endMixinFields(Token staticToken, Token covariantToken, Token lateToken,
360+
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
361+
// TODO(danrubel): push implementation into subclasses
362+
endClassFields(staticToken, covariantToken, lateToken, varFinalOrConst,
363+
count, beginToken, endToken);
364+
}
365+
366+
/// Handle the end of a extension field declaration. Substructures:
367+
/// - Metadata
368+
/// - Modifiers
369+
/// - Type
370+
/// - Variable declarations (count times)
371+
///
372+
/// Doesn't have a corresponding begin event, use [beginMember] instead.
373+
void endExtensionFields(
374+
Token staticToken,
375+
Token covariantToken,
376+
Token lateToken,
377+
Token varFinalOrConst,
378+
int count,
379+
Token beginToken,
380+
Token endToken) {
381+
// TODO(danrubel): push implementation into subclasses
382+
endClassFields(staticToken, covariantToken, lateToken, varFinalOrConst,
383+
count, beginToken, endToken);
384+
}
385+
352386
/// Marks that the grammar term `forInitializerStatement` has been parsed and
353387
/// it was an empty statement.
354388
void handleForInitializerEmptyStatement(Token token) {
@@ -761,7 +795,8 @@ class Listener implements UnescapeErrorListener {
761795
}
762796

763797
/// This event is added for convenience. Normally, one should override
764-
/// [endMethod] or [endFields] instead.
798+
/// [endClassFields], [endMixinFields], [endExtensionFields],
799+
/// or [endMethod] instead.
765800
void endMember() {
766801
logEvent("Member");
767802
}

pkg/front_end/lib/src/fasta/parser/parser.dart

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2351,8 +2351,17 @@ class Parser {
23512351
reportRecoverableErrorWithToken(
23522352
getOrSet, fasta.templateExtraneousModifier);
23532353
}
2354-
return parseFields(beforeStart, externalToken, null, null, lateToken,
2355-
varFinalOrConst, beforeType, typeInfo, token.next, true);
2354+
return parseFields(
2355+
beforeStart,
2356+
externalToken,
2357+
null,
2358+
null,
2359+
lateToken,
2360+
varFinalOrConst,
2361+
beforeType,
2362+
typeInfo,
2363+
token.next,
2364+
DeclarationKind.TopLevel);
23562365
}
23572366

23582367
Token parseFields(
@@ -2365,7 +2374,7 @@ class Parser {
23652374
Token beforeType,
23662375
TypeInfo typeInfo,
23672376
Token name,
2368-
bool isTopLevel) {
2377+
DeclarationKind kind) {
23692378
if (externalToken != null) {
23702379
reportRecoverableError(externalToken, fasta.messageExternalField);
23712380
}
@@ -2388,26 +2397,26 @@ class Parser {
23882397
Token token = typeInfo.parseType(beforeType, this);
23892398
assert(token.next == name);
23902399

2391-
IdentifierContext context = isTopLevel
2400+
IdentifierContext context = kind == DeclarationKind.TopLevel
23922401
? IdentifierContext.topLevelVariableDeclaration
23932402
: IdentifierContext.fieldDeclaration;
23942403
name = ensureIdentifier(token, context);
23952404

23962405
int fieldCount = 1;
2397-
token = parseFieldInitializerOpt(
2398-
name, name, lateToken, varFinalOrConst, isTopLevel);
2406+
token =
2407+
parseFieldInitializerOpt(name, name, lateToken, varFinalOrConst, kind);
23992408
while (optional(',', token.next)) {
24002409
name = ensureIdentifier(token.next, context);
24012410
token = parseFieldInitializerOpt(
2402-
name, name, lateToken, varFinalOrConst, isTopLevel);
2411+
name, name, lateToken, varFinalOrConst, kind);
24032412
++fieldCount;
24042413
}
24052414
Token semicolon = token.next;
24062415
if (optional(';', semicolon)) {
24072416
token = semicolon;
24082417
} else {
24092418
// Recovery
2410-
if (isTopLevel &&
2419+
if (kind == DeclarationKind.TopLevel &&
24112420
beforeType.next.isIdentifier &&
24122421
beforeType.next.lexeme == 'extension') {
24132422
// Looks like an extension method
@@ -2423,12 +2432,23 @@ class Parser {
24232432
token = ensureSemicolon(token);
24242433
}
24252434
}
2426-
if (isTopLevel) {
2427-
listener.endTopLevelFields(staticToken, covariantToken, lateToken,
2428-
varFinalOrConst, fieldCount, beforeStart.next, token);
2429-
} else {
2430-
listener.endFields(staticToken, covariantToken, lateToken,
2431-
varFinalOrConst, fieldCount, beforeStart.next, token);
2435+
switch (kind) {
2436+
case DeclarationKind.TopLevel:
2437+
listener.endTopLevelFields(staticToken, covariantToken, lateToken,
2438+
varFinalOrConst, fieldCount, beforeStart.next, token);
2439+
break;
2440+
case DeclarationKind.Class:
2441+
listener.endClassFields(staticToken, covariantToken, lateToken,
2442+
varFinalOrConst, fieldCount, beforeStart.next, token);
2443+
break;
2444+
case DeclarationKind.Mixin:
2445+
listener.endMixinFields(staticToken, covariantToken, lateToken,
2446+
varFinalOrConst, fieldCount, beforeStart.next, token);
2447+
break;
2448+
case DeclarationKind.Extension:
2449+
listener.endExtensionFields(staticToken, covariantToken, lateToken,
2450+
varFinalOrConst, fieldCount, beforeStart.next, token);
2451+
break;
24322452
}
24332453
return token;
24342454
}
@@ -2484,7 +2504,7 @@ class Parser {
24842504
}
24852505

24862506
Token parseFieldInitializerOpt(Token token, Token name, Token lateToken,
2487-
Token varFinalOrConst, bool isTopLevel) {
2507+
Token varFinalOrConst, DeclarationKind kind) {
24882508
Token next = token.next;
24892509
if (optional('=', next)) {
24902510
Token assignment = next;
@@ -2498,7 +2518,7 @@ class Parser {
24982518
name,
24992519
fasta.templateConstFieldWithoutInitializer
25002520
.withArguments(name.lexeme));
2501-
} else if (isTopLevel &&
2521+
} else if (kind == DeclarationKind.TopLevel &&
25022522
optional("final", varFinalOrConst) &&
25032523
lateToken == null) {
25042524
reportRecoverableError(
@@ -3124,7 +3144,7 @@ class Parser {
31243144
token == beforeStart &&
31253145
next.next.isIdentifier)) {
31263146
// Recovery
3127-
return recoverFromInvalidClassMember(
3147+
return recoverFromInvalidMember(
31283148
token,
31293149
beforeStart,
31303150
externalToken,
@@ -3134,7 +3154,8 @@ class Parser {
31343154
varFinalOrConst,
31353155
beforeType,
31363156
typeInfo,
3137-
getOrSet);
3157+
getOrSet,
3158+
kind);
31383159
}
31393160
} else if (typeInfo == noType && varFinalOrConst == null) {
31403161
Token next2 = next.next;
@@ -3191,7 +3212,7 @@ class Parser {
31913212
beforeType,
31923213
typeInfo,
31933214
token.next,
3194-
false);
3215+
kind);
31953216
}
31963217
listener.endMember();
31973218
return token;
@@ -6338,7 +6359,7 @@ class Parser {
63386359
/// Recover from finding an invalid class member. The metadata for the member,
63396360
/// if any, has already been parsed (and events have already been generated).
63406361
/// The member was expected to start with the token after [token].
6341-
Token recoverFromInvalidClassMember(
6362+
Token recoverFromInvalidMember(
63426363
Token token,
63436364
Token beforeStart,
63446365
Token externalToken,
@@ -6348,7 +6369,8 @@ class Parser {
63486369
Token varFinalOrConst,
63496370
Token beforeType,
63506371
TypeInfo typeInfo,
6351-
Token getOrSet) {
6372+
Token getOrSet,
6373+
DeclarationKind kind) {
63526374
Token next = token.next;
63536375
String value = next.stringValue;
63546376

@@ -6397,7 +6419,7 @@ class Parser {
63976419
beforeType,
63986420
typeInfo,
63996421
token.next,
6400-
false);
6422+
kind);
64016423
}
64026424

64036425
listener.endMember();

pkg/front_end/lib/src/fasta/source/diet_listener.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ class DietListener extends StackListener {
309309
}
310310

311311
@override
312-
void endFields(Token staticToken, Token covariantToken, Token lateToken,
312+
void endClassFields(Token staticToken, Token covariantToken, Token lateToken,
313313
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
314314
debugEvent("Fields");
315315
buildFields(count, beginToken, false);

pkg/front_end/lib/src/fasta/source/outline_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1483,7 +1483,7 @@ class OutlineBuilder extends StackListener {
14831483
}
14841484

14851485
@override
1486-
void endFields(Token staticToken, Token covariantToken, Token lateToken,
1486+
void endClassFields(Token staticToken, Token covariantToken, Token lateToken,
14871487
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
14881488
debugEvent("Fields");
14891489
if (!library.loader.target.enableNonNullable) {

pkg/front_end/lib/src/fasta/source/type_promotion_look_ahead_listener.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ class TypePromotionLookAheadListener extends Listener {
564564
}
565565

566566
@override
567-
void endFields(Token staticToken, Token covariantToken, Token lateToken,
567+
void endClassFields(Token staticToken, Token covariantToken, Token lateToken,
568568
Token varFinalOrConst, int count, Token beginToken, Token endToken) {
569569
debugEvent("Fields", staticToken);
570570
state.discard(count); // Field names.

0 commit comments

Comments
 (0)