22// for details. All rights reserved. Use of this source code is governed by a
33// BSD-style license that can be found in the LICENSE file.
44
5- // ignore_for_file: analyzer_use_new_elements
6-
75import 'package:analyzer/dart/ast/ast.dart' ;
8- import 'package:analyzer/dart/element/element.dart' ;
96import 'package:analyzer/dart/element/element2.dart' ;
107import 'package:analyzer/src/dart/resolver/scope.dart' ;
118
@@ -18,17 +15,6 @@ Element2? getExportedElement(LibraryElement2? library, String name) {
1815 return namespace.definedNames2[name];
1916}
2017
21- /// Return the [LibraryImportElement] that is referenced by [prefixNode] , or
22- /// `null` if the node does not reference a prefix or if we cannot determine
23- /// which import is being referenced.
24- LibraryImportElement ? getImportElement (SimpleIdentifier prefixNode) {
25- var parent = prefixNode.parent;
26- if (parent is ImportDirective ) {
27- return parent.element;
28- }
29- return _getImportElementInfo (prefixNode);
30- }
31-
3218/// Return the [LibraryImport] that is referenced by [prefixNode] , or
3319/// `null` if the node does not reference a prefix or if we cannot determine
3420/// which import is being referenced.
@@ -40,78 +26,9 @@ LibraryImport? getImportElement2(SimpleIdentifier prefixNode) {
4026 return _getImportElementInfo2 (prefixNode);
4127}
4228
43- /// Return the [LibraryImportElement] that declared [prefix] and imports [element] .
44- ///
45- /// [libraryElement] - the [LibraryElement] where reference is.
46- /// [prefix] - the import prefix, maybe `null` .
47- /// [element] - the referenced element.
48- LibraryImportElement ? _getImportElement (
49- LibraryElement libraryElement,
50- String prefix,
51- Element element,
52- ) {
53- if (element.enclosingElement3 is ! CompilationUnitElement ) {
54- return null ;
55- }
56- var usedLibrary = element.library;
57- // find ImportElement that imports used library with used prefix
58- List <LibraryImportElement >? candidates;
59- for (var importElement
60- in libraryElement.definingCompilationUnit.libraryImports) {
61- // required library
62- if (importElement.importedLibrary != usedLibrary) {
63- continue ;
64- }
65- // required prefix
66- var prefixElement = importElement.prefix? .element;
67- if (prefixElement == null ) {
68- continue ;
69- }
70- if (prefix != prefixElement.name) {
71- continue ;
72- }
73- // no combinators => only possible candidate
74- if (importElement.combinators.isEmpty) {
75- return importElement;
76- }
77- // OK, we have candidate
78- candidates ?? = [];
79- candidates.add (importElement);
80- }
81- // no candidates, probably element is defined in this library
82- if (candidates == null ) {
83- return null ;
84- }
85- // one candidate
86- if (candidates.length == 1 ) {
87- return candidates[0 ];
88- }
89-
90- var importElementsMap = < LibraryImportElement , Set <Element >> {};
91- // ensure that each ImportElement has set of elements
92- for (var importElement in candidates) {
93- if (importElementsMap.containsKey (importElement)) {
94- continue ;
95- }
96- var namespace = importElement.namespace;
97- var elements = Set <Element >.from (namespace.definedNames.values);
98- importElementsMap[importElement] = elements;
99- }
100- // use import namespace to choose correct one
101- for (var entry in importElementsMap.entries) {
102- var importElement = entry.key;
103- var elements = entry.value;
104- if (elements.contains (element)) {
105- return importElement;
106- }
107- }
108- // not found
109- return null ;
110- }
111-
112- /// Return the [LibraryImportElement] that declared [prefix] and imports [element] .
29+ /// Return the [LibraryImport] that declared [prefix] and imports [element] .
11330///
114- /// [libraryElement] - the [LibraryElement ] where reference is.
31+ /// [libraryElement] - the [LibraryElement2 ] where reference is.
11532/// [prefix] - the import prefix, maybe `null` .
11633/// [element] - the referenced element.
11734LibraryImport ? _getImportElement2 (
@@ -177,40 +94,8 @@ LibraryImport? _getImportElement2(
17794 return null ;
17895}
17996
180- /// Returns the [LibraryImportElement] that is referenced by [prefixNode] with a
181- /// [PrefixElement] , maybe `null` .
182- LibraryImportElement ? _getImportElementInfo (SimpleIdentifier prefixNode) {
183- // prepare environment
184- var parent = prefixNode.parent;
185- var unit = prefixNode.thisOrAncestorOfType <CompilationUnit >();
186- var libraryElement = unit? .declaredElement? .library;
187- if (libraryElement == null ) {
188- return null ;
189- }
190- // prepare used element
191- Element ? usedElement;
192- if (parent is PrefixedIdentifier ) {
193- var prefixed = parent;
194- if (prefixed.prefix == prefixNode) {
195- usedElement = prefixed.staticElement;
196- }
197- } else if (parent is MethodInvocation ) {
198- var invocation = parent;
199- if (invocation.target == prefixNode) {
200- usedElement = invocation.methodName.staticElement;
201- }
202- }
203- // we need used Element
204- if (usedElement == null ) {
205- return null ;
206- }
207- // find ImportElement
208- var prefix = prefixNode.name;
209- return _getImportElement (libraryElement, prefix, usedElement);
210- }
211-
21297/// Returns the [LibraryImport] that is referenced by [prefixNode] with a
213- /// [PrefixElement ] , maybe `null` .
98+ /// [PrefixElement2 ] , maybe `null` .
21499LibraryImport ? _getImportElementInfo2 (SimpleIdentifier prefixNode) {
215100 // prepare environment
216101 var parent = prefixNode.parent;
0 commit comments