@@ -6,14 +6,16 @@ import 'package:analysis_server/src/collections.dart';
66import 'package:analysis_server/src/protocol_server.dart' as proto;
77import 'package:analyzer/dart/ast/ast.dart' ;
88import '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' ;
1012
1113/// 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 ) {
1416 return _OverriddenElementsFinder (element).find ();
1517 }
16- return OverriddenElements (element, < Element > [], < Element > []);
18+ return OverriddenElements (element, < Element2 > [], < Element2 > []);
1719}
1820
1921/// A computer for class member overrides in a Dart [CompilationUnit] .
@@ -40,19 +42,19 @@ class DartUnitOverridesComputer {
4042 }
4143
4244 /// 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) {
4446 if (element != null ) {
4547 var overridesResult = _OverriddenElementsFinder (element).find ();
4648 var superElements = overridesResult.superElements;
4749 var interfaceElements = overridesResult.interfaceElements;
4850 if (superElements.isNotEmpty || interfaceElements.isNotEmpty) {
4951 var superMember = superElements.isNotEmpty
5052 ? proto.newOverriddenMember_fromEngine (
51- superElements.first.nonSynthetic )
53+ superElements.first.nonSynthetic2 )
5254 : null ;
5355 var interfaceMembers = interfaceElements
5456 .map ((member) =>
55- proto.newOverriddenMember_fromEngine (member.nonSynthetic ))
57+ proto.newOverriddenMember_fromEngine (member.nonSynthetic2 ))
5658 .toList ();
5759 _overrides.add (proto.Override (token.offset, token.length,
5860 superclassMember: superMember,
@@ -67,15 +69,15 @@ class DartUnitOverridesComputer {
6769 if (classMember.isStatic) {
6870 continue ;
6971 }
70- _addOverride (classMember.name, classMember.declaredElement );
72+ _addOverride (classMember.name, classMember.declaredFragment ? .element );
7173 }
7274 if (classMember is FieldDeclaration ) {
7375 if (classMember.isStatic) {
7476 continue ;
7577 }
7678 List <VariableDeclaration > fields = classMember.fields.variables;
7779 for (var field in fields) {
78- _addOverride (field.name, field.declaredElement );
80+ _addOverride (field.name, field.declaredFragment ? .element );
7981 }
8082 }
8183 }
@@ -85,58 +87,62 @@ class DartUnitOverridesComputer {
8587/// The container with elements that a class member overrides.
8688class OverriddenElements {
8789 /// The element that overrides other class members.
88- final Element element;
90+ final Element2 element;
8991
9092 /// The elements that [element] overrides and which is defined in a class that
9193 /// is a superclass of the class that defines [element] .
92- final List <Element > superElements;
94+ final List <Element2 > superElements;
9395
9496 /// The elements that [element] overrides and which is defined in a class that
9597 /// which is implemented by the class that defines [element] .
96- final List <Element > interfaceElements;
98+ final List <Element2 > interfaceElements;
9799
98100 OverriddenElements (this .element, this .superElements, this .interfaceElements);
99101}
100102
101103class _OverriddenElementsFinder {
102- Element _seed;
103- LibraryElement _library;
104- InterfaceElement _class;
104+ Element2 _seed;
105+ LibraryElement2 _library;
106+ InterfaceElement2 _class;
105107 String _name;
106108 List <ElementKind > _kinds;
107109
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 = {};
111113
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 ;
115117 var name = seed.displayName;
116118 List <ElementKind > kinds;
117- if (seed is FieldElement ) {
119+ if (seed is FieldElement2 ) {
118120 kinds = [
119121 ElementKind .GETTER ,
120122 if (! seed.isFinal) ElementKind .SETTER ,
121123 ];
122- } else if (seed is MethodElement ) {
124+ } else if (seed is MethodElement2 ) {
123125 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 ];
128130 } else {
129131 kinds = const [];
130132 }
131133 return _OverriddenElementsFinder ._(seed, library, class_, name, kinds);
132134 }
133135
134136 _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+ );
136143
137144 /// Add the [OverriddenElements] for this element.
138145 OverriddenElements find () {
139- _class = _class.augmented .declaration;
140146 _visited.clear ();
141147 _addSuperOverrides (_class, withThisType: false );
142148 _visited.clear ();
@@ -145,7 +151,7 @@ class _OverriddenElementsFinder {
145151 return OverriddenElements (_seed, _superElements, _interfaceElements);
146152 }
147153
148- void _addInterfaceOverrides (InterfaceElement ? class_, bool checkType) {
154+ void _addInterfaceOverrides (InterfaceElement2 ? class_, bool checkType) {
149155 if (class_ == null ) {
150156 return ;
151157 }
@@ -161,13 +167,13 @@ class _OverriddenElementsFinder {
161167 }
162168 // interfaces
163169 for (var interfaceType in class_.interfaces) {
164- _addInterfaceOverrides (interfaceType.element , true );
170+ _addInterfaceOverrides (interfaceType.element3 , true );
165171 }
166172 // super
167- _addInterfaceOverrides (class_.supertype? .element , checkType);
173+ _addInterfaceOverrides (class_.supertype? .element3 , checkType);
168174 }
169175
170- void _addSuperOverrides (InterfaceElement ? class_,
176+ void _addSuperOverrides (InterfaceElement2 ? class_,
171177 {bool withThisType = true }) {
172178 if (class_ == null ) {
173179 return ;
@@ -183,39 +189,47 @@ class _OverriddenElementsFinder {
183189 }
184190 }
185191
186- _addSuperOverrides (class_.supertype? .element );
192+ _addSuperOverrides (class_.supertype? .element3 );
187193 for (var mixin_ in class_.mixins) {
188- _addSuperOverrides (mixin_.element );
194+ _addSuperOverrides (mixin_.element3 );
189195 }
190- if (class_ is MixinElement ) {
196+ if (class_ is MixinElement2 ) {
191197 for (var constraint in class_.superclassConstraints) {
192- _addSuperOverrides (constraint.element );
198+ _addSuperOverrides (constraint.element3 );
193199 }
194200 }
195201 }
196202
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+
199216 // method
200217 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);
203219 if (member != null ) {
204220 return member;
205221 }
206222 }
207223 // getter
208224 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);
211226 if (member != null ) {
212227 return member;
213228 }
214229 }
215230 // setter
216231 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);
219233 if (member != null ) {
220234 return member;
221235 }
0 commit comments