4
4
5
5
import 'package:analyzer/dart/ast/ast.dart' ;
6
6
import 'package:analyzer/dart/ast/visitor.dart' ;
7
- import 'package:analyzer/dart/element/element.dart' ;
8
7
import 'package:analyzer/dart/element/element2.dart' ;
9
8
import 'package:analyzer/src/dart/ast/extensions.dart' ;
10
9
11
- /// An object used to locate the [Element ] associated with a given [AstNode] .
10
+ /// An object used to locate the [Element2 ] associated with a given [AstNode] .
12
11
class ElementLocator {
13
- /// Return the element associated with the given [node] , or `null` if there
14
- /// is no element associated with the node.
15
- static Element ? locate (AstNode ? node) {
16
- if (node == null ) return null ;
17
-
18
- var mapper = _ElementMapper ();
19
- return node.accept (mapper);
20
- }
21
-
22
12
/// Return the element associated with the given [node] , or `null` if there
23
13
/// is no element associated with the node.
24
14
static Element2 ? locate2 (AstNode ? node) {
@@ -29,277 +19,6 @@ class ElementLocator {
29
19
}
30
20
}
31
21
32
- /// Visitor that maps nodes to elements.
33
- class _ElementMapper extends GeneralizingAstVisitor <Element > {
34
- @override
35
- Element ? visitAnnotation (Annotation node) {
36
- return node.element;
37
- }
38
-
39
- @override
40
- Element ? visitAssignedVariablePattern (AssignedVariablePattern node) {
41
- return node.element;
42
- }
43
-
44
- @override
45
- Element ? visitAssignmentExpression (AssignmentExpression node) {
46
- return node.staticElement;
47
- }
48
-
49
- @override
50
- Element ? visitBinaryExpression (BinaryExpression node) {
51
- return node.staticElement;
52
- }
53
-
54
- @override
55
- Element ? visitClassDeclaration (ClassDeclaration node) {
56
- return node.declaredElement;
57
- }
58
-
59
- @override
60
- Element ? visitClassTypeAlias (ClassTypeAlias node) {
61
- return node.declaredElement;
62
- }
63
-
64
- @override
65
- Element ? visitCompilationUnit (CompilationUnit node) {
66
- return node.declaredElement;
67
- }
68
-
69
- @override
70
- Element ? visitConstructorDeclaration (ConstructorDeclaration node) {
71
- return node.declaredElement;
72
- }
73
-
74
- @override
75
- Element ? visitConstructorSelector (ConstructorSelector node) {
76
- var parent = node.parent;
77
- if (parent is EnumConstantArguments ) {
78
- var parent2 = parent.parent;
79
- if (parent2 is EnumConstantDeclaration ) {
80
- return parent2.constructorElement;
81
- }
82
- }
83
- return null ;
84
- }
85
-
86
- @override
87
- Element ? visitDeclaredIdentifier (DeclaredIdentifier node) {
88
- return node.declaredElement;
89
- }
90
-
91
- @override
92
- Element ? visitDeclaredVariablePattern (DeclaredVariablePattern node) {
93
- return node.declaredElement;
94
- }
95
-
96
- @override
97
- Element ? visitEnumConstantDeclaration (EnumConstantDeclaration node) {
98
- return node.declaredElement;
99
- }
100
-
101
- @override
102
- Element ? visitEnumDeclaration (EnumDeclaration node) {
103
- return node.declaredElement;
104
- }
105
-
106
- @override
107
- Element ? visitExportDirective (ExportDirective node) {
108
- return node.element;
109
- }
110
-
111
- @override
112
- Element ? visitExtensionDeclaration (ExtensionDeclaration node) {
113
- return node.declaredElement;
114
- }
115
-
116
- @override
117
- Element ? visitExtensionOverride (ExtensionOverride node) {
118
- return node.element;
119
- }
120
-
121
- @override
122
- Element ? visitExtensionTypeDeclaration (ExtensionTypeDeclaration node) {
123
- return node.declaredElement;
124
- }
125
-
126
- @override
127
- Element ? visitFormalParameter (FormalParameter node) {
128
- return node.declaredElement;
129
- }
130
-
131
- @override
132
- Element ? visitFunctionDeclaration (FunctionDeclaration node) {
133
- return node.declaredElement;
134
- }
135
-
136
- @override
137
- Element ? visitFunctionTypeAlias (FunctionTypeAlias node) {
138
- return node.declaredElement;
139
- }
140
-
141
- @override
142
- Element ? visitGenericTypeAlias (GenericTypeAlias node) {
143
- return node.declaredElement;
144
- }
145
-
146
- @override
147
- Element ? visitIdentifier (Identifier node) {
148
- var parent = node.parent;
149
- if (parent is Annotation ) {
150
- // Type name in Annotation
151
- if (identical (parent.name, node) && parent.constructorName == null ) {
152
- return parent.element;
153
- }
154
- } else if (parent is ConstructorDeclaration ) {
155
- // Extra work to map Constructor Declarations to their associated
156
- // Constructor Elements
157
- var returnType = parent.returnType;
158
- if (identical (returnType, node)) {
159
- var name = parent.name;
160
- if (name != null ) {
161
- return parent.declaredElement;
162
- }
163
- var element = node.staticElement;
164
- if (element is InterfaceElement ) {
165
- return element.unnamedConstructor;
166
- }
167
- } else if (parent.name == node.endToken) {
168
- return parent.declaredElement;
169
- }
170
- } else if (parent is LibraryIdentifier ) {
171
- var grandParent = parent.parent;
172
- if (grandParent is PartOfDirective ) {
173
- var element = grandParent.element;
174
- if (element is LibraryElement ) {
175
- return element.definingCompilationUnit;
176
- }
177
- } else if (grandParent is LibraryDirective ) {
178
- return grandParent.element;
179
- }
180
- }
181
- return node.writeOrReadElement;
182
- }
183
-
184
- @override
185
- Element ? visitImportDirective (ImportDirective node) {
186
- return node.element;
187
- }
188
-
189
- @override
190
- Element ? visitImportPrefixReference (ImportPrefixReference node) {
191
- return node.element;
192
- }
193
-
194
- @override
195
- Element ? visitIndexExpression (IndexExpression node) {
196
- return node.staticElement;
197
- }
198
-
199
- @override
200
- Element ? visitInstanceCreationExpression (InstanceCreationExpression node) {
201
- return node.constructorName.staticElement;
202
- }
203
-
204
- @override
205
- Element ? visitLibraryDirective (LibraryDirective node) {
206
- return node.element;
207
- }
208
-
209
- @override
210
- Element ? visitMethodDeclaration (MethodDeclaration node) {
211
- return node.declaredElement;
212
- }
213
-
214
- @override
215
- Element ? visitMethodInvocation (MethodInvocation node) {
216
- return node.methodName.staticElement;
217
- }
218
-
219
- @override
220
- Element ? visitMixinDeclaration (MixinDeclaration node) {
221
- return node.declaredElement;
222
- }
223
-
224
- @override
225
- Element ? visitNamedType (NamedType node) {
226
- return node.element;
227
- }
228
-
229
- @override
230
- Element ? visitPartOfDirective (PartOfDirective node) {
231
- return node.element;
232
- }
233
-
234
- @override
235
- Element ? visitPatternField (PatternField node) {
236
- return node.element;
237
- }
238
-
239
- @override
240
- Element ? visitPatternFieldName (PatternFieldName node) {
241
- var parent = node.parent;
242
- if (parent is PatternField ) {
243
- return parent.element;
244
- } else {
245
- return null ;
246
- }
247
- }
248
-
249
- @override
250
- Element ? visitPostfixExpression (PostfixExpression node) {
251
- return node.staticElement;
252
- }
253
-
254
- @override
255
- Element ? visitPrefixedIdentifier (PrefixedIdentifier node) {
256
- return node.staticElement;
257
- }
258
-
259
- @override
260
- Element ? visitPrefixExpression (PrefixExpression node) {
261
- return node.staticElement;
262
- }
263
-
264
- @override
265
- Element ? visitRepresentationConstructorName (
266
- RepresentationConstructorName node) {
267
- var representation = node.parent as RepresentationDeclaration ;
268
- return representation.constructorElement;
269
- }
270
-
271
- @override
272
- Element ? visitRepresentationDeclaration (RepresentationDeclaration node) {
273
- return node.fieldElement;
274
- }
275
-
276
- @override
277
- Element ? visitStringLiteral (StringLiteral node) {
278
- var parent = node.parent;
279
- if (parent is ExportDirective ) {
280
- return parent.element? .exportedLibrary;
281
- } else if (parent is ImportDirective ) {
282
- return parent.element? .importedLibrary;
283
- } else if (parent is PartDirective ) {
284
- var elementUri = parent.element? .uri;
285
- if (elementUri is DirectiveUriWithUnit ) {
286
- return elementUri.unit;
287
- }
288
- }
289
- return null ;
290
- }
291
-
292
- @override
293
- Element ? visitTypeParameter (TypeParameter node) {
294
- return node.declaredElement;
295
- }
296
-
297
- @override
298
- Element ? visitVariableDeclaration (VariableDeclaration node) {
299
- return node.declaredElement;
300
- }
301
- }
302
-
303
22
/// Visitor that maps nodes to elements.
304
23
class _ElementMapper2 extends GeneralizingAstVisitor <Element2 > {
305
24
@override
0 commit comments