44
55import 'package:analyzer/dart/ast/ast.dart' ;
66import 'package:analyzer/dart/ast/visitor.dart' ;
7- import 'package:analyzer/dart/element/element.dart' ;
87import 'package:analyzer/dart/element/element2.dart' ;
98import 'package:analyzer/src/dart/ast/extensions.dart' ;
109
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] .
1211class 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-
2212 /// Return the element associated with the given [node] , or `null` if there
2313 /// is no element associated with the node.
2414 static Element2 ? locate2 (AstNode ? node) {
@@ -29,277 +19,6 @@ class ElementLocator {
2919 }
3020}
3121
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-
30322/// Visitor that maps nodes to elements.
30423class _ElementMapper2 extends GeneralizingAstVisitor <Element2 > {
30524 @override
0 commit comments