Skip to content

Commit 01ac35b

Browse files
jensjohacommit-bot@chromium.org
authored andcommitted
[parser] Allow '..' as something following a nullable type
Fixes #42621 Change-Id: I56fd9475ffb3821592a6917949e858c6e48bdf20 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153773 Reviewed-by: Johnni Winther <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Jens Johansen <[email protected]>
1 parent c8b5a9b commit 01ac35b

File tree

6 files changed

+1155
-1
lines changed

6 files changed

+1155
-1
lines changed

pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5655,7 +5655,7 @@ class Parser {
56555655
if (typeInfo.isNullable) {
56565656
Token next = typeInfo.skipType(token).next;
56575657
if (!isOneOfOrEof(
5658-
next, const [')', '?', '??', ',', ';', ':', 'is', 'as'])) {
5658+
next, const [')', '?', '??', ',', ';', ':', 'is', 'as', '..'])) {
56595659
// TODO(danrubel): investigate other situations
56605660
// where `?` should be considered part of the type info
56615661
// rather than the start of a conditional expression.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Order method1(Map<String, dynamic> json) {
2+
return Order()
3+
..x = json['x'] as List
4+
..y = json['y'] as int;
5+
}
6+
7+
Order method2(Map<String, dynamic> json) {
8+
return Order()
9+
..x = json['x'] as List?
10+
..y = json['y'] as int;
11+
}
12+
13+
Order method3(Map<String, dynamic> json) {
14+
return Order()
15+
..x = (json['x'] as List?)
16+
..y = json['y'] as int;
17+
}
18+
19+
Order method4(Map<String, dynamic> json) {
20+
return Order()
21+
..x = json['x'] as List?;
22+
}
23+
24+
class Order {
25+
List? x;
26+
int? y;
27+
}
Lines changed: 341 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,341 @@
1+
beginCompilationUnit(Order)
2+
beginMetadataStar(Order)
3+
endMetadataStar(0)
4+
beginTopLevelMember(Order)
5+
beginTopLevelMethod(, null)
6+
handleIdentifier(Order, typeReference)
7+
handleNoTypeArguments(method1)
8+
handleType(Order, null)
9+
handleIdentifier(method1, topLevelFunctionDeclaration)
10+
handleNoTypeVariables(()
11+
beginFormalParameters((, MemberKind.TopLevelMethod)
12+
beginMetadataStar(Map)
13+
endMetadataStar(0)
14+
beginFormalParameter(Map, MemberKind.TopLevelMethod, null, null, null)
15+
handleIdentifier(Map, typeReference)
16+
beginTypeArguments(<)
17+
handleIdentifier(String, typeReference)
18+
handleNoTypeArguments(,)
19+
handleType(String, null)
20+
handleIdentifier(dynamic, typeReference)
21+
handleNoTypeArguments(>)
22+
handleType(dynamic, null)
23+
endTypeArguments(2, <, >)
24+
handleType(Map, null)
25+
handleIdentifier(json, formalParameterDeclaration)
26+
handleFormalParameterWithoutValue())
27+
endFormalParameter(null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
28+
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
29+
handleAsyncModifier(null, null)
30+
beginBlockFunctionBody({)
31+
beginReturnStatement(return)
32+
handleIdentifier(Order, expression)
33+
handleNoTypeArguments(()
34+
beginArguments(()
35+
endArguments(0, (, ))
36+
handleSend(Order, ..)
37+
beginCascade(..)
38+
handleIdentifier(x, expressionContinuation)
39+
handleNoTypeArguments(=)
40+
handleNoArguments(=)
41+
handleSend(x, =)
42+
endBinaryExpression(..)
43+
handleIdentifier(json, expression)
44+
handleNoTypeArguments([)
45+
handleNoArguments([)
46+
handleSend(json, [)
47+
beginLiteralString('x')
48+
endLiteralString(0, ])
49+
handleIndexedExpression(null, [, ])
50+
beginAsOperatorType(as)
51+
handleIdentifier(List, typeReference)
52+
handleNoTypeArguments(..)
53+
handleType(List, null)
54+
endAsOperatorType(as)
55+
handleAsOperator(as)
56+
handleAssignmentExpression(=)
57+
endCascade()
58+
beginCascade(..)
59+
handleIdentifier(y, expressionContinuation)
60+
handleNoTypeArguments(=)
61+
handleNoArguments(=)
62+
handleSend(y, =)
63+
endBinaryExpression(..)
64+
handleIdentifier(json, expression)
65+
handleNoTypeArguments([)
66+
handleNoArguments([)
67+
handleSend(json, [)
68+
beginLiteralString('y')
69+
endLiteralString(0, ])
70+
handleIndexedExpression(null, [, ])
71+
beginAsOperatorType(as)
72+
handleIdentifier(int, typeReference)
73+
handleNoTypeArguments(;)
74+
handleType(int, null)
75+
endAsOperatorType(as)
76+
handleAsOperator(as)
77+
handleAssignmentExpression(=)
78+
endCascade()
79+
endReturnStatement(true, return, ;)
80+
endBlockFunctionBody(1, {, })
81+
endTopLevelMethod(Order, null, })
82+
endTopLevelDeclaration(Order)
83+
beginMetadataStar(Order)
84+
endMetadataStar(0)
85+
beginTopLevelMember(Order)
86+
beginTopLevelMethod(}, null)
87+
handleIdentifier(Order, typeReference)
88+
handleNoTypeArguments(method2)
89+
handleType(Order, null)
90+
handleIdentifier(method2, topLevelFunctionDeclaration)
91+
handleNoTypeVariables(()
92+
beginFormalParameters((, MemberKind.TopLevelMethod)
93+
beginMetadataStar(Map)
94+
endMetadataStar(0)
95+
beginFormalParameter(Map, MemberKind.TopLevelMethod, null, null, null)
96+
handleIdentifier(Map, typeReference)
97+
beginTypeArguments(<)
98+
handleIdentifier(String, typeReference)
99+
handleNoTypeArguments(,)
100+
handleType(String, null)
101+
handleIdentifier(dynamic, typeReference)
102+
handleNoTypeArguments(>)
103+
handleType(dynamic, null)
104+
endTypeArguments(2, <, >)
105+
handleType(Map, null)
106+
handleIdentifier(json, formalParameterDeclaration)
107+
handleFormalParameterWithoutValue())
108+
endFormalParameter(null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
109+
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
110+
handleAsyncModifier(null, null)
111+
beginBlockFunctionBody({)
112+
beginReturnStatement(return)
113+
handleIdentifier(Order, expression)
114+
handleNoTypeArguments(()
115+
beginArguments(()
116+
endArguments(0, (, ))
117+
handleSend(Order, ..)
118+
beginCascade(..)
119+
handleIdentifier(x, expressionContinuation)
120+
handleNoTypeArguments(=)
121+
handleNoArguments(=)
122+
handleSend(x, =)
123+
endBinaryExpression(..)
124+
handleIdentifier(json, expression)
125+
handleNoTypeArguments([)
126+
handleNoArguments([)
127+
handleSend(json, [)
128+
beginLiteralString('x')
129+
endLiteralString(0, ])
130+
handleIndexedExpression(null, [, ])
131+
beginAsOperatorType(as)
132+
handleIdentifier(List, typeReference)
133+
handleNoTypeArguments(?)
134+
handleType(List, ?)
135+
endAsOperatorType(as)
136+
handleAsOperator(as)
137+
handleAssignmentExpression(=)
138+
endCascade()
139+
beginCascade(..)
140+
handleIdentifier(y, expressionContinuation)
141+
handleNoTypeArguments(=)
142+
handleNoArguments(=)
143+
handleSend(y, =)
144+
endBinaryExpression(..)
145+
handleIdentifier(json, expression)
146+
handleNoTypeArguments([)
147+
handleNoArguments([)
148+
handleSend(json, [)
149+
beginLiteralString('y')
150+
endLiteralString(0, ])
151+
handleIndexedExpression(null, [, ])
152+
beginAsOperatorType(as)
153+
handleIdentifier(int, typeReference)
154+
handleNoTypeArguments(;)
155+
handleType(int, null)
156+
endAsOperatorType(as)
157+
handleAsOperator(as)
158+
handleAssignmentExpression(=)
159+
endCascade()
160+
endReturnStatement(true, return, ;)
161+
endBlockFunctionBody(1, {, })
162+
endTopLevelMethod(Order, null, })
163+
endTopLevelDeclaration(Order)
164+
beginMetadataStar(Order)
165+
endMetadataStar(0)
166+
beginTopLevelMember(Order)
167+
beginTopLevelMethod(}, null)
168+
handleIdentifier(Order, typeReference)
169+
handleNoTypeArguments(method3)
170+
handleType(Order, null)
171+
handleIdentifier(method3, topLevelFunctionDeclaration)
172+
handleNoTypeVariables(()
173+
beginFormalParameters((, MemberKind.TopLevelMethod)
174+
beginMetadataStar(Map)
175+
endMetadataStar(0)
176+
beginFormalParameter(Map, MemberKind.TopLevelMethod, null, null, null)
177+
handleIdentifier(Map, typeReference)
178+
beginTypeArguments(<)
179+
handleIdentifier(String, typeReference)
180+
handleNoTypeArguments(,)
181+
handleType(String, null)
182+
handleIdentifier(dynamic, typeReference)
183+
handleNoTypeArguments(>)
184+
handleType(dynamic, null)
185+
endTypeArguments(2, <, >)
186+
handleType(Map, null)
187+
handleIdentifier(json, formalParameterDeclaration)
188+
handleFormalParameterWithoutValue())
189+
endFormalParameter(null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
190+
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
191+
handleAsyncModifier(null, null)
192+
beginBlockFunctionBody({)
193+
beginReturnStatement(return)
194+
handleIdentifier(Order, expression)
195+
handleNoTypeArguments(()
196+
beginArguments(()
197+
endArguments(0, (, ))
198+
handleSend(Order, ..)
199+
beginCascade(..)
200+
handleIdentifier(x, expressionContinuation)
201+
handleNoTypeArguments(=)
202+
handleNoArguments(=)
203+
handleSend(x, =)
204+
endBinaryExpression(..)
205+
handleIdentifier(json, expression)
206+
handleNoTypeArguments([)
207+
handleNoArguments([)
208+
handleSend(json, [)
209+
beginLiteralString('x')
210+
endLiteralString(0, ])
211+
handleIndexedExpression(null, [, ])
212+
beginAsOperatorType(as)
213+
handleIdentifier(List, typeReference)
214+
handleNoTypeArguments(?)
215+
handleType(List, ?)
216+
endAsOperatorType(as)
217+
handleAsOperator(as)
218+
handleParenthesizedExpression(()
219+
handleAssignmentExpression(=)
220+
endCascade()
221+
beginCascade(..)
222+
handleIdentifier(y, expressionContinuation)
223+
handleNoTypeArguments(=)
224+
handleNoArguments(=)
225+
handleSend(y, =)
226+
endBinaryExpression(..)
227+
handleIdentifier(json, expression)
228+
handleNoTypeArguments([)
229+
handleNoArguments([)
230+
handleSend(json, [)
231+
beginLiteralString('y')
232+
endLiteralString(0, ])
233+
handleIndexedExpression(null, [, ])
234+
beginAsOperatorType(as)
235+
handleIdentifier(int, typeReference)
236+
handleNoTypeArguments(;)
237+
handleType(int, null)
238+
endAsOperatorType(as)
239+
handleAsOperator(as)
240+
handleAssignmentExpression(=)
241+
endCascade()
242+
endReturnStatement(true, return, ;)
243+
endBlockFunctionBody(1, {, })
244+
endTopLevelMethod(Order, null, })
245+
endTopLevelDeclaration(Order)
246+
beginMetadataStar(Order)
247+
endMetadataStar(0)
248+
beginTopLevelMember(Order)
249+
beginTopLevelMethod(}, null)
250+
handleIdentifier(Order, typeReference)
251+
handleNoTypeArguments(method4)
252+
handleType(Order, null)
253+
handleIdentifier(method4, topLevelFunctionDeclaration)
254+
handleNoTypeVariables(()
255+
beginFormalParameters((, MemberKind.TopLevelMethod)
256+
beginMetadataStar(Map)
257+
endMetadataStar(0)
258+
beginFormalParameter(Map, MemberKind.TopLevelMethod, null, null, null)
259+
handleIdentifier(Map, typeReference)
260+
beginTypeArguments(<)
261+
handleIdentifier(String, typeReference)
262+
handleNoTypeArguments(,)
263+
handleType(String, null)
264+
handleIdentifier(dynamic, typeReference)
265+
handleNoTypeArguments(>)
266+
handleType(dynamic, null)
267+
endTypeArguments(2, <, >)
268+
handleType(Map, null)
269+
handleIdentifier(json, formalParameterDeclaration)
270+
handleFormalParameterWithoutValue())
271+
endFormalParameter(null, null, json, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
272+
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
273+
handleAsyncModifier(null, null)
274+
beginBlockFunctionBody({)
275+
beginReturnStatement(return)
276+
handleIdentifier(Order, expression)
277+
handleNoTypeArguments(()
278+
beginArguments(()
279+
endArguments(0, (, ))
280+
handleSend(Order, ..)
281+
beginCascade(..)
282+
handleIdentifier(x, expressionContinuation)
283+
handleNoTypeArguments(=)
284+
handleNoArguments(=)
285+
handleSend(x, =)
286+
endBinaryExpression(..)
287+
handleIdentifier(json, expression)
288+
handleNoTypeArguments([)
289+
handleNoArguments([)
290+
handleSend(json, [)
291+
beginLiteralString('x')
292+
endLiteralString(0, ])
293+
handleIndexedExpression(null, [, ])
294+
beginAsOperatorType(as)
295+
handleIdentifier(List, typeReference)
296+
handleNoTypeArguments(?)
297+
handleType(List, ?)
298+
endAsOperatorType(as)
299+
handleAsOperator(as)
300+
handleAssignmentExpression(=)
301+
endCascade()
302+
endReturnStatement(true, return, ;)
303+
endBlockFunctionBody(1, {, })
304+
endTopLevelMethod(Order, null, })
305+
endTopLevelDeclaration(class)
306+
beginMetadataStar(class)
307+
endMetadataStar(0)
308+
beginClassOrNamedMixinApplicationPrelude(class)
309+
handleIdentifier(Order, classOrMixinDeclaration)
310+
handleNoTypeVariables({)
311+
beginClassDeclaration(class, null, Order)
312+
handleNoType(Order)
313+
handleClassExtends(null)
314+
handleClassNoWithClause()
315+
handleClassOrMixinImplements(null, 0)
316+
handleClassHeader(class, class, null)
317+
beginClassOrMixinBody(DeclarationKind.Class, {)
318+
beginMetadataStar(List)
319+
endMetadataStar(0)
320+
beginMember()
321+
handleIdentifier(List, typeReference)
322+
handleNoTypeArguments(?)
323+
handleType(List, ?)
324+
handleIdentifier(x, fieldDeclaration)
325+
handleNoFieldInitializer(;)
326+
endClassFields(null, null, null, null, 1, List, ;)
327+
endMember()
328+
beginMetadataStar(int)
329+
endMetadataStar(0)
330+
beginMember()
331+
handleIdentifier(int, typeReference)
332+
handleNoTypeArguments(?)
333+
handleType(int, ?)
334+
handleIdentifier(y, fieldDeclaration)
335+
handleNoFieldInitializer(;)
336+
endClassFields(null, null, null, null, 1, int, ;)
337+
endMember()
338+
endClassOrMixinBody(DeclarationKind.Class, 2, {, })
339+
endClassDeclaration(class, })
340+
endTopLevelDeclaration()
341+
endCompilationUnit(5, )

0 commit comments

Comments
 (0)