@@ -12,46 +12,6 @@ import 'package:analyzer/src/dart/ast/element_locator.dart';
1212import 'package:analyzer/src/dart/element/element.dart' ;
1313import 'package:analyzer/src/utilities/extensions/element.dart' ;
1414
15- /// Return the [Element] of the given [node] , or `null` if [node] is `null` or
16- /// does not have an element.
17- Element ? getElementOfNode (AstNode ? node) {
18- if (node == null ) {
19- return null ;
20- }
21- if (node is SimpleIdentifier && node.parent is LibraryIdentifier ) {
22- node = node.parent;
23- }
24- if (node is LibraryIdentifier ) {
25- node = node.parent;
26- }
27- if (node is StringLiteral && node.parent is UriBasedDirective ) {
28- return null ;
29- }
30-
31- ElementImpl ? element;
32- switch (node) {
33- case ExportDirectiveImpl ():
34- element = node.libraryExport;
35- case ImportDirectiveImpl ():
36- element = node.libraryImport;
37- case PartOfDirectiveImpl ():
38- element = node.element;
39- default :
40- element = ElementLocator .locate2 (node).asElement as ElementImpl ;
41- }
42-
43- if (node is SimpleIdentifier && element is PrefixElement ) {
44- var parent = node.parent;
45- if (parent is ImportDirectiveImpl ) {
46- element = parent.libraryImport;
47- } else {
48- element = _getImportElementInfo (node) as LibraryImportElementImpl ;
49- }
50- }
51-
52- return element;
53- }
54-
5515/// Return the [Element] of the given [node] , or `null` if [node] is `null` or
5616/// does not have an element.
5717Element2 ? getElementOfNode2 (AstNode ? node) {
@@ -118,110 +78,6 @@ ConstructorElement? _getActualConstructorElement(
11878 return constructor;
11979}
12080
121- /// Returns the [LibraryImportElement] that declared [prefix] and imports [element] .
122- ///
123- /// [libraryFragment] - the [CompilationUnitElementImpl] where reference is.
124- /// [prefix] - the import prefix, maybe `null` .
125- /// [element] - the referenced element.
126- /// [importElementsMap] - the cache of [Element] s imported by [LibraryImportElement] s.
127- LibraryImportElement ? _getImportElement (
128- CompilationUnitElementImpl libraryFragment,
129- String prefix,
130- Element element,
131- Map <LibraryImportElement , Set <Element >> importElementsMap) {
132- if (element.enclosingElement3 is ! CompilationUnitElement ) {
133- return null ;
134- }
135- var usedLibrary = element.library;
136- // find ImportElement that imports used library with used prefix
137- List <LibraryImportElement >? candidates;
138- var libraryImports = libraryFragment.withEnclosing
139- .expand ((fragment) => fragment.libraryImports)
140- .toList ();
141- for (var importElement in libraryImports) {
142- // required library
143- if (importElement.importedLibrary != usedLibrary) {
144- continue ;
145- }
146- // required prefix
147- var prefixElement = importElement.prefix? .element;
148- if (prefixElement == null ) {
149- continue ;
150- }
151- if (prefix != prefixElement.name) {
152- continue ;
153- }
154- // no combinators => only possible candidate
155- if (importElement.combinators.isEmpty) {
156- return importElement;
157- }
158- // OK, we have candidate
159- candidates ?? = [];
160- candidates.add (importElement);
161- }
162- // no candidates, probably element is defined in this library
163- if (candidates == null ) {
164- return null ;
165- }
166- // one candidate
167- if (candidates.length == 1 ) {
168- return candidates[0 ];
169- }
170- // ensure that each ImportElement has set of elements
171- for (var importElement in candidates) {
172- if (importElementsMap.containsKey (importElement)) {
173- continue ;
174- }
175- var namespace = importElement.namespace;
176- var elements = Set <Element >.from (namespace.definedNames.values);
177- importElementsMap[importElement] = elements;
178- }
179- // use import namespace to choose correct one
180- for (var entry in importElementsMap.entries) {
181- var importElement = entry.key;
182- var elements = entry.value;
183- if (elements.contains (element)) {
184- return importElement;
185- }
186- }
187- // not found
188- return null ;
189- }
190-
191- /// Returns the [LibraryImportElement] that is referenced by [prefixNode] with a
192- /// [PrefixElement] , maybe `null` .
193- LibraryImportElement ? _getImportElementInfo (SimpleIdentifier prefixNode) {
194- // prepare environment
195- var parent = prefixNode.parent;
196- var unit = prefixNode.thisOrAncestorOfType <CompilationUnitImpl >();
197- var libraryFragment = unit? .declaredFragment;
198- if (libraryFragment == null ) {
199- return null ;
200- }
201- // prepare used element
202- Element ? usedElement;
203- if (parent is PrefixedIdentifier ) {
204- var prefixed = parent;
205- if (prefixed.prefix == prefixNode) {
206- usedElement = prefixed.element? .asElement;
207- }
208- } else if (parent is MethodInvocation ) {
209- var invocation = parent;
210- if (invocation.target == prefixNode) {
211- usedElement = invocation.methodName.element? .asElement;
212- }
213- }
214- // we need used Element
215- if (usedElement == null ) {
216- return null ;
217- }
218- // find ImportElement
219- var prefix = prefixNode.name;
220- var importElementsMap = < LibraryImportElement , Set <Element >> {};
221- return _getImportElement (
222- libraryFragment, prefix, usedElement, importElementsMap);
223- }
224-
22581/// Returns the [LibraryImportElement] that is referenced by [prefixNode] with a
22682/// [PrefixElement] , maybe `null` .
22783MockLibraryImportElement ? _getImportElementInfo2 (SimpleIdentifier prefixNode) {
@@ -341,8 +197,7 @@ MockLibraryImportElement? _getMockImportElement(
341197 continue ;
342198 }
343199 var namespace = importElement.namespace;
344- var elements = Set <Element2 >.from (
345- namespace.definedNames.values.map ((e) => e.asElement2));
200+ var elements = namespace.definedNames2.values.toSet ();
346201 importElementsMap[importElement] = elements;
347202 }
348203 // use import namespace to choose correct one
0 commit comments