Skip to content

Commit 1c1e94d

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Deprecates in src/dart/resolver/scope.dart
Change-Id: I4cdaeb0c4a7b03d9b35606c26ebdd4bd4e68871a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/415320 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent fa83624 commit 1c1e94d

File tree

11 files changed

+77
-211
lines changed

11 files changed

+77
-211
lines changed

pkg/analyzer/api.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4182,6 +4182,7 @@ package:analyzer/dart/element/element2.dart:
41824182
previousFragment (getter: SuperFormalParameterFragment?)
41834183
TopLevelFunctionElement (class extends Object implements ExecutableElement2, HasSinceSdkVersion):
41844184
LOAD_LIBRARY_NAME (static getter: String)
4185+
MAIN_FUNCTION_NAME (static getter: String)
41854186
new (constructor: TopLevelFunctionElement Function())
41864187
baseElement (getter: TopLevelFunctionElement)
41874188
firstFragment (getter: TopLevelFunctionFragment)
@@ -5239,11 +5240,11 @@ package:analyzer/src/dart/resolver/scope.dart:
52395240
EMPTY (static getter: Namespace)
52405241
EMPTY= (static setter: Namespace)
52415242
new (constructor: Namespace Function(Map<String, Element2>))
5242-
definedNames (getter: Map<String, Element>)
5243+
definedNames (getter: Map<String, Element>, deprecated)
52435244
definedNames2 (getter: Map<String, Element2>)
5244-
get (method: Element? Function(String))
5245+
get (method: Element? Function(String), deprecated)
52455246
get2 (method: Element2? Function(String))
5246-
getPrefixed (method: Element? Function(String, String))
5247+
getPrefixed (method: Element? Function(String, String), deprecated)
52475248
getPrefixed2 (method: Element2? Function(String, String))
52485249
package:analyzer/src/generated/engine.dart:
52495250
AnalysisContext@2 (class extends Object):

pkg/analyzer/lib/dart/element/element2.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2728,6 +2728,9 @@ abstract class SuperFormalParameterFragment implements FormalParameterFragment {
27282728
/// Clients may not extend, implement or mix-in this class.
27292729
abstract class TopLevelFunctionElement
27302730
implements ExecutableElement2, HasSinceSdkVersion {
2731+
/// The name of the function used as an entry point.
2732+
static const String MAIN_FUNCTION_NAME = "main";
2733+
27312734
/// The name of the synthetic function defined for libraries that are
27322735
/// deferred.
27332736
static final String LOAD_LIBRARY_NAME = "loadLibrary";

pkg/analyzer/lib/src/dart/analysis/driver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ import 'package:meta/meta.dart';
100100
// TODO(scheglov): Clean up the list of implicitly analyzed files.
101101
class AnalysisDriver {
102102
/// The version of data format, should be incremented on every format change.
103-
static const int DATA_VERSION = 444;
103+
static const int DATA_VERSION = 445;
104104

105105
/// The number of exception contexts allowed to write. Once this field is
106106
/// zero, we stop writing any new exception contexts in this process.

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7026,7 +7026,7 @@ class LibraryElementImpl extends ElementImpl
70267026

70277027
/// The entry point for this library, or `null` if this library does not have
70287028
/// an entry point.
7029-
FunctionElement? _entryPoint;
7029+
TopLevelFunctionElement? _entryPoint;
70307030

70317031
/// The provider for the synthetic function `loadLibrary` that is defined
70327032
/// for this library.
@@ -7126,20 +7126,22 @@ class LibraryElementImpl extends ElementImpl
71267126
return _definingCompilationUnit;
71277127
}
71287128

7129+
@Deprecated('Use entryPoint2 instead')
71297130
@override
71307131
FunctionElement? get entryPoint {
7132+
return entryPoint2?.asElement;
7133+
}
7134+
7135+
@override
7136+
TopLevelFunctionElement? get entryPoint2 {
71317137
linkedData?.read(this);
71327138
return _entryPoint;
71337139
}
71347140

7135-
set entryPoint(FunctionElement? entryPoint) {
7136-
_entryPoint = entryPoint;
7141+
set entryPoint2(TopLevelFunctionElement? value) {
7142+
_entryPoint = value;
71377143
}
71387144

7139-
@override
7140-
TopLevelFunctionElement? get entryPoint2 =>
7141-
entryPoint.asElement2 as TopLevelFunctionElement?;
7142-
71437145
@override
71447146
List<LibraryElementImpl> get exportedLibraries {
71457147
return fragments

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

Lines changed: 1 addition & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -12,46 +12,6 @@ import 'package:analyzer/src/dart/ast/element_locator.dart';
1212
import 'package:analyzer/src/dart/element/element.dart';
1313
import '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.
5717
Element2? 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`.
22783
MockLibraryImportElement? _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

pkg/analyzer/lib/src/dart/resolver/scope.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
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, as_much_as_we_can
6-
75
import 'package:_fe_analyzer_shared/src/base/analyzer_public_api.dart';
86
import 'package:_fe_analyzer_shared/src/scanner/string_canonicalizer.dart';
97
import 'package:analyzer/dart/element/element.dart';
@@ -127,6 +125,7 @@ class Namespace {
127125

128126
/// Return a table containing the same mappings as those defined by this
129127
/// namespace.
128+
@Deprecated('Use definedNames2 instead')
130129
Map<String, Element> get definedNames =>
131130
_definedNames.mapValue((e) => e.asElement!);
132131

@@ -136,6 +135,7 @@ class Namespace {
136135

137136
/// Return the element in this namespace that is available to the containing
138137
/// scope using the given name, or `null` if there is no such element.
138+
@Deprecated('Use get2() instead')
139139
Element? get(String name) => _definedNames[name]?.asElement;
140140

141141
/// Return the element in this namespace that is available to the containing
@@ -145,6 +145,7 @@ class Namespace {
145145
/// Return the element in this namespace whose name is the result of combining
146146
/// the [prefix] and the [name], separated by a period, or `null` if there is
147147
/// no such element.
148+
@Deprecated('Use getPrefixed2() instead')
148149
Element? getPrefixed(String prefix, String name) => null;
149150

150151
/// Return the element in this namespace whose name is the result of combining
@@ -322,6 +323,7 @@ class PrefixedNamespace implements Namespace {
322323
: _prefix = prefix,
323324
_length = prefix.length;
324325

326+
@Deprecated('Use definedNames2 instead')
325327
@override
326328
Map<String, Element> get definedNames {
327329
var definedNames = <String, Element>{};
@@ -336,6 +338,7 @@ class PrefixedNamespace implements Namespace {
336338
return _definedNames;
337339
}
338340

341+
@Deprecated('Use get2() instead')
339342
@override
340343
Element? get(String name) {
341344
return get2(name)?.asElement;
@@ -351,6 +354,7 @@ class PrefixedNamespace implements Namespace {
351354
return null;
352355
}
353356

357+
@Deprecated('Use getPrefixed2() instead')
354358
@override
355359
Element? getPrefixed(String prefix, String name) {
356360
return getPrefixed2(prefix, name)?.asElement;

pkg/analyzer/lib/src/summary2/bundle_reader.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ class LibraryElementLinkedData extends ElementLinkedData<LibraryElementImpl> {
549549
unitElement: unitElement,
550550
);
551551

552-
element.entryPoint = reader.readElement() as FunctionElement?;
552+
element.entryPoint2 = reader.readElement2() as TopLevelFunctionElement?;
553553

554554
element.fieldNameNonPromotabilityInfo =
555555
_readFieldNameNonPromotabilityInfo(reader);

pkg/analyzer/lib/src/summary2/bundle_writer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ class BundleWriter {
118118
// Write resolution data for the library.
119119
_sink.writeUInt30(_resolutionSink.offset);
120120
_resolutionSink._writeAnnotationList(libraryElement.metadata);
121-
_resolutionSink.writeElement(libraryElement.entryPoint);
121+
_resolutionSink.writeElement2(libraryElement.entryPoint2);
122122
_writeFieldNameNonPromotabilityInfo(
123123
libraryElement.fieldNameNonPromotabilityInfo);
124124

pkg/analyzer/lib/src/summary2/library_builder.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -377,9 +377,9 @@ class LibraryBuilder {
377377
var namespace = Namespace(definedNames);
378378
element.exportNamespace = namespace;
379379

380-
var entryPoint = namespace.get(FunctionElement.MAIN_FUNCTION_NAME);
381-
if (entryPoint is FunctionElement) {
382-
element.entryPoint = entryPoint;
380+
var entryPoint = namespace.get2(TopLevelFunctionElement.MAIN_FUNCTION_NAME);
381+
if (entryPoint is TopLevelFunctionElement) {
382+
element.entryPoint2 = entryPoint;
383383
}
384384
}
385385

pkg/analyzer/test/src/summary/element_text.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,10 +537,10 @@ class _Element2Writer extends _AbstractElementWriter {
537537
}
538538

539539
void _writeExportNamespace(LibraryElement2 e) {
540-
var map = e.exportNamespace.definedNames;
540+
var map = e.exportNamespace.definedNames2;
541541
var sortedEntries = map.entries.sortedBy((entry) => entry.key);
542542
for (var entry in sortedEntries) {
543-
_elementPrinter.writeNamedElement(entry.key, entry.value);
543+
_elementPrinter.writelnNamedElement2(entry.key, entry.value);
544544
}
545545
}
546546

@@ -2118,6 +2118,7 @@ class _ElementWriter extends _AbstractElementWriter {
21182118
}
21192119

21202120
void _writeExportNamespace(LibraryElement e) {
2121+
// ignore:deprecated_member_use_from_same_package
21212122
var map = e.exportNamespace.definedNames;
21222123
var sortedEntries = map.entries.sortedBy((entry) => entry.key);
21232124
for (var entry in sortedEntries) {

0 commit comments

Comments
 (0)