2
2
// for details. All rights reserved. Use of this source code is governed by a
3
3
// BSD-style license that can be found in the LICENSE file.
4
4
5
+ import 'package:_fe_analyzer_shared/src/flow_analysis/flow_analysis.dart' ;
5
6
import 'package:analyzer/dart/analysis/features.dart' ;
6
7
import 'package:analyzer/dart/ast/ast.dart' ;
7
8
import 'package:analyzer/dart/element/element.dart' ;
@@ -28,11 +29,12 @@ class AnnotationResolver {
28
29
bool get _genericMetadataIsEnabled =>
29
30
_definingLibrary.featureSet.isEnabled (Feature .generic_metadata);
30
31
31
- void resolve (AnnotationImpl node) {
32
+ void resolve (AnnotationImpl node,
33
+ List <Map <DartType , NonPromotionReason > Function ()> whyNotPromotedInfo) {
32
34
AstNode parent = node.parent;
33
35
34
36
node.typeArguments? .accept (_resolver);
35
- _resolve (node);
37
+ _resolve (node, whyNotPromotedInfo );
36
38
37
39
var elementAnnotationImpl =
38
40
node.elementAnnotation as ElementAnnotationImpl ? ;
@@ -48,6 +50,7 @@ class AnnotationResolver {
48
50
AnnotationImpl node,
49
51
ClassElement classElement,
50
52
SimpleIdentifierImpl ? getterName,
53
+ List <Map <DartType , NonPromotionReason > Function ()> whyNotPromotedInfo,
51
54
) {
52
55
ExecutableElement ? getter;
53
56
if (getterName != null ) {
@@ -63,7 +66,7 @@ class AnnotationResolver {
63
66
node.element = getter;
64
67
65
68
if (getterName != null && getter is PropertyAccessorElement ) {
66
- _propertyAccessorElement (node, getterName, getter);
69
+ _propertyAccessorElement (node, getterName, getter, whyNotPromotedInfo );
67
70
_resolveAnnotationElementGetter (node, getter);
68
71
} else if (getter is ! ConstructorElement ) {
69
72
_errorReporter.reportErrorForNode (
@@ -72,14 +75,15 @@ class AnnotationResolver {
72
75
);
73
76
}
74
77
75
- node.arguments ? . accept (_resolver );
78
+ _visitArguments (node, whyNotPromotedInfo );
76
79
}
77
80
78
81
void _constructorInvocation (
79
82
AnnotationImpl node,
80
83
ClassElement classElement,
81
84
SimpleIdentifierImpl ? constructorName,
82
85
ArgumentList argumentList,
86
+ List <Map <DartType , NonPromotionReason > Function ()> whyNotPromotedInfo,
83
87
) {
84
88
ConstructorElement ? constructorElement;
85
89
if (constructorName != null ) {
@@ -99,7 +103,8 @@ class AnnotationResolver {
99
103
CompileTimeErrorCode .INVALID_ANNOTATION ,
100
104
node,
101
105
);
102
- argumentList.accept (_resolver);
106
+ _resolver.visitArgumentList (argumentList,
107
+ whyNotPromotedInfo: whyNotPromotedInfo);
103
108
return ;
104
109
}
105
110
@@ -109,7 +114,8 @@ class AnnotationResolver {
109
114
if (typeParameters.isEmpty) {
110
115
_resolveConstructorInvocationArguments (node);
111
116
InferenceContext .setType (argumentList, constructorElement.type);
112
- argumentList.accept (_resolver);
117
+ _resolver.visitArgumentList (argumentList,
118
+ whyNotPromotedInfo: whyNotPromotedInfo);
113
119
return ;
114
120
}
115
121
@@ -127,7 +133,8 @@ class AnnotationResolver {
127
133
_resolveConstructorInvocationArguments (node);
128
134
129
135
InferenceContext .setType (argumentList, constructorElement.type);
130
- argumentList.accept (_resolver);
136
+ _resolver.visitArgumentList (argumentList,
137
+ whyNotPromotedInfo: whyNotPromotedInfo);
131
138
}
132
139
133
140
if (! _genericMetadataIsEnabled) {
@@ -156,7 +163,8 @@ class AnnotationResolver {
156
163
return ;
157
164
}
158
165
159
- argumentList.accept (_resolver);
166
+ _resolver.visitArgumentList (argumentList,
167
+ whyNotPromotedInfo: whyNotPromotedInfo);
160
168
161
169
var constructorRawType = _resolver.typeAnalyzer
162
170
.constructorToGenericFunctionType (constructorElement);
@@ -186,6 +194,7 @@ class AnnotationResolver {
186
194
AnnotationImpl node,
187
195
ExtensionElement extensionElement,
188
196
SimpleIdentifierImpl ? getterName,
197
+ List <Map <DartType , NonPromotionReason > Function ()> whyNotPromotedInfo,
189
198
) {
190
199
ExecutableElement ? getter;
191
200
if (getterName != null ) {
@@ -197,7 +206,7 @@ class AnnotationResolver {
197
206
node.element = getter;
198
207
199
208
if (getterName != null && getter is PropertyAccessorElement ) {
200
- _propertyAccessorElement (node, getterName, getter);
209
+ _propertyAccessorElement (node, getterName, getter, whyNotPromotedInfo );
201
210
_resolveAnnotationElementGetter (node, getter);
202
211
} else {
203
212
_errorReporter.reportErrorForNode (
@@ -206,23 +215,25 @@ class AnnotationResolver {
206
215
);
207
216
}
208
217
209
- node.arguments ? . accept (_resolver );
218
+ _visitArguments (node, whyNotPromotedInfo );
210
219
}
211
220
212
221
void _propertyAccessorElement (
213
222
AnnotationImpl node,
214
223
SimpleIdentifierImpl name,
215
224
PropertyAccessorElement element,
225
+ List <Map <DartType , NonPromotionReason > Function ()> whyNotPromotedInfo,
216
226
) {
217
227
element = _resolver.toLegacyElement (element);
218
228
name.staticElement = element;
219
229
node.element = element;
220
230
221
231
_resolveAnnotationElementGetter (node, element);
222
- node.arguments ? . accept (_resolver );
232
+ _visitArguments (node, whyNotPromotedInfo );
223
233
}
224
234
225
- void _resolve (AnnotationImpl node) {
235
+ void _resolve (AnnotationImpl node,
236
+ List <Map <DartType , NonPromotionReason > Function ()> whyNotPromotedInfo) {
226
237
SimpleIdentifierImpl name1;
227
238
SimpleIdentifierImpl ? name2;
228
239
SimpleIdentifierImpl ? name3;
@@ -246,23 +257,24 @@ class AnnotationResolver {
246
257
node,
247
258
[name1.name],
248
259
);
249
- node.arguments ? . accept (_resolver );
260
+ _visitArguments (node, whyNotPromotedInfo );
250
261
return ;
251
262
}
252
263
253
264
// Class(args) or Class.CONST
254
265
if (element1 is ClassElement ) {
255
266
if (argumentList != null ) {
256
- _constructorInvocation (node, element1, name2, argumentList);
267
+ _constructorInvocation (
268
+ node, element1, name2, argumentList, whyNotPromotedInfo);
257
269
} else {
258
- _classGetter (node, element1, name2);
270
+ _classGetter (node, element1, name2, whyNotPromotedInfo );
259
271
}
260
272
return ;
261
273
}
262
274
263
275
// Extension.CONST
264
276
if (element1 is ExtensionElement ) {
265
- _extensionGetter (node, element1, name2);
277
+ _extensionGetter (node, element1, name2, whyNotPromotedInfo );
266
278
return ;
267
279
}
268
280
@@ -274,20 +286,21 @@ class AnnotationResolver {
274
286
// prefix.Class(args) or prefix.Class.CONST
275
287
if (element2 is ClassElement ) {
276
288
if (argumentList != null ) {
277
- _constructorInvocation (node, element2, name3, argumentList);
289
+ _constructorInvocation (
290
+ node, element2, name3, argumentList, whyNotPromotedInfo);
278
291
} else {
279
- _classGetter (node, element2, name3);
292
+ _classGetter (node, element2, name3, whyNotPromotedInfo );
280
293
}
281
294
return ;
282
295
}
283
296
// prefix.Extension.CONST
284
297
if (element2 is ExtensionElement ) {
285
- _extensionGetter (node, element2, name3);
298
+ _extensionGetter (node, element2, name3, whyNotPromotedInfo );
286
299
return ;
287
300
}
288
301
// prefix.CONST
289
302
if (element2 is PropertyAccessorElement ) {
290
- _propertyAccessorElement (node, name2, element2);
303
+ _propertyAccessorElement (node, name2, element2, whyNotPromotedInfo );
291
304
return ;
292
305
}
293
306
// undefined
@@ -297,15 +310,15 @@ class AnnotationResolver {
297
310
node,
298
311
[name2.name],
299
312
);
300
- node.arguments ? . accept (_resolver );
313
+ _visitArguments (node, whyNotPromotedInfo );
301
314
return ;
302
315
}
303
316
}
304
317
}
305
318
306
319
// CONST
307
320
if (element1 is PropertyAccessorElement ) {
308
- _propertyAccessorElement (node, name1, element1);
321
+ _propertyAccessorElement (node, name1, element1, whyNotPromotedInfo );
309
322
return ;
310
323
}
311
324
@@ -319,7 +332,7 @@ class AnnotationResolver {
319
332
node,
320
333
);
321
334
322
- node.arguments ? . accept (_resolver );
335
+ _visitArguments (node, whyNotPromotedInfo );
323
336
}
324
337
325
338
void _resolveAnnotationElementGetter (
@@ -379,4 +392,13 @@ class AnnotationResolver {
379
392
}
380
393
}
381
394
}
395
+
396
+ void _visitArguments (AnnotationImpl node,
397
+ List <Map <DartType , NonPromotionReason > Function ()> whyNotPromotedInfo) {
398
+ var arguments = node.arguments;
399
+ if (arguments != null ) {
400
+ _resolver.visitArgumentList (arguments,
401
+ whyNotPromotedInfo: whyNotPromotedInfo);
402
+ }
403
+ }
382
404
}
0 commit comments