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-
75/// Utilities for converting Dart entities into analysis server's protocol
86/// entities.
97library ;
108
119import 'package:analysis_server/src/protocol_server.dart' ;
12- import 'package:analyzer/dart/element/element.dart' as engine;
1310import 'package:analyzer/dart/element/element2.dart' as engine;
1411import 'package:analyzer/dart/element/type.dart' ;
12+ import 'package:analyzer/src/dart/element/element.dart' ;
1513import 'package:analyzer/src/utilities/extensions/element.dart' ;
1614import 'package:path/path.dart' as path;
1715
18- /// Return a protocol [Element] corresponding to the given [engine.Element] .
19- Element convertElement (engine.Element element) {
20- var kind = convertElementToElementKind (element);
21- var name = getElementDisplayName (element);
22- var elementTypeParameters = _getTypeParametersString (element);
23- var aliasedType = getAliasedTypeString (element);
24- var elementParameters = getParametersString (element);
25- var elementReturnType = getReturnTypeString (element);
26- return Element (
27- kind,
28- name,
29- Element .makeFlags (
30- isPrivate: element.isPrivate,
31- isDeprecated: element.hasDeprecated,
32- isAbstract: _isAbstract (element),
33- isConst: _isConst (element),
34- isFinal: _isFinal (element),
35- isStatic: _isStatic (element),
36- ),
37- location: newLocation_fromElement (element),
38- typeParameters: elementTypeParameters,
39- aliasedType: aliasedType,
40- parameters: elementParameters,
41- returnType: elementReturnType,
42- );
43- }
44-
4516Element convertElement2 (engine.Element2 element) {
4617 var kind = convertElementToElementKind2 (element);
4718 var name = getElementDisplayName2 (element);
@@ -75,7 +46,7 @@ Element convertElement2(engine.Element2 element) {
7546///
7647/// This does not take into account that an instance of [engine.ClassElement]
7748/// can be an enum and an instance of [engine.FieldElement] can be an enum
78- /// constant. Use [convertElementToElementKind ] where possible.
49+ /// constant. Use [convertElementToElementKind2 ] where possible.
7950ElementKind convertElementKind (engine.ElementKind kind) {
8051 if (kind == engine.ElementKind .CLASS ) {
8152 return ElementKind .CLASS ;
@@ -149,19 +120,6 @@ ElementKind convertElementKind(engine.ElementKind kind) {
149120 return ElementKind .UNKNOWN ;
150121}
151122
152- /// Return an [ElementKind] corresponding to the given [engine.Element] .
153- ElementKind convertElementToElementKind (engine.Element element) {
154- if (element is engine.EnumElement ) {
155- return ElementKind .ENUM ;
156- } else if (element is engine.MixinElement ) {
157- return ElementKind .MIXIN ;
158- }
159- if (element is engine.FieldElement && element.isEnumConstant) {
160- return ElementKind .ENUM_CONSTANT ;
161- }
162- return convertElementKind (element.kind);
163- }
164-
165123/// Return an [ElementKind] corresponding to the given [engine.Element2] .
166124ElementKind convertElementToElementKind2 (engine.Element2 element) {
167125 if (element is engine.EnumElement2 ) {
@@ -175,12 +133,30 @@ ElementKind convertElementToElementKind2(engine.Element2 element) {
175133 return convertElementKind (element.kind);
176134}
177135
178- String getElementDisplayName (engine.Element element) {
179- if (element is engine.CompilationUnitElement ) {
180- return path.basename (element.source.fullName);
181- } else {
182- return element.displayName;
183- }
136+ Element convertLibraryFragment (CompilationUnitElementImpl fragment) {
137+ var kind = convertElementToElementKind2 (fragment);
138+ var name = getElementDisplayName2 (fragment);
139+ var elementTypeParameters = _getTypeParametersString2 (fragment);
140+ var aliasedType = getAliasedTypeString2 (fragment);
141+ var elementParameters = getParametersString2 (fragment);
142+ var elementReturnType = getReturnTypeString2 (fragment);
143+ return Element (
144+ kind,
145+ name,
146+ Element .makeFlags (
147+ isPrivate: fragment.isPrivate,
148+ isDeprecated: fragment.hasDeprecated,
149+ isAbstract: _isAbstract2 (fragment),
150+ isConst: _isConst2 (fragment),
151+ isFinal: _isFinal2 (fragment),
152+ isStatic: _isStatic2 (fragment),
153+ ),
154+ location: newLocation_fromFragment (fragment),
155+ typeParameters: elementTypeParameters,
156+ aliasedType: aliasedType,
157+ parameters: elementParameters,
158+ returnType: elementReturnType,
159+ );
184160}
185161
186162String getElementDisplayName2 (engine.Element2 element) {
@@ -191,55 +167,6 @@ String getElementDisplayName2(engine.Element2 element) {
191167 }
192168}
193169
194- String ? getParametersString (engine.Element element) {
195- // TODO(scheglov): expose the corresponding feature from ExecutableElement
196- List <engine.ParameterElement > parameters;
197- if (element is engine.ExecutableElement ) {
198- // valid getters don't have parameters
199- if (element.kind == engine.ElementKind .GETTER &&
200- element.parameters.isEmpty) {
201- return null ;
202- }
203- parameters = element.parameters.toList ();
204- } else if (element is engine.TypeAliasElement ) {
205- var aliasedType = element.aliasedType;
206- if (aliasedType is FunctionType ) {
207- parameters = aliasedType.parameters.toList ();
208- } else {
209- return null ;
210- }
211- } else {
212- return null ;
213- }
214-
215- parameters.sort (_preferRequiredParams);
216-
217- var sb = StringBuffer ();
218- var closeOptionalString = '' ;
219- for (var parameter in parameters) {
220- if (sb.isNotEmpty) {
221- sb.write (', ' );
222- }
223- if (closeOptionalString.isEmpty) {
224- if (parameter.isNamed) {
225- sb.write ('{' );
226- closeOptionalString = '}' ;
227- } else if (parameter.isOptionalPositional) {
228- sb.write ('[' );
229- closeOptionalString = ']' ;
230- }
231- }
232- if (parameter.isRequiredNamed) {
233- sb.write ('required ' );
234- } else if (parameter.hasRequired) {
235- sb.write ('@required ' );
236- }
237- parameter.appendToWithoutDelimiters (sb);
238- }
239- sb.write (closeOptionalString);
240- return '($sb )' ;
241- }
242-
243170String ? getParametersString2 (engine.Element2 element) {
244171 // TODO(scheglov): expose the corresponding feature from ExecutableElement
245172 List <engine.FormalParameterElement > parameters;
@@ -289,19 +216,6 @@ String? getParametersString2(engine.Element2 element) {
289216 return '($sb )' ;
290217}
291218
292- String ? _getTypeParametersString (engine.Element element) {
293- List <engine.TypeParameterElement >? typeParameters;
294- if (element is engine.InterfaceElement ) {
295- typeParameters = element.typeParameters;
296- } else if (element is engine.TypeAliasElement ) {
297- typeParameters = element.typeParameters;
298- }
299- if (typeParameters == null || typeParameters.isEmpty) {
300- return null ;
301- }
302- return '<${typeParameters .join (', ' )}>' ;
303- }
304-
305219String ? _getTypeParametersString2 (engine.Element2 element) {
306220 List <engine.TypeParameterElement2 >? typeParameters;
307221 if (element is engine.InterfaceElement2 ) {
@@ -315,22 +229,6 @@ String? _getTypeParametersString2(engine.Element2 element) {
315229 return '<${typeParameters .join (', ' )}>' ;
316230}
317231
318- bool _isAbstract (engine.Element element) {
319- if (element is engine.ClassElement ) {
320- return element.isAbstract;
321- }
322- if (element is engine.MethodElement ) {
323- return element.isAbstract;
324- }
325- if (element is engine.MixinElement ) {
326- return true ;
327- }
328- if (element is engine.PropertyAccessorElement ) {
329- return element.isAbstract;
330- }
331- return false ;
332- }
333-
334232bool _isAbstract2 (engine.Element2 element) {
335233 if (element is engine.ClassElement2 ) {
336234 return element.isAbstract;
@@ -344,16 +242,6 @@ bool _isAbstract2(engine.Element2 element) {
344242 return false ;
345243}
346244
347- bool _isConst (engine.Element element) {
348- if (element is engine.ConstructorElement ) {
349- return element.isConst;
350- }
351- if (element is engine.VariableElement ) {
352- return element.isConst;
353- }
354- return false ;
355- }
356-
357245bool _isConst2 (engine.Element2 element) {
358246 if (element is engine.ConstructorElement2 ) {
359247 return element.isConst;
@@ -364,30 +252,13 @@ bool _isConst2(engine.Element2 element) {
364252 return false ;
365253}
366254
367- bool _isFinal (engine.Element element) {
368- if (element is engine.VariableElement ) {
369- return element.isFinal;
370- }
371- return false ;
372- }
373-
374255bool _isFinal2 (engine.Element2 element) {
375256 if (element is engine.VariableElement2 ) {
376257 return element.isFinal;
377258 }
378259 return false ;
379260}
380261
381- bool _isStatic (engine.Element element) {
382- if (element is engine.ExecutableElement ) {
383- return element.isStatic;
384- }
385- if (element is engine.PropertyInducingElement ) {
386- return element.isStatic;
387- }
388- return false ;
389- }
390-
391262bool _isStatic2 (engine.Element2 element) {
392263 if (element is engine.ExecutableElement2 ) {
393264 return element.isStatic;
@@ -398,26 +269,6 @@ bool _isStatic2(engine.Element2 element) {
398269 return false ;
399270}
400271
401- /// Sort required named parameters before optional ones.
402- int _preferRequiredParams (
403- engine.ParameterElement e1,
404- engine.ParameterElement e2,
405- ) {
406- var rank1 =
407- (e1.isRequiredNamed || e1.hasRequired)
408- ? 0
409- : ! e1.isNamed
410- ? - 1
411- : 1 ;
412- var rank2 =
413- (e2.isRequiredNamed || e2.hasRequired)
414- ? 0
415- : ! e2.isNamed
416- ? - 1
417- : 1 ;
418- return rank1 - rank2;
419- }
420-
421272/// Sort required named parameters before optional ones.
422273int _preferRequiredParams2 (
423274 engine.FormalParameterElement e1,
0 commit comments