Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Side by Side Diff: pkg/analyzer/lib/src/dart/ast/resolution_map.dart

Issue 2551023005: Prepare for decoupling analyzer ASTs from element model. (Closed)
Patch Set: Address review comments Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'package:analyzer/dart/ast/ast.dart';
6 import 'package:analyzer/dart/ast/resolution_map.dart';
7 import 'package:analyzer/dart/element/element.dart';
8 import 'package:analyzer/dart/element/type.dart';
9
10 /**
11 * Concrete implementation of [ResolutionMap] based on the standard AST
12 * implementation.
13 */
14 class ResolutionMapImpl implements ResolutionMap {
15 /**
16 * Return the best element available for the function being invoked at [node].
17 * If resolution was able to find a better element based on type propagation,
18 * that element will be returned. Otherwise, the element found using the
19 * result of static analysis will be returned. If resolution has not been
20 * performed, then `null` will be returned.
21 */
Brian Wilkerson 2016/12/07 18:26:20 nit: Given that the comments are all on the overri
Paul Berry 2016/12/07 18:55:02 Done.
22 @override
23 ExecutableElement bestElementForFunctionExpressionInvocation(
24 FunctionExpressionInvocation node) =>
25 node.bestElement;
26
27 /**
28 * Return the best element available for the identifier [node]. If resolution
29 * was able to find a better element based on type propagation, that element
30 * will be returned. Otherwise, the element found using the result of static
31 * analysis will be returned. If resolution has not been performed, then
32 * `null` will be returned.
33 */
34 @override
35 Element bestElementForIdentifier(Identifier node) => node.bestElement;
36
37 /**
38 * Return the best element available for the expression [node]. If resolution
39 * was able to find a better element based on type propagation, that element
40 * will be returned. Otherwise, the element found using the result of static
41 * analysis will be returned. If resolution has not been performed, then
42 * `null` will be returned.
43 */
44 @override
45 MethodElement bestElementForMethodReference(MethodReferenceExpression node) =>
46 node.bestElement;
47
48 /**
49 * Return the best parameter element information available for the expression
50 * [node]. If type propagation was able to find a better parameter element
51 * than static analysis, that type will be returned. Otherwise, the result of
52 * static analysis will be returned.
53 */
54 @override
55 ParameterElement bestParameterElementForExpression(Expression node) =>
56 node.bestParameterElement;
57
58 /**
59 * Return the best type information available for the expression [node]. If
60 * type propagation was able to find a better type than static analysis, that
61 * type will be returned. Otherwise, the result of static analysis will be
62 * returned. If no type analysis has been performed, then the type 'dynamic'
63 * will be returned.
64 */
65 @override
66 DartType bestTypeForExpression(Expression node) => node.bestType;
67
68 /**
69 * Return the element annotation representing the annotation [node] in the
70 * element model.
71 */
72 @override
73 ElementAnnotation elementAnnotationForAnnotation(Annotation node) =>
74 node.elementAnnotation;
75
76 /**
77 * Return the element associated with the declaration [node], or `null` if
78 * either this node corresponds to a list of declarations or if the AST
79 * structure has not been resolved.
80 */
81 @override
82 ClassElement elementDeclaredByClassDeclaration(ClassDeclaration node) =>
83 node.element;
84
85 /**
86 * Return the element associated with the declaration [node], or `null` if
87 * either this node corresponds to a list of declarations or if the AST
88 * structure has not been resolved.
89 */
90 @override
91 ConstructorElement elementDeclaredByConstructorDeclaration(
92 ConstructorDeclaration node) =>
93 node.element;
94
95 /**
96 * Return the element associated with the declaration [node], or `null` if
97 * either this node corresponds to a list of declarations or if the AST
98 * structure has not been resolved.
99 */
100 @override
101 Element elementDeclaredByDeclaration(Declaration node) => node.element;
102
103 /**
104 * Return the element associated with the declaration [node], or `null` if
105 * either this node corresponds to a list of declarations or if the AST
106 * structure has not been resolved.
107 */
108 @override
109 LocalVariableElement elementDeclaredByDeclaredIdentifier(
110 DeclaredIdentifier node) =>
111 node.element;
112
113 /**
114 * Return the element associated with the directive [node], or `null` if the
115 * AST structure has not been resolved or if this directive could not be
116 * resolved.
117 */
118 @override
119 Element elementDeclaredByDirective(Directive node) => node.element;
120
121 /**
122 * Return the element associated with the declaration [node], or `null` if
123 * either this node corresponds to a list of declarations or if the AST
124 * structure has not been resolved.
125 */
126 @override
127 ClassElement elementDeclaredByEnumDeclaration(EnumDeclaration node) =>
128 node.element;
129
130 /**
131 * Return the element representing the parameter [node], or `null` if this
132 * parameter has not been resolved.
133 */
134 @override
135 ParameterElement elementDeclaredByFormalParameter(FormalParameter node) =>
136 node.element;
137
138 /**
139 * Return the element associated with the declaration [node], or `null` if
140 * either this node corresponds to a list of declarations or if the AST
141 * structure has not been resolved.
142 */
143 @override
144 ExecutableElement elementDeclaredByFunctionDeclaration(
145 FunctionDeclaration node) =>
146 node.element;
147
148 /**
149 * Return the element associated with the function expression [node], or
150 * `null` if the AST structure has not been resolved.
151 */
152 @override
153 ExecutableElement elementDeclaredByFunctionExpression(
154 FunctionExpression node) =>
155 node.element;
156
157 /**
158 * Return the element associated with the declaration [node], or `null` if
159 * either this node corresponds to a list of declarations or if the AST
160 * structure has not been resolved.
161 */
162 @override
163 ExecutableElement elementDeclaredByMethodDeclaration(
164 MethodDeclaration node) =>
165 node.element;
166
167 /**
168 * Return the element associated with the declaration [node], or `null` if
169 * either this node corresponds to a list of declarations or if the AST
170 * structure has not been resolved.
171 */
172 @override
173 VariableElement elementDeclaredByVariableDeclaration(
174 VariableDeclaration node) =>
175 node.element;
176
177 /**
178 * Return the element associated with the annotation [node], or `null` if the
179 * AST structure has not been resolved or if this annotation could not be
180 * resolved.
181 */
182 @override
183 Element elementForAnnotation(Annotation node) => node.element;
184
185 /**
186 * Return the element associated with the compilation unit [node], or `null`
187 * if the AST structure has not been resolved.
188 */
189 @override
190 CompilationUnitElement elementForCompilationUnit(CompilationUnit node) =>
191 node.element;
192
193 /**
194 * Return the element representing the parameter being named by the
195 * expression [node], or `null` if the AST structure has not been resolved or
196 * if there is no parameter with the same name as this expression.
197 */
198 @override
199 ParameterElement elementForNamedExpression(NamedExpression node) =>
200 node.element;
201
202 /**
203 * Return a list containing the elements representing the parameters in the
204 * list [node]. The list will contain `null`s if the parameters in this list
205 * have not been resolved.
206 */
207 @override
208 List<ParameterElement> parameterElementsForFormalParameterList(
209 FormalParameterList node) =>
210 node.parameterElements;
211
212 /**
213 * Return the element associated with the function being invoked at [node]
214 * based on propagated type information, or `null` if the AST structure has
215 * not been resolved or the function could not be resolved.
216 */
217 @override
218 ExecutableElement propagatedElementForFunctionExpressionInvocation(
219 FunctionExpressionInvocation node) =>
220 node.propagatedElement;
221
222 /**
223 * Return the element associated with the identifier [node] based on
224 * propagated type information, or `null` if the AST structure has not been
225 * resolved or if this identifier could not be resolved. One example of the
226 * latter case is an identifier that is not defined within the scope in which
227 * it appears.
228 */
229 @override
230 Element propagatedElementForIdentifier(Identifier node) =>
231 node.propagatedElement;
232
233 /**
234 * Return the element associated with the expression [node] based on
235 * propagated types, or `null` if the AST structure has not been resolved, or
236 * there is no meaningful propagated element to return (e.g. because this is a
237 * non-compound assignment expression, or because the method referred to could
238 * not be resolved).
239 */
240 @override
241 MethodElement propagatedElementForMethodReference(
242 MethodReferenceExpression node) =>
243 node.propagatedElement;
244
245 /**
246 * If the expression [node] is an argument to an invocation, and the AST
247 * structure has been resolved, and the function being invoked is known based
248 * on propagated type information, and [node] corresponds to one of the
249 * parameters of the function being invoked, then return the parameter element
250 * representing the parameter to which the value of [node] will be
251 * bound. Otherwise, return `null`.
252 */
253 @override
254 ParameterElement propagatedParameterElementForExpression(Expression node) =>
255 node.propagatedParameterElement;
256
257 /**
258 * Return the propagated type of the expression [node], or `null` if type
259 * propagation has not been performed on the AST structure.
260 */
261 @override
262 DartType propagatedTypeForExpression(Expression node) => node.propagatedType;
263
264 /**
265 * Return the element associated with the constructor referenced by [node]
266 * based on static type information, or `null` if the AST structure has not
267 * been resolved or if the constructor could not be resolved.
268 */
269 @override
270 ConstructorElement staticElementForConstructorReference(
271 ConstructorReferenceNode node) =>
272 node.staticElement;
273
274 /**
275 * Return the element associated with the function being invoked at [node]
276 * based on static type information, or `null` if the AST structure has not
277 * been resolved or the function could not be resolved.
278 */
279 @override
280 ExecutableElement staticElementForFunctionExpressionInvocation(
281 FunctionExpressionInvocation node) =>
282 node.staticElement;
283
284 /**
285 * Return the element associated with the identifier [node] based on static
286 * type information, or `null` if the AST structure has not been resolved or
287 * if this identifier could not be resolved. One example of the latter case is
288 * an identifier that is not defined within the scope in which it appears
289 */
290 @override
291 Element staticElementForIdentifier(Identifier node) => node.staticElement;
292
293 /**
294 * Return the element associated with the expression [node] based on the
295 * static types, or `null` if the AST structure has not been resolved, or
296 * there is no meaningful static element to return (e.g. because this is a
297 * non-compound assignment expression, or because the method referred to could
298 * not be resolved).
299 */
300 @override
301 MethodElement staticElementForMethodReference(
302 MethodReferenceExpression node) =>
303 node.staticElement;
304
305 /**
306 * Return the function type of the invocation [node] based on the static type
307 * information, or `null` if the AST structure has not been resolved, or if
308 * the invoke could not be resolved.
309 *
310 * This will usually be a [FunctionType], but it can also be an
311 * [InterfaceType] with a `call` method, `dynamic`, `Function`, or a `@proxy`
312 * interface type that implements `Function`.
313 */
314 @override
315 DartType staticInvokeTypeForInvocationExpression(InvocationExpression node) =>
316 node.staticInvokeType;
317
318 /**
319 * If the expression [node] is an argument to an invocation, and the AST
320 * structure has been resolved, and the function being invoked is known based
321 * on static type information, and [node] corresponds to one of the parameters
322 * of the function being invoked, then return the parameter element
323 * representing the parameter to which the value of [node] will be
324 * bound. Otherwise, return `null`.
325 */
326 @override
327 ParameterElement staticParameterElementForExpression(Expression node) =>
328 node.staticParameterElement;
329
330 /**
331 * Return the static type of the expression [node], or `null` if the AST
332 * structure has not been resolved.
333 */
334 @override
335 DartType staticTypeForExpression(Expression node) => node.staticType;
336
337 /**
338 * Return the type being named by [node], or `null` if the AST structure has
339 * not been resolved.
340 */
341 @override
342 DartType typeForTypeName(TypeName node) => node.type;
343
344 /**
345 * Return the element associated with the uri of the directive [node], or
346 * `null` if the AST structure has not been resolved or if the URI could not
347 * be resolved. Examples of the latter case include a directive that contains
348 * an invalid URL or a URL that does not exist.
349 */
350 @override
351 Element uriElementForDirective(UriBasedDirective node) => node.uriElement;
352 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698