Skip to content

Commit e87c93b

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Elements. Migrate lib/src/domains/analysis/implemented_dart.dart
Change-Id: Iac8d3c225fa5f7c19add953defb01261c4ac6c9f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399540 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Phil Quitslund <[email protected]>
1 parent 1cca342 commit e87c93b

File tree

6 files changed

+59
-35
lines changed

6 files changed

+59
-35
lines changed

pkg/analysis_server/analyzer_use_new_elements.txt

-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ lib/src/analysis_server.dart
33
lib/src/cider/rename.dart
44
lib/src/computer/computer_call_hierarchy.dart
55
lib/src/computer/computer_documentation.dart
6-
lib/src/domains/analysis/implemented_dart.dart
76
lib/src/domains/analysis/occurrences_dart.dart
87
lib/src/handler/legacy/edit_get_available_refactorings.dart
98
lib/src/handler/legacy/legacy_handler.dart
@@ -18,7 +17,6 @@ lib/src/lsp/handlers/handler_definition.dart
1817
lib/src/lsp/handlers/handler_implementation.dart
1918
lib/src/lsp/handlers/handler_references.dart
2019
lib/src/lsp/handlers/handler_rename.dart
21-
lib/src/operation/operation_analysis.dart
2220
lib/src/protocol_server.dart
2321
lib/src/search/element_references.dart
2422
lib/src/services/correction/namespace.dart

pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart

+43-32
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44

55
import 'package:analysis_server/src/protocol_server.dart' as protocol;
66
import 'package:analysis_server/src/services/search/search_engine.dart';
7-
import 'package:analyzer/dart/element/element.dart';
7+
import 'package:analyzer/dart/element/element2.dart';
8+
import 'package:analyzer/src/utilities/extensions/element.dart';
89

910
class ImplementedComputer {
1011
final SearchEngine searchEngine;
11-
final CompilationUnitElement unitElement;
12+
final LibraryFragment unitElement;
1213

1314
List<protocol.ImplementedClass> classes = <protocol.ImplementedClass>[];
1415
List<protocol.ImplementedMember> members = <protocol.ImplementedMember>[];
@@ -18,33 +19,41 @@ class ImplementedComputer {
1819
ImplementedComputer(this.searchEngine, this.unitElement);
1920

2021
Future<void> compute() async {
21-
for (var element in unitElement.classes) {
22-
await _computeForInterfaceElement(element);
22+
for (var fragment in unitElement.classes2) {
23+
await _computeForInterfaceElement(fragment.element);
2324
}
24-
for (var element in unitElement.enums) {
25-
await _computeForInterfaceElement(element);
25+
for (var fragment in unitElement.enums2) {
26+
await _computeForInterfaceElement(fragment.element);
2627
}
27-
for (var element in unitElement.extensionTypes) {
28-
await _computeForInterfaceElement(element);
28+
for (var fragment in unitElement.extensionTypes2) {
29+
await _computeForInterfaceElement(fragment.element);
2930
}
30-
for (var element in unitElement.mixins) {
31-
await _computeForInterfaceElement(element);
31+
for (var fragment in unitElement.mixins2) {
32+
await _computeForInterfaceElement(fragment.element);
3233
}
3334
}
3435

35-
void _addImplementedClass(InterfaceElement element) {
36-
var offset = element.nameOffset;
37-
var length = element.nameLength;
38-
classes.add(protocol.ImplementedClass(offset, length));
36+
void _addImplementedClass(InterfaceElement2 element) {
37+
for (var fragment in element.fragments) {
38+
var offset = fragment.nameOffset2;
39+
var name = fragment.name2;
40+
if (offset != null && name != null) {
41+
classes.add(protocol.ImplementedClass(offset, name.length));
42+
}
43+
}
3944
}
4045

41-
void _addImplementedMember(Element member) {
42-
var offset = member.nameOffset;
43-
var length = member.nameLength;
44-
members.add(protocol.ImplementedMember(offset, length));
46+
void _addImplementedMember(Element2 element) {
47+
for (var fragment in element.fragments) {
48+
var offset = fragment.nameOffset2;
49+
var name = fragment.name2;
50+
if (offset != null && name != null) {
51+
members.add(protocol.ImplementedMember(offset, name.length));
52+
}
53+
}
4554
}
4655

47-
void _addMemberIfImplemented(Element element) {
56+
void _addMemberIfImplemented(Element2 element) {
4857
if (element.isSynthetic || _isStatic(element)) {
4958
return;
5059
}
@@ -53,36 +62,38 @@ class ImplementedComputer {
5362
}
5463
}
5564

56-
Future<void> _computeForInterfaceElement(InterfaceElement element) async {
65+
Future<void> _computeForInterfaceElement(InterfaceElement2 element) async {
5766
// Always include Object and its members.
58-
if (element is ClassElement && element.isDartCoreObject) {
67+
if (element is ClassElement2 && element.isDartCoreObject) {
5968
_addImplementedClass(element);
60-
element.accessors.forEach(_addImplementedMember);
61-
element.fields.forEach(_addImplementedMember);
62-
element.methods.forEach(_addImplementedMember);
69+
element.getters2.forEach(_addImplementedMember);
70+
element.setters2.forEach(_addImplementedMember);
71+
element.fields2.forEach(_addImplementedMember);
72+
element.methods2.forEach(_addImplementedMember);
6373
return;
6474
}
6575

6676
// Analyze subtypes.
67-
subtypeMembers = await searchEngine.membersOfSubtypes(element);
77+
subtypeMembers = await searchEngine.membersOfSubtypes2(element);
6878
if (subtypeMembers != null) {
6979
_addImplementedClass(element);
70-
element.accessors.forEach(_addMemberIfImplemented);
71-
element.fields.forEach(_addMemberIfImplemented);
72-
element.methods.forEach(_addMemberIfImplemented);
80+
element.getters2.forEach(_addMemberIfImplemented);
81+
element.setters2.forEach(_addMemberIfImplemented);
82+
element.fields2.forEach(_addMemberIfImplemented);
83+
element.methods2.forEach(_addMemberIfImplemented);
7384
}
7485
}
7586

76-
bool _hasOverride(Element element) {
87+
bool _hasOverride(Element2 element) {
7788
var name = element.displayName;
7889
return subtypeMembers!.contains(name);
7990
}
8091

8192
/// Return `true` if the given [element] is a static element.
82-
static bool _isStatic(Element element) {
83-
if (element is ExecutableElement) {
93+
static bool _isStatic(Element2 element) {
94+
if (element is ExecutableElement2) {
8495
return element.isStatic;
85-
} else if (element is PropertyInducingElement) {
96+
} else if (element is PropertyInducingElement2) {
8697
return element.isStatic;
8798
}
8899
return false;

pkg/analysis_server/lib/src/operation/operation_analysis.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Future<void> scheduleImplementedNotification(
2222
var searchEngine = server.searchEngine;
2323
for (var file in files) {
2424
var unit = server.getCachedResolvedUnit(file)?.unit;
25-
var unitElement = unit?.declaredElement;
25+
var unitElement = unit?.declaredFragment;
2626
if (unitElement != null) {
2727
try {
2828
var computer = ImplementedComputer(searchEngine, unitElement);

pkg/analysis_server/lib/src/services/search/search_engine.dart

+5
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ abstract class SearchEngine {
103103
/// return `null`.
104104
Future<Set<String>?> membersOfSubtypes(InterfaceElement type);
105105

106+
/// If the [type] has subtypes, return the set of names of members which these
107+
/// subtypes declare, possibly empty. If the [type] does not have subtypes,
108+
/// return `null`.
109+
Future<Set<String>?> membersOfSubtypes2(InterfaceElement2 type);
110+
106111
/// Returns declarations of class members with the given name.
107112
///
108113
/// [name] - the name being declared by the found matches.

pkg/analysis_server/lib/src/services/search/search_engine_internal.dart

+1
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ class SearchEngineImpl implements SearchEngine {
117117
return members;
118118
}
119119

120+
@override
120121
Future<Set<String>?> membersOfSubtypes2(InterfaceElement2 type) async {
121122
return await membersOfSubtypes(type.asElement);
122123
}

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

+9
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,15 @@ extension ConstructorElementExtension on ConstructorElement {
6161
}
6262

6363
extension Element2Extension on Element2 {
64+
List<Fragment> get fragments {
65+
return [
66+
for (Fragment? fragment = firstFragment;
67+
fragment != null;
68+
fragment = fragment.nextFragment)
69+
fragment,
70+
];
71+
}
72+
6473
/// Whether the element is effectively [internal].
6574
bool get isInternal {
6675
if (this case Annotatable annotatable) {

0 commit comments

Comments
 (0)