@@ -6,14 +6,16 @@ import 'package:analysis_server/src/collections.dart';
6
6
import 'package:analysis_server/src/protocol_server.dart' as proto;
7
7
import 'package:analyzer/dart/ast/ast.dart' ;
8
8
import 'package:analyzer/dart/ast/token.dart' ;
9
- import 'package:analyzer/dart/element/element.dart' ;
9
+ import 'package:analyzer/dart/element/element2.dart' ;
10
+ import 'package:analyzer/src/dart/element/inheritance_manager3.dart' ;
11
+ import 'package:collection/collection.dart' ;
10
12
11
13
/// Return the elements that the given [element] overrides.
12
- OverriddenElements findOverriddenElements (Element element) {
13
- if (element.enclosingElement3 is InterfaceElement ) {
14
+ OverriddenElements findOverriddenElements (Element2 element) {
15
+ if (element.enclosingElement2 is InterfaceElement2 ) {
14
16
return _OverriddenElementsFinder (element).find ();
15
17
}
16
- return OverriddenElements (element, < Element > [], < Element > []);
18
+ return OverriddenElements (element, < Element2 > [], < Element2 > []);
17
19
}
18
20
19
21
/// A computer for class member overrides in a Dart [CompilationUnit] .
@@ -40,19 +42,19 @@ class DartUnitOverridesComputer {
40
42
}
41
43
42
44
/// Add a new [Override] for the declaration with the given name [token] .
43
- void _addOverride (Token token, Element ? element) {
45
+ void _addOverride (Token token, Element2 ? element) {
44
46
if (element != null ) {
45
47
var overridesResult = _OverriddenElementsFinder (element).find ();
46
48
var superElements = overridesResult.superElements;
47
49
var interfaceElements = overridesResult.interfaceElements;
48
50
if (superElements.isNotEmpty || interfaceElements.isNotEmpty) {
49
51
var superMember = superElements.isNotEmpty
50
52
? proto.newOverriddenMember_fromEngine (
51
- superElements.first.nonSynthetic )
53
+ superElements.first.nonSynthetic2 )
52
54
: null ;
53
55
var interfaceMembers = interfaceElements
54
56
.map ((member) =>
55
- proto.newOverriddenMember_fromEngine (member.nonSynthetic ))
57
+ proto.newOverriddenMember_fromEngine (member.nonSynthetic2 ))
56
58
.toList ();
57
59
_overrides.add (proto.Override (token.offset, token.length,
58
60
superclassMember: superMember,
@@ -67,15 +69,15 @@ class DartUnitOverridesComputer {
67
69
if (classMember.isStatic) {
68
70
continue ;
69
71
}
70
- _addOverride (classMember.name, classMember.declaredElement );
72
+ _addOverride (classMember.name, classMember.declaredFragment ? .element );
71
73
}
72
74
if (classMember is FieldDeclaration ) {
73
75
if (classMember.isStatic) {
74
76
continue ;
75
77
}
76
78
List <VariableDeclaration > fields = classMember.fields.variables;
77
79
for (var field in fields) {
78
- _addOverride (field.name, field.declaredElement );
80
+ _addOverride (field.name, field.declaredFragment ? .element );
79
81
}
80
82
}
81
83
}
@@ -85,58 +87,62 @@ class DartUnitOverridesComputer {
85
87
/// The container with elements that a class member overrides.
86
88
class OverriddenElements {
87
89
/// The element that overrides other class members.
88
- final Element element;
90
+ final Element2 element;
89
91
90
92
/// The elements that [element] overrides and which is defined in a class that
91
93
/// is a superclass of the class that defines [element] .
92
- final List <Element > superElements;
94
+ final List <Element2 > superElements;
93
95
94
96
/// The elements that [element] overrides and which is defined in a class that
95
97
/// which is implemented by the class that defines [element] .
96
- final List <Element > interfaceElements;
98
+ final List <Element2 > interfaceElements;
97
99
98
100
OverriddenElements (this .element, this .superElements, this .interfaceElements);
99
101
}
100
102
101
103
class _OverriddenElementsFinder {
102
- Element _seed;
103
- LibraryElement _library;
104
- InterfaceElement _class;
104
+ Element2 _seed;
105
+ LibraryElement2 _library;
106
+ InterfaceElement2 _class;
105
107
String _name;
106
108
List <ElementKind > _kinds;
107
109
108
- final List <Element > _superElements = < Element > [];
109
- final List <Element > _interfaceElements = < Element > [];
110
- final Set <InterfaceElement > _visited = {};
110
+ final List <Element2 > _superElements = < Element2 > [];
111
+ final List <Element2 > _interfaceElements = < Element2 > [];
112
+ final Set <InterfaceElement2 > _visited = {};
111
113
112
- factory _OverriddenElementsFinder (Element seed) {
113
- var class_ = seed.enclosingElement3 as InterfaceElement ;
114
- var library = class_.library ;
114
+ factory _OverriddenElementsFinder (Element2 seed) {
115
+ var class_ = seed.enclosingElement2 as InterfaceElement2 ;
116
+ var library = class_.library2 ;
115
117
var name = seed.displayName;
116
118
List <ElementKind > kinds;
117
- if (seed is FieldElement ) {
119
+ if (seed is FieldElement2 ) {
118
120
kinds = [
119
121
ElementKind .GETTER ,
120
122
if (! seed.isFinal) ElementKind .SETTER ,
121
123
];
122
- } else if (seed is MethodElement ) {
124
+ } else if (seed is MethodElement2 ) {
123
125
kinds = const [ElementKind .METHOD ];
124
- } else if (seed is PropertyAccessorElement ) {
125
- kinds = seed.isGetter
126
- ? const [ ElementKind . GETTER ]
127
- : const [ElementKind .SETTER ];
126
+ } else if (seed is GetterElement ) {
127
+ kinds = const [ ElementKind . GETTER ];
128
+ } else if (seed is SetterElement ) {
129
+ kinds = const [ElementKind .SETTER ];
128
130
} else {
129
131
kinds = const [];
130
132
}
131
133
return _OverriddenElementsFinder ._(seed, library, class_, name, kinds);
132
134
}
133
135
134
136
_OverriddenElementsFinder ._(
135
- this ._seed, this ._library, this ._class, this ._name, this ._kinds);
137
+ this ._seed,
138
+ this ._library,
139
+ this ._class,
140
+ this ._name,
141
+ this ._kinds,
142
+ );
136
143
137
144
/// Add the [OverriddenElements] for this element.
138
145
OverriddenElements find () {
139
- _class = _class.augmented .declaration;
140
146
_visited.clear ();
141
147
_addSuperOverrides (_class, withThisType: false );
142
148
_visited.clear ();
@@ -145,7 +151,7 @@ class _OverriddenElementsFinder {
145
151
return OverriddenElements (_seed, _superElements, _interfaceElements);
146
152
}
147
153
148
- void _addInterfaceOverrides (InterfaceElement ? class_, bool checkType) {
154
+ void _addInterfaceOverrides (InterfaceElement2 ? class_, bool checkType) {
149
155
if (class_ == null ) {
150
156
return ;
151
157
}
@@ -161,13 +167,13 @@ class _OverriddenElementsFinder {
161
167
}
162
168
// interfaces
163
169
for (var interfaceType in class_.interfaces) {
164
- _addInterfaceOverrides (interfaceType.element , true );
170
+ _addInterfaceOverrides (interfaceType.element3 , true );
165
171
}
166
172
// super
167
- _addInterfaceOverrides (class_.supertype? .element , checkType);
173
+ _addInterfaceOverrides (class_.supertype? .element3 , checkType);
168
174
}
169
175
170
- void _addSuperOverrides (InterfaceElement ? class_,
176
+ void _addSuperOverrides (InterfaceElement2 ? class_,
171
177
{bool withThisType = true }) {
172
178
if (class_ == null ) {
173
179
return ;
@@ -183,39 +189,47 @@ class _OverriddenElementsFinder {
183
189
}
184
190
}
185
191
186
- _addSuperOverrides (class_.supertype? .element );
192
+ _addSuperOverrides (class_.supertype? .element3 );
187
193
for (var mixin_ in class_.mixins) {
188
- _addSuperOverrides (mixin_.element );
194
+ _addSuperOverrides (mixin_.element3 );
189
195
}
190
- if (class_ is MixinElement ) {
196
+ if (class_ is MixinElement2 ) {
191
197
for (var constraint in class_.superclassConstraints) {
192
- _addSuperOverrides (constraint.element );
198
+ _addSuperOverrides (constraint.element3 );
193
199
}
194
200
}
195
201
}
196
202
197
- Element ? _lookupMember (InterfaceElement classElement) {
198
- Element ? member;
203
+ Element2 ? _lookupMember (InterfaceElement2 classElement) {
204
+ var name = Name .forLibrary (_library, _name);
205
+
206
+ /// Helper to find an element in [elements] that matches [targetName] .
207
+ Element2 ? findMatchingElement (
208
+ Iterable <Element2 > elements, Name targetName) {
209
+ return elements.firstWhereOrNull ((Element2 element) {
210
+ var elementName = element.name3;
211
+ return elementName != null &&
212
+ Name .forLibrary (element.library2, elementName) == targetName;
213
+ });
214
+ }
215
+
199
216
// method
200
217
if (_kinds.contains (ElementKind .METHOD )) {
201
- var augmented = classElement.augmented ;
202
- member = augmented .lookUpMethod (name: _name, library: _library);
218
+ var member = findMatchingElement (classElement.methods2, name);
203
219
if (member != null ) {
204
220
return member;
205
221
}
206
222
}
207
223
// getter
208
224
if (_kinds.contains (ElementKind .GETTER )) {
209
- var augmented = classElement.augmented ;
210
- member = augmented .lookUpGetter (name: _name, library: _library);
225
+ var member = findMatchingElement (classElement.getters2, name.forGetter);
211
226
if (member != null ) {
212
227
return member;
213
228
}
214
229
}
215
230
// setter
216
231
if (_kinds.contains (ElementKind .SETTER )) {
217
- var augmented = classElement.augmented ;
218
- member = augmented .lookUpSetter (name: '$_name =' , library: _library);
232
+ var member = findMatchingElement (classElement.setters2, name.forSetter);
219
233
if (member != null ) {
220
234
return member;
221
235
}
0 commit comments