Skip to content

Commit 2a85a34

Browse files
danrubelcommit-bot@chromium.org
danrubel
authored andcommitted
Update handleType event to take questionMark token
... which in this CL will always null. This is the first step when adding NNDB support as outlined in dart-lang/language#110 Change-Id: If3810bcaf1b73e70924f09d619e2a84e7d5ba8d6 Reviewed-on: https://dart-review.googlesource.com/c/86860 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Dan Rubel <[email protected]>
1 parent 4d63202 commit 2a85a34

File tree

10 files changed

+148
-119
lines changed

10 files changed

+148
-119
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -960,8 +960,9 @@ class AstBuilder extends StackListener {
960960
}
961961

962962
@override
963-
void handleType(Token beginToken) {
963+
void handleType(Token beginToken, Token questionMark) {
964964
debugEvent("Type");
965+
reportErrorIfNullableType(questionMark);
965966

966967
TypeArgumentList arguments = pop();
967968
Identifier name = pop();
@@ -2552,7 +2553,7 @@ class AstBuilder extends StackListener {
25522553
// keyword up to an element?
25532554
handleIdentifier(voidKeyword, IdentifierContext.typeReference);
25542555
handleNoTypeArguments(voidKeyword);
2555-
handleType(voidKeyword);
2556+
handleType(voidKeyword, null);
25562557
}
25572558

25582559
@override

pkg/analyzer/tool/summary/mini_ast.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,8 +478,9 @@ class MiniAstBuilder extends StackListener {
478478
}
479479

480480
@override
481-
void handleType(Token beginToken) {
481+
void handleType(Token beginToken, Token questionMark) {
482482
debugEvent("Type");
483+
reportErrorIfNullableType(questionMark);
483484
List<TypeName> typeArguments = popTypedList();
484485
String name = pop();
485486
push(new TypeName(name, typeArguments));

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2467,9 +2467,10 @@ abstract class BodyBuilder extends ScopeListener<JumpTarget>
24672467
}
24682468

24692469
@override
2470-
void handleType(Token beginToken) {
2470+
void handleType(Token beginToken, Token questionMark) {
24712471
// TODO(ahe): The scope is wrong for return types of generic functions.
24722472
debugEvent("Type");
2473+
reportErrorIfNullableType(questionMark);
24732474
List<UnresolvedType<KernelTypeBuilder>> arguments = pop();
24742475
Object name = pop();
24752476
if (name is QualifiedName) {

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,8 +1349,8 @@ class ForwardingListener implements Listener {
13491349
}
13501350

13511351
@override
1352-
void handleType(Token beginToken) {
1353-
listener?.handleType(beginToken);
1352+
void handleType(Token beginToken, Token questionMark) {
1353+
listener?.handleType(beginToken, questionMark);
13541354
}
13551355

13561356
@override
@@ -1398,6 +1398,11 @@ class ForwardingListener implements Listener {
13981398
listener?.logEvent(name);
13991399
}
14001400

1401+
@override
1402+
void reportErrorIfNullableType(Token questionMark) {
1403+
listener?.reportErrorIfNullableType(questionMark);
1404+
}
1405+
14011406
@override
14021407
set suppressParseErrors(bool value) {
14031408
listener?.suppressParseErrors = value;

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ library fasta.parser.listener;
66

77
import '../../scanner/token.dart' show Token;
88

9-
import '../fasta_codes.dart' show Message;
9+
import '../fasta_codes.dart' show Message, templateUnexpectedToken;
1010

1111
import '../quote.dart' show UnescapeErrorListener;
1212

@@ -18,6 +18,8 @@ import 'identifier_context.dart' show IdentifierContext;
1818

1919
import 'member_kind.dart' show MemberKind;
2020

21+
import 'util.dart' show optional;
22+
2123
/// A parser event listener that does nothing except throw exceptions
2224
/// on parser errors.
2325
///
@@ -933,10 +935,22 @@ class Listener implements UnescapeErrorListener {
933935
logEvent("TryStatement");
934936
}
935937

936-
void handleType(Token beginToken) {
938+
void handleType(Token beginToken, Token questionMark) {
937939
logEvent("Type");
938940
}
939941

942+
// TODO(danrubel): Remove this once all listeners have been updated
943+
// to properly handle nullable types
944+
void reportErrorIfNullableType(Token questionMark) {
945+
if (questionMark != null) {
946+
assert(optional('?', questionMark));
947+
handleRecoverableError(
948+
templateUnexpectedToken.withArguments(questionMark),
949+
questionMark,
950+
questionMark);
951+
}
952+
}
953+
940954
void handleNoName(Token token) {
941955
logEvent("NoName");
942956
}

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class PrefixedType implements TypeInfo {
148148
listener.handleQualified(period);
149149

150150
listener.handleNoTypeArguments(token.next);
151-
listener.handleType(start);
151+
listener.handleType(start, null);
152152
return token;
153153
}
154154

@@ -183,10 +183,13 @@ class SimpleTypeWith1Argument implements TypeInfo {
183183
Token parseType(Token token, Parser parser) {
184184
Token start = token = token.next;
185185
assert(token.isKeywordOrIdentifier);
186-
Listener listener = parser.listener;
187-
listener.handleIdentifier(token, IdentifierContext.typeReference);
186+
parser.listener.handleIdentifier(token, IdentifierContext.typeReference);
188187
token = typeArg.parseArguments(token, parser);
189-
listener.handleType(start);
188+
return parseTypeRest(start, token, parser);
189+
}
190+
191+
Token parseTypeRest(Token start, Token token, Parser parser) {
192+
parser.listener.handleType(start, null);
190193
return token;
191194
}
192195

@@ -221,10 +224,13 @@ class SimpleType implements TypeInfo {
221224
Token parseType(Token token, Parser parser) {
222225
token = token.next;
223226
assert(isValidTypeReference(token));
224-
Listener listener = parser.listener;
225-
listener.handleIdentifier(token, IdentifierContext.typeReference);
227+
parser.listener.handleIdentifier(token, IdentifierContext.typeReference);
226228
token = noTypeParamOrArg.parseArguments(token, parser);
227-
listener.handleType(token);
229+
return parseTypeRest(token, parser);
230+
}
231+
232+
Token parseTypeRest(Token token, Parser parser) {
233+
parser.listener.handleType(token, null);
228234
return token;
229235
}
230236

@@ -372,7 +378,7 @@ class ComplexTypeInfo implements TypeInfo {
372378
}
373379
}
374380
token = typeArguments.parseArguments(token, parser);
375-
parser.listener.handleType(typeRefOrPrefix);
381+
parser.listener.handleType(typeRefOrPrefix, null);
376382
}
377383
}
378384

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class DietListener extends StackListener {
148148
}
149149

150150
@override
151-
void handleType(Token beginToken) {
151+
void handleType(Token beginToken, Token questionMark) {
152152
debugEvent("Type");
153153
discard(1);
154154
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -961,8 +961,9 @@ class OutlineBuilder extends StackListener {
961961
}
962962

963963
@override
964-
void handleType(Token beginToken) {
964+
void handleType(Token beginToken, Token questionMark) {
965965
debugEvent("Type");
966+
reportErrorIfNullableType(questionMark);
966967
List<TypeBuilder> arguments = pop();
967968
int charOffset = pop();
968969
Object name = pop();

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
@@ -1212,7 +1212,7 @@ class TypePromotionLookAheadListener extends Listener {
12121212
}
12131213

12141214
@override
1215-
void handleType(Token beginToken) {
1215+
void handleType(Token beginToken, Token questionMark) {
12161216
debugEvent("Type", beginToken);
12171217
state.pop();
12181218
}

0 commit comments

Comments
 (0)