Skip to content

Commit 810eeb4

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Elements. Migrate lib/src/dart/ast/element_locator.dart
Change-Id: I7b57a239cd21737292224d05b38b86a0dbd4643c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403642 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 9452875 commit 810eeb4

File tree

7 files changed

+58
-863
lines changed

7 files changed

+58
-863
lines changed

pkg/analysis_server/lib/src/analysis_server.dart

+13-1
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,19 @@ abstract class AnalysisServer {
698698
if (node is StringLiteral && node.parent is UriBasedDirective) {
699699
return null;
700700
}
701-
var element = ElementLocator.locate(node);
701+
702+
Element? element;
703+
switch (node) {
704+
case ExportDirective():
705+
element = node.element;
706+
case ImportDirective():
707+
element = node.element;
708+
case PartOfDirective():
709+
element = node.element;
710+
default:
711+
element = ElementLocator.locate2(node).asElement;
712+
}
713+
702714
if (node is SimpleIdentifier && element is PrefixElement) {
703715
element = getImportElement(node);
704716
}

pkg/analysis_server/test/services/refactoring/legacy/abstract_rename.dart

+18-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:analyzer/dart/ast/ast.dart';
88
import 'package:analyzer/dart/element/element.dart';
99
import 'package:analyzer/dart/element/element2.dart';
1010
import 'package:analyzer/src/dart/ast/element_locator.dart';
11+
import 'package:analyzer/src/utilities/extensions/element.dart';
1112
import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
1213
import 'package:test/test.dart';
1314

@@ -41,11 +42,24 @@ class RenameRefactoringTest extends RefactoringTest {
4142
/// Creates a new [RenameRefactoring] in [refactoring] for the [Element] of
4243
/// the [SimpleIdentifier] at the given [search] pattern.
4344
void createRenameRefactoringAtString(String search) {
44-
var identifier = findNode.any(search);
45-
var element = ElementLocator.locate(identifier);
46-
if (identifier is SimpleIdentifier && element is PrefixElement) {
47-
element = getImportElement(identifier);
45+
var node = findNode.any(search);
46+
47+
Element? element;
48+
switch (node) {
49+
case ExportDirective():
50+
element = node.element;
51+
case ImportDirective():
52+
element = node.element;
53+
case PartOfDirective():
54+
element = node.element;
55+
default:
56+
element = ElementLocator.locate2(node).asElement;
57+
}
58+
59+
if (node is SimpleIdentifier && element is PrefixElement) {
60+
element = getImportElement(node);
4861
}
62+
4963
createRenameRefactoringForElement(element);
5064
}
5165

pkg/analyzer/analyzer_use_new_elements.txt

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ lib/src/dart/analysis/search.dart
1818
lib/src/dart/analysis/session.dart
1919
lib/src/dart/analysis/session_helper.dart
2020
lib/src/dart/ast/ast.dart
21-
lib/src/dart/ast/element_locator.dart
2221
lib/src/dart/ast/extensions.dart
2322
lib/src/dart/ast/utilities.dart
2423
lib/src/dart/constant/constant_verifier.dart

pkg/analyzer/lib/src/dart/ast/element_locator.dart

+1-282
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,11 @@
44

55
import 'package:analyzer/dart/ast/ast.dart';
66
import 'package:analyzer/dart/ast/visitor.dart';
7-
import 'package:analyzer/dart/element/element.dart';
87
import 'package:analyzer/dart/element/element2.dart';
98
import '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].
1211
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-
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.
30423
class _ElementMapper2 extends GeneralizingAstVisitor<Element2> {
30524
@override

pkg/analyzer/lib/src/dart/micro/utils.dart

+14-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,19 @@ Element? getElementOfNode(AstNode? node) {
2424
if (node is StringLiteral && node.parent is UriBasedDirective) {
2525
return null;
2626
}
27-
var element = ElementLocator.locate(node);
27+
28+
Element? element;
29+
switch (node) {
30+
case ExportDirective():
31+
element = node.element;
32+
case ImportDirective():
33+
element = node.element;
34+
case PartOfDirective():
35+
element = node.element;
36+
default:
37+
element = ElementLocator.locate2(node).asElement;
38+
}
39+
2840
if (node is SimpleIdentifier && element is PrefixElement) {
2941
var parent = node.parent;
3042
if (parent is ImportDirective) {
@@ -33,6 +45,7 @@ Element? getElementOfNode(AstNode? node) {
3345
element = _getImportElementInfo(node);
3446
}
3547
}
48+
3649
return element;
3750
}
3851

0 commit comments

Comments
 (0)