Skip to content

Commit 1cfbde8

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Elements. Migrate analyzer/test/src/dart/micro/simple_file_resolver_test.dart
Change-Id: If1ed7362fd07c394e9b475472136b27fc82d3ded Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407500 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 5528fc6 commit 1cfbde8

File tree

3 files changed

+80
-29
lines changed

3 files changed

+80
-29
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'package:analyzer/dart/analysis/declared_variables.dart';
1010
import 'package:analyzer/dart/analysis/features.dart';
1111
import 'package:analyzer/dart/analysis/results.dart';
1212
import 'package:analyzer/dart/element/element.dart';
13+
import 'package:analyzer/dart/element/element2.dart';
1314
import 'package:analyzer/error/error.dart';
1415
import 'package:analyzer/file_system/file_system.dart';
1516
import 'package:analyzer/source/line_info.dart';
@@ -39,6 +40,7 @@ import 'package:analyzer/src/summary/format.dart';
3940
import 'package:analyzer/src/summary/idl.dart';
4041
import 'package:analyzer/src/summary/package_bundle_reader.dart';
4142
import 'package:analyzer/src/util/performance/operation_performance.dart';
43+
import 'package:analyzer/src/utilities/extensions/element.dart';
4244
import 'package:analyzer/src/utilities/extensions/file_system.dart';
4345
import 'package:analyzer/src/utilities/uri_cache.dart';
4446
import 'package:analyzer/src/workspace/workspace.dart';
@@ -253,6 +255,16 @@ class FileResolver {
253255
releaseAndClearRemovedIds();
254256
}
255257

258+
/// Looks for references to the given Element. All the files currently
259+
/// cached by the resolver are searched, generated files are ignored.
260+
Future<List<CiderSearchMatch>> findReferences(Element2 element,
261+
{OperationPerformanceImpl? performance}) {
262+
return findReferences2(
263+
element.asElement!,
264+
performance: performance,
265+
);
266+
}
267+
256268
/// Looks for references to the given Element. All the files currently
257269
/// cached by the resolver are searched, generated files are ignored.
258270
Future<List<CiderSearchMatch>> findReferences2(Element element,

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import 'package:analyzer/dart/ast/visitor.dart';
88
import 'package:analyzer/dart/element/element.dart';
9+
import 'package:analyzer/dart/element/element2.dart';
910
import 'package:analyzer/src/dart/ast/ast.dart';
1011
import 'package:analyzer/src/dart/ast/element_locator.dart';
1112
import 'package:analyzer/src/dart/element/element.dart';
@@ -51,6 +52,46 @@ Element? getElementOfNode(AstNode? node) {
5152
return element;
5253
}
5354

55+
/// Return the [Element] of the given [node], or `null` if [node] is `null` or
56+
/// does not have an element.
57+
Element2? getElementOfNode2(AstNode? node) {
58+
if (node == null) {
59+
return null;
60+
}
61+
if (node is SimpleIdentifier && node.parent is LibraryIdentifier) {
62+
node = node.parent;
63+
}
64+
if (node is LibraryIdentifier) {
65+
node = node.parent;
66+
}
67+
if (node is StringLiteral && node.parent is UriBasedDirective) {
68+
return null;
69+
}
70+
71+
Element? element;
72+
switch (node) {
73+
case ExportDirective():
74+
element = node.element;
75+
case ImportDirective():
76+
element = node.element;
77+
case PartOfDirective():
78+
element = node.element;
79+
default:
80+
element = ElementLocator.locate2(node).asElement;
81+
}
82+
83+
if (node is SimpleIdentifier && element is PrefixElement) {
84+
var parent = node.parent;
85+
if (parent is ImportDirective) {
86+
element = parent.element;
87+
} else {
88+
element = _getImportElementInfo(node);
89+
}
90+
}
91+
92+
return element.asElement2;
93+
}
94+
5495
/// If the given [constructor] is a synthetic constructor created for a
5596
/// [ClassTypeAlias], return the actual constructor of a [ClassDeclaration]
5697
/// which is invoked. Return `null` if a redirection cycle is detected.

pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
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-
7-
import 'package:analyzer/dart/element/element.dart';
5+
import 'package:analyzer/dart/element/element2.dart';
86
import 'package:analyzer/file_system/file_system.dart';
97
import 'package:analyzer/source/line_info.dart';
108
import 'package:analyzer/src/dart/analysis/file_state.dart';
@@ -951,7 +949,7 @@ var b = 1 + 2;
951949
declaration: intElement,
952950
);
953951

954-
assertType(findElement.topVar('b').type, 'int');
952+
assertType(findElement2.topVar('b').type, 'int');
955953
}
956954

957955
test_dispose() async {
@@ -1066,7 +1064,7 @@ void func() {
10661064

10671065
await resolveFile(b);
10681066
var element = await _findElement(6, a);
1069-
var result = await fileResolver.findReferences2(element);
1067+
var result = await fileResolver.findReferences(element);
10701068
var expected = <CiderSearchMatch>[
10711069
CiderSearchMatch(b.path,
10721070
[CiderSearchInfo(CharacterLocation(4, 11), 1, MatchKind.REFERENCE)])
@@ -1087,7 +1085,7 @@ class A {
10871085

10881086
await resolveFile(a);
10891087
var element = await _findElement(16, a);
1090-
var result = await fileResolver.findReferences2(element);
1088+
var result = await fileResolver.findReferences(element);
10911089
var expected = <CiderSearchMatch>[
10921090
CiderSearchMatch(a.path, [
10931091
CiderSearchInfo(CharacterLocation(5, 5), 3, MatchKind.WRITE),
@@ -1107,7 +1105,7 @@ foo(String str) {}
11071105

11081106
await resolveFile(a);
11091107
var element = await _findElement(11, a);
1110-
var result = await fileResolver.findReferences2(element);
1108+
var result = await fileResolver.findReferences(element);
11111109
var expected = <CiderSearchMatch>[
11121110
CiderSearchMatch(a.path, [
11131111
CiderSearchInfo(CharacterLocation(2, 3), 3, MatchKind.REFERENCE),
@@ -1133,7 +1131,7 @@ main() {
11331131

11341132
await resolveFile(b);
11351133
var element = await _findElement(20, a);
1136-
var result = await fileResolver.findReferences2(element);
1134+
var result = await fileResolver.findReferences(element);
11371135
var expected = <CiderSearchMatch>[
11381136
CiderSearchMatch(b.path, [
11391137
CiderSearchInfo(CharacterLocation(5, 15), 3, MatchKind.REFERENCE),
@@ -1154,7 +1152,7 @@ class A {
11541152
''');
11551153
await resolveFile(a);
11561154
var element = await _findElement(39, a);
1157-
var result = await fileResolver.findReferences2(element);
1155+
var result = await fileResolver.findReferences(element);
11581156
var expected = <CiderSearchMatch>[
11591157
CiderSearchMatch(a.path, [
11601158
CiderSearchInfo(CharacterLocation(4, 11), 3, MatchKind.REFERENCE),
@@ -1189,7 +1187,7 @@ main() {
11891187
await resolveFile(b);
11901188

11911189
var element = await _findElement(17, a);
1192-
var result = await fileResolver.findReferences2(element);
1190+
var result = await fileResolver.findReferences(element);
11931191
var expected = <CiderSearchMatch>[
11941192
CiderSearchMatch(b.path, [
11951193
CiderSearchInfo(CharacterLocation(5, 5), 4, MatchKind.REFERENCE),
@@ -1218,7 +1216,7 @@ main() {
12181216

12191217
await resolveFile(b);
12201218
var element = await _findElement(21, a);
1221-
var result = await fileResolver.findReferences2(element);
1219+
var result = await fileResolver.findReferences(element);
12221220
var expected = <CiderSearchMatch>[
12231221
CiderSearchMatch(b.path, [
12241222
CiderSearchInfo(CharacterLocation(5, 5), 5, MatchKind.WRITE),
@@ -1244,7 +1242,7 @@ main() {
12441242

12451243
await resolveFile(b);
12461244
var element = await _findElement(19, a);
1247-
var result = await fileResolver.findReferences2(element);
1245+
var result = await fileResolver.findReferences(element);
12481246
var expected = <CiderSearchMatch>[
12491247
CiderSearchMatch(b.path, [
12501248
CiderSearchInfo(CharacterLocation(4, 13), 3, MatchKind.REFERENCE),
@@ -1270,7 +1268,7 @@ main() {
12701268

12711269
await resolveFile(b);
12721270
var element = await _findElement(20, a);
1273-
var result = await fileResolver.findReferences2(element);
1271+
var result = await fileResolver.findReferences(element);
12741272
var expected = <CiderSearchMatch>[
12751273
CiderSearchMatch(b.path, [
12761274
CiderSearchInfo(CharacterLocation(4, 3), 3, MatchKind.WRITE),
@@ -1290,7 +1288,7 @@ void func() {
12901288

12911289
await resolveFile(a);
12921290
var element = await _findElement(10, a);
1293-
var result = await fileResolver.findReferences2(element);
1291+
var result = await fileResolver.findReferences(element);
12941292
var expected = <CiderSearchMatch>[
12951293
CiderSearchMatch(a.path, [
12961294
CiderSearchInfo(CharacterLocation(4, 11), 1, MatchKind.READ),
@@ -1309,7 +1307,7 @@ class Foo<T> {
13091307
''');
13101308
await resolveFile(a);
13111309
var element = await _findElement(10, a);
1312-
var result = await fileResolver.findReferences2(element);
1310+
var result = await fileResolver.findReferences(element);
13131311
var expected = <CiderSearchMatch>[
13141312
CiderSearchMatch(a.path, [
13151313
CiderSearchInfo(CharacterLocation(2, 8), 1, MatchKind.REFERENCE),
@@ -1332,7 +1330,7 @@ void f(func o) {}
13321330

13331331
await resolveFile(b);
13341332
var element = await _findElement(8, a);
1335-
var result = await fileResolver.findReferences2(element);
1333+
var result = await fileResolver.findReferences(element);
13361334
var expected = <CiderSearchMatch>[
13371335
CiderSearchMatch(b.path, [
13381336
CiderSearchInfo(CharacterLocation(3, 8), 4, MatchKind.REFERENCE),
@@ -1351,7 +1349,7 @@ void f(int? a) {
13511349
''');
13521350

13531351
assertType(
1354-
findElement.parameter('a').type,
1352+
findElement2.parameter('a').type,
13551353
'int?',
13561354
);
13571355
}
@@ -1839,17 +1837,17 @@ void f(A a) {
18391837

18401838
await resolveTestFile();
18411839
{
1842-
var element = findNode.simple('foo();').staticElement!;
1843-
expect(element.nameOffset, 17);
1840+
var element = findNode.simple('foo();').element!;
1841+
expect(element.firstFragment.nameOffset2, 17);
18441842
}
18451843

18461844
// New resolver.
18471845
// Element models will be loaded from the cache.
18481846
createFileResolver();
18491847
await resolveTestFile();
18501848
{
1851-
var element = findNode.simple('foo();').staticElement!;
1852-
expect(element.nameOffset, 17);
1849+
var element = findNode.simple('foo();').element!;
1850+
expect(element.firstFragment.nameOffset2, 17);
18531851
}
18541852
}
18551853

@@ -1865,17 +1863,17 @@ var b = a;
18651863

18661864
await resolveTestFile();
18671865
{
1868-
var element = findNode.simple('a;').staticElement!;
1869-
expect(element.nonSynthetic.nameOffset, 4);
1866+
var element = findNode.simple('a;').element!;
1867+
expect(element.nonSynthetic2.firstFragment.nameOffset2, 4);
18701868
}
18711869

18721870
// New resolver.
18731871
// Element models will be loaded from the cache.
18741872
createFileResolver();
18751873
await resolveTestFile();
18761874
{
1877-
var element = findNode.simple('a;').staticElement!;
1878-
expect(element.nonSynthetic.nameOffset, 4);
1875+
var element = findNode.simple('a;').element!;
1876+
expect(element.nonSynthetic2.firstFragment.nameOffset2, 4);
18791877
}
18801878
}
18811879

@@ -2529,8 +2527,8 @@ void func() {
25292527
// Both files use the same (default) analysis options.
25302528
// So, when we resolve 'bbb', we can reuse the context after 'aaa'.
25312529
expect(
2532-
aResult.libraryElement.context,
2533-
same(bResult.libraryElement.context),
2530+
aResult.libraryElement2.session,
2531+
same(bResult.libraryElement2.session),
25342532
);
25352533
}
25362534

@@ -2592,10 +2590,10 @@ import 'dart:math';
25922590
}
25932591
}
25942592

2595-
Future<Element> _findElement(int offset, File file) async {
2593+
Future<Element2> _findElement(int offset, File file) async {
25962594
var resolvedUnit = await fileResolver.resolve(path: file.path);
25972595
var node = NodeLocator(offset).searchWithin(resolvedUnit.unit);
2598-
var element = getElementOfNode(node);
2596+
var element = getElementOfNode2(node);
25992597
return element!;
26002598
}
26012599
}

0 commit comments

Comments
 (0)