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
https://github.com/dart-lang/language/issues/110
Change-Id: If3810bcaf1b73e70924f09d619e2a84e7d5ba8d6
Reviewed-on: https://dart-review.googlesource.com/c/86860
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index bb0a129..aebb4f0 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -960,8 +960,9 @@
}
@override
- void handleType(Token beginToken) {
+ void handleType(Token beginToken, Token questionMark) {
debugEvent("Type");
+ reportErrorIfNullableType(questionMark);
TypeArgumentList arguments = pop();
Identifier name = pop();
@@ -2552,7 +2553,7 @@
// keyword up to an element?
handleIdentifier(voidKeyword, IdentifierContext.typeReference);
handleNoTypeArguments(voidKeyword);
- handleType(voidKeyword);
+ handleType(voidKeyword, null);
}
@override
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 2559cb9..031b497 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -478,8 +478,9 @@
}
@override
- void handleType(Token beginToken) {
+ void handleType(Token beginToken, Token questionMark) {
debugEvent("Type");
+ reportErrorIfNullableType(questionMark);
List<TypeName> typeArguments = popTypedList();
String name = pop();
push(new TypeName(name, typeArguments));
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index dc8f3db..c9e1599 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -2467,9 +2467,10 @@
}
@override
- void handleType(Token beginToken) {
+ void handleType(Token beginToken, Token questionMark) {
// TODO(ahe): The scope is wrong for return types of generic functions.
debugEvent("Type");
+ reportErrorIfNullableType(questionMark);
List<UnresolvedType<KernelTypeBuilder>> arguments = pop();
Object name = pop();
if (name is QualifiedName) {
diff --git a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
index 166d266..f297798 100644
--- a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
@@ -1349,8 +1349,8 @@
}
@override
- void handleType(Token beginToken) {
- listener?.handleType(beginToken);
+ void handleType(Token beginToken, Token questionMark) {
+ listener?.handleType(beginToken, questionMark);
}
@override
@@ -1399,6 +1399,11 @@
}
@override
+ void reportErrorIfNullableType(Token questionMark) {
+ listener?.reportErrorIfNullableType(questionMark);
+ }
+
+ @override
set suppressParseErrors(bool value) {
listener?.suppressParseErrors = value;
}
diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart
index 457928d..720f244 100644
--- a/pkg/front_end/lib/src/fasta/parser/listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/listener.dart
@@ -6,7 +6,7 @@
import '../../scanner/token.dart' show Token;
-import '../fasta_codes.dart' show Message;
+import '../fasta_codes.dart' show Message, templateUnexpectedToken;
import '../quote.dart' show UnescapeErrorListener;
@@ -18,6 +18,8 @@
import 'member_kind.dart' show MemberKind;
+import 'util.dart' show optional;
+
/// A parser event listener that does nothing except throw exceptions
/// on parser errors.
///
@@ -933,10 +935,22 @@
logEvent("TryStatement");
}
- void handleType(Token beginToken) {
+ void handleType(Token beginToken, Token questionMark) {
logEvent("Type");
}
+ // TODO(danrubel): Remove this once all listeners have been updated
+ // to properly handle nullable types
+ void reportErrorIfNullableType(Token questionMark) {
+ if (questionMark != null) {
+ assert(optional('?', questionMark));
+ handleRecoverableError(
+ templateUnexpectedToken.withArguments(questionMark),
+ questionMark,
+ questionMark);
+ }
+ }
+
void handleNoName(Token token) {
logEvent("NoName");
}
diff --git a/pkg/front_end/lib/src/fasta/parser/type_info_impl.dart b/pkg/front_end/lib/src/fasta/parser/type_info_impl.dart
index f46d819..6ec0d20 100644
--- a/pkg/front_end/lib/src/fasta/parser/type_info_impl.dart
+++ b/pkg/front_end/lib/src/fasta/parser/type_info_impl.dart
@@ -148,7 +148,7 @@
listener.handleQualified(period);
listener.handleNoTypeArguments(token.next);
- listener.handleType(start);
+ listener.handleType(start, null);
return token;
}
@@ -183,10 +183,13 @@
Token parseType(Token token, Parser parser) {
Token start = token = token.next;
assert(token.isKeywordOrIdentifier);
- Listener listener = parser.listener;
- listener.handleIdentifier(token, IdentifierContext.typeReference);
+ parser.listener.handleIdentifier(token, IdentifierContext.typeReference);
token = typeArg.parseArguments(token, parser);
- listener.handleType(start);
+ return parseTypeRest(start, token, parser);
+ }
+
+ Token parseTypeRest(Token start, Token token, Parser parser) {
+ parser.listener.handleType(start, null);
return token;
}
@@ -221,10 +224,13 @@
Token parseType(Token token, Parser parser) {
token = token.next;
assert(isValidTypeReference(token));
- Listener listener = parser.listener;
- listener.handleIdentifier(token, IdentifierContext.typeReference);
+ parser.listener.handleIdentifier(token, IdentifierContext.typeReference);
token = noTypeParamOrArg.parseArguments(token, parser);
- listener.handleType(token);
+ return parseTypeRest(token, parser);
+ }
+
+ Token parseTypeRest(Token token, Parser parser) {
+ parser.listener.handleType(token, null);
return token;
}
@@ -372,7 +378,7 @@
}
}
token = typeArguments.parseArguments(token, parser);
- parser.listener.handleType(typeRefOrPrefix);
+ parser.listener.handleType(typeRefOrPrefix, null);
}
}
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 56575ba..e8015fc 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -148,7 +148,7 @@
}
@override
- void handleType(Token beginToken) {
+ void handleType(Token beginToken, Token questionMark) {
debugEvent("Type");
discard(1);
}
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 5b1f67f..c39ef6a 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -961,8 +961,9 @@
}
@override
- void handleType(Token beginToken) {
+ void handleType(Token beginToken, Token questionMark) {
debugEvent("Type");
+ reportErrorIfNullableType(questionMark);
List<TypeBuilder> arguments = pop();
int charOffset = pop();
Object name = pop();
diff --git a/pkg/front_end/lib/src/fasta/source/type_promotion_look_ahead_listener.dart b/pkg/front_end/lib/src/fasta/source/type_promotion_look_ahead_listener.dart
index 3778a4c..1fa2e5d 100644
--- a/pkg/front_end/lib/src/fasta/source/type_promotion_look_ahead_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/type_promotion_look_ahead_listener.dart
@@ -1212,7 +1212,7 @@
}
@override
- void handleType(Token beginToken) {
+ void handleType(Token beginToken, Token questionMark) {
debugEvent("Type", beginToken);
state.pop();
}
diff --git a/pkg/front_end/test/fasta/parser/type_info_test.dart b/pkg/front_end/test/fasta/parser/type_info_test.dart
index 975eda8..84d5231 100644
--- a/pkg/front_end/test/fasta/parser/type_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/type_info_test.dart
@@ -141,7 +141,7 @@
expect(listener.calls, [
'handleIdentifier typeReference',
'handleNoTypeArguments ;',
- 'handleType ',
+ 'handleType null',
]);
expect(listener.errors, [new ExpectedError(codeExpectedType, 7, 1)]);
}
@@ -155,7 +155,7 @@
expect(listener.calls, [
'handleIdentifier typeReference',
'handleNoTypeArguments ;',
- 'handleType ',
+ 'handleType null',
]);
expect(listener.errors, [new ExpectedError(codeExpectedType, 7, 1)]);
}
@@ -219,7 +219,7 @@
expect(listener.calls, [
'handleIdentifier void typeReference',
'handleNoTypeArguments ;',
- 'handleType void',
+ 'handleType void null',
]);
expect(listener.errors, [new ExpectedError(codeInvalidVoid, 7, 4)]);
}
@@ -250,7 +250,7 @@
expect(listener.calls, [
'handleIdentifier void typeReference',
'handleNoTypeArguments ;',
- 'handleType void',
+ 'handleType void null',
]);
expect(listener.errors, [new ExpectedError(codeInvalidVoid, 7, 4)]);
}
@@ -289,7 +289,7 @@
'handleIdentifier a typeReferenceContinuation',
'handleQualified .',
'handleNoTypeArguments ;',
- 'handleType C',
+ 'handleType C null',
]);
expect(listener.errors, isNull);
}
@@ -349,7 +349,7 @@
expect(listener.calls, [
'handleIdentifier C typeReference',
'handleNoTypeArguments ;',
- 'handleType C',
+ 'handleType C null',
]);
expect(listener.errors, isNull);
}
@@ -425,9 +425,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
]);
expect(listener.errors, isNull);
}
@@ -471,9 +471,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
]);
expect(listener.errors, isNull);
}
@@ -516,9 +516,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
]);
expect(listener.errors, isNull);
}
@@ -609,7 +609,7 @@
'beginFormalParameter int MemberKind.GeneralizedFunctionType',
'handleIdentifier int typeReference',
'handleNoTypeArguments )',
- 'handleType int',
+ 'handleType int null',
'handleNoName )',
'handleFormalParameterWithoutValue )',
'endFormalParameter null null ) FormalParameterKind.mandatory '
@@ -635,7 +635,7 @@
'beginFormalParameter int MemberKind.GeneralizedFunctionType',
'handleIdentifier int typeReference',
'handleNoTypeArguments )',
- 'handleType int',
+ 'handleType int null',
'handleNoName )',
'handleFormalParameterWithoutValue )',
'endFormalParameter null null ) FormalParameterKind.mandatory'
@@ -674,7 +674,7 @@
'beginFunctionType C',
'handleIdentifier C typeReference',
'handleNoTypeArguments Function',
- 'handleType C',
+ 'handleType C null',
'beginFormalParameters ( MemberKind.GeneralizedFunctionType',
'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
'endFunctionType Function',
@@ -687,7 +687,7 @@
'beginTypeArguments <',
'handleVoidKeyword void',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
]);
}
@@ -697,12 +697,12 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments ,',
- 'handleType S',
+ 'handleType S null',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 2 < >',
- 'handleType C',
+ 'handleType C null',
]);
expectComplexInfo('C<S<T>>', required: true, expectedCalls: [
'handleIdentifier C typeReference',
@@ -711,23 +711,23 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
]);
expectComplexInfo('C<S,T> f', expectedAfter: 'f', expectedCalls: [
'handleIdentifier C typeReference',
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments ,',
- 'handleType S',
+ 'handleType S null',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 2 < >',
- 'handleType C',
+ 'handleType C null',
]);
expectComplexInfo('C<S<T>> f', expectedAfter: 'f', expectedCalls: [
'handleIdentifier C typeReference',
@@ -736,11 +736,11 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
]);
}
@@ -754,9 +754,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
'beginFormalParameters ( MemberKind.GeneralizedFunctionType',
'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
'endFunctionType Function',
@@ -780,12 +780,12 @@
'beginTypeArguments <',
'handleIdentifier int typeReference',
'handleNoTypeArguments double' /* was , */,
- 'handleType int' /* was , */,
+ 'handleType int null' /* was , */,
'handleIdentifier double typeReference',
'handleNoTypeArguments >',
- 'handleType double',
+ 'handleType double null',
'endTypeArguments 2 < >',
- 'handleType G',
+ 'handleType G null',
],
expectedErrors: [
error(codeExpectedButGot, 6, 6)
@@ -797,9 +797,9 @@
'beginTypeArguments <',
'handleIdentifier typeReference',
'handleNoTypeArguments >',
- 'handleType ',
+ 'handleType null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
], expectedErrors: [
error(codeExpectedType, 2, 1)
]);
@@ -811,9 +811,9 @@
'beginTypeArguments <',
'handleIdentifier typeReference',
'handleNoTypeArguments >',
- 'handleType ',
+ 'handleType null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
],
expectedErrors: [
error(codeExpectedType, 2, 1)
@@ -865,7 +865,7 @@
'handleIdentifier a typeReferenceContinuation',
'handleQualified .',
'handleNoTypeArguments Function',
- 'handleType C',
+ 'handleType C null',
'beginFormalParameters ( MemberKind.GeneralizedFunctionType',
'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
'endFunctionType Function',
@@ -884,9 +884,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
]);
expectComplexInfo('C.a<T> f', expectedAfter: 'f', expectedCalls: [
@@ -896,9 +896,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
]);
}
@@ -932,16 +932,16 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType C',
+ 'handleType C null',
'beginFormalParameters ( MemberKind.GeneralizedFunctionType',
'beginMetadataStar int',
'endMetadataStar 0',
'beginFormalParameter int MemberKind.GeneralizedFunctionType',
'handleIdentifier int typeReference',
'handleNoTypeArguments x',
- 'handleType int',
+ 'handleType int null',
'handleIdentifier x formalParameterDeclaration',
'handleFormalParameterWithoutValue )',
'endFormalParameter null null x FormalParameterKind.mandatory '
@@ -954,7 +954,7 @@
'beginFormalParameter int MemberKind.GeneralizedFunctionType',
'handleIdentifier int typeReference',
'handleNoTypeArguments x',
- 'handleType int',
+ 'handleType int null',
'handleIdentifier x formalParameterDeclaration',
'handleFormalParameterWithoutValue )',
'endFormalParameter null null x FormalParameterKind.mandatory '
@@ -1132,7 +1132,7 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >'
]);
expect(listener.errors, isNull);
@@ -1200,10 +1200,10 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments ,',
- 'handleType S',
+ 'handleType S null',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 2 < >'
]);
expectComplexTypeArg('<S,T>=',
@@ -1213,10 +1213,10 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments ,',
- 'handleType S',
+ 'handleType S null',
'handleIdentifier T typeReference',
'handleNoTypeArguments >=',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 2 < >'
]);
expectComplexTypeArg('<S,T>>=',
@@ -1226,10 +1226,10 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments ,',
- 'handleType S',
+ 'handleType S null',
'handleIdentifier T typeReference',
'handleNoTypeArguments >>=',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 2 < >'
]);
expectComplexTypeArg('<S Function()>',
@@ -1240,7 +1240,7 @@
'beginFunctionType S',
'handleIdentifier S typeReference',
'handleNoTypeArguments Function',
- 'handleType S',
+ 'handleType S null',
'beginFormalParameters ( MemberKind.GeneralizedFunctionType',
'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
'endFunctionType Function',
@@ -1264,9 +1264,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >'
]);
expectComplexTypeArg('<S<T>>=',
@@ -1278,9 +1278,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >>=',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >'
]);
expectComplexTypeArg('<S<T<U>>>', typeArgumentCount: 1, expectedCalls: [
@@ -1291,11 +1291,11 @@
'beginTypeArguments <',
'handleIdentifier U typeReference',
'handleNoTypeArguments >>>',
- 'handleType U',
+ 'handleType U null',
'endTypeArguments 1 < >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >'
]);
expectComplexTypeArg('<S<T<U,V>>>', typeArgumentCount: 1, expectedCalls: [
@@ -1306,14 +1306,14 @@
'beginTypeArguments <',
'handleIdentifier U typeReference',
'handleNoTypeArguments ,',
- 'handleType U',
+ 'handleType U null',
'handleIdentifier V typeReference',
'handleNoTypeArguments >>>',
- 'handleType V',
+ 'handleType V null',
'endTypeArguments 2 < >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >'
]);
expectComplexTypeArg('<S<Function()>>',
@@ -1329,7 +1329,7 @@
'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
'endFunctionType Function',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >'
]);
expectComplexTypeArg('<S<Function()>>=',
@@ -1346,7 +1346,7 @@
'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
'endFunctionType Function',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >'
]);
expectComplexTypeArg('<S<void Function()>>',
@@ -1362,7 +1362,7 @@
'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
'endFunctionType Function',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >'
]);
expectComplexTypeArg('<S<T<void Function()>>>',
@@ -1380,9 +1380,9 @@
'endFormalParameters 0 ( ) MemberKind.GeneralizedFunctionType',
'endFunctionType Function',
'endTypeArguments 1 < >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >'
]);
}
@@ -1397,7 +1397,7 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments extends',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >',
]);
expectComplexTypeArg('<S extends List<T>>',
@@ -1409,7 +1409,7 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments extends',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >',
]);
expectComplexTypeArg('<@A S,T>', typeArgumentCount: 2, expectedErrors: [
@@ -1418,10 +1418,10 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments ,',
- 'handleType S',
+ 'handleType S null',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 2 < >'
]);
expectComplexTypeArg('<@A() S,T>', typeArgumentCount: 2, expectedErrors: [
@@ -1430,10 +1430,10 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments ,',
- 'handleType S',
+ 'handleType S null',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 2 < >'
]);
expectComplexTypeArg('<@A() @B S,T>',
@@ -1446,10 +1446,10 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments ,',
- 'handleType S',
+ 'handleType S null',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 2 < >'
]);
expectComplexTypeArg('<S T>',
@@ -1479,9 +1479,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments ',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >'
]);
}
@@ -1515,7 +1515,7 @@
'handleTypeVariablesDefined T 1',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeVariable > 0 extends',
'endTypeVariables < >',
]);
@@ -1532,9 +1532,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType List',
+ 'handleType List null',
'endTypeVariable > 0 extends',
'endTypeVariables < >',
]);
@@ -1654,7 +1654,7 @@
'handleTypeVariablesDefined void 1',
'handleIdentifier void typeReference',
'handleNoTypeArguments >',
- 'handleType void',
+ 'handleType void null',
'endTypeVariable > 0 extends',
'endTypeVariables < >'
]);
@@ -1743,9 +1743,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments fieldName',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType List',
+ 'handleType List null',
'endTypeVariable fieldName 0 extends',
'endTypeVariables < >',
]);
@@ -1765,9 +1765,9 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType Comparable',
+ 'handleType Comparable null',
'endTypeVariable > 0 extends',
'endTypeVariables < >',
]);
@@ -1790,9 +1790,9 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments >',
- 'handleType S',
+ 'handleType S null',
'endTypeArguments 1 < >',
- 'handleType Comparable',
+ 'handleType Comparable null',
'endTypeVariable , 0 extends',
'endTypeVariables < >'
]);
@@ -1814,7 +1814,7 @@
'beginFormalParameter T MemberKind.GeneralizedFunctionType',
'handleIdentifier T typeReference',
'handleNoTypeArguments )',
- 'handleType T',
+ 'handleType T null',
'handleNoName )',
'handleFormalParameterWithoutValue )',
'endFormalParameter null null ) FormalParameterKind.mandatory MemberKind.GeneralizedFunctionType',
@@ -1838,11 +1838,11 @@
'beginTypeArguments <',
'handleIdentifier T typeReference',
'handleNoTypeArguments >>>',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 1 < >',
- 'handleType List',
+ 'handleType List null',
'endTypeArguments 1 < >',
- 'handleType List',
+ 'handleType List null',
'endTypeVariable > 0 extends',
'endTypeVariables < >'
]);
@@ -1861,14 +1861,14 @@
'beginTypeArguments <',
'handleIdentifier S typeReference',
'handleNoTypeArguments ,',
- 'handleType S',
+ 'handleType S null',
'handleIdentifier T typeReference',
'handleNoTypeArguments >>>',
- 'handleType T',
+ 'handleType T null',
'endTypeArguments 2 < >',
- 'handleType Map',
+ 'handleType Map null',
'endTypeArguments 1 < >',
- 'handleType List',
+ 'handleType List null',
'endTypeVariable > 0 extends',
'endTypeVariables < >'
]);
@@ -2307,8 +2307,8 @@
}
@override
- void handleType(Token beginToken) {
- calls.add('handleType $beginToken');
+ void handleType(Token beginToken, Token questionMark) {
+ calls.add('handleType $beginToken $questionMark');
}
@override