Skip to content

Commit 448f0d4

Browse files
bwilkersonCommit Queue
authored andcommitted
[migrate] server/protocol_dart.dart
I didn't rename all of the functions because I thought it would be easier to review if I did it in two steps. Change-Id: If765d56300374794dc9964f17002cfbe172e66b7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407602 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent 7fd0d07 commit 448f0d4

File tree

5 files changed

+50
-181
lines changed

5 files changed

+50
-181
lines changed

pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart

Lines changed: 26 additions & 175 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,17 @@
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.
97
library;
108

119
import 'package:analysis_server/src/protocol_server.dart';
12-
import 'package:analyzer/dart/element/element.dart' as engine;
1310
import 'package:analyzer/dart/element/element2.dart' as engine;
1411
import 'package:analyzer/dart/element/type.dart';
12+
import 'package:analyzer/src/dart/element/element.dart';
1513
import 'package:analyzer/src/utilities/extensions/element.dart';
1614
import '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-
4516
Element 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.
7950
ElementKind 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].
166124
ElementKind 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

186162
String 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-
243170
String? 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-
305219
String? _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-
334232
bool _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-
357245
bool _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-
374255
bool _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-
391262
bool _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.
422273
int _preferRequiredParams2(
423274
engine.FormalParameterElement e1,

pkg/analysis_server/lib/src/handler/legacy/search_find_element_references.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class SearchFindElementReferencesHandler extends LegacyHandler {
4949
var result = protocol.SearchFindElementReferencesResult();
5050
if (element != null) {
5151
result.id = searchId;
52-
result.element = protocol.convertElement(element);
52+
result.element = protocol.convertElement2(element.asElement2!);
5353
}
5454
sendResult(result);
5555
// search elements

pkg/analysis_server/lib/src/protocol_server.dart

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import 'package:analyzer/error/error.dart' as engine;
2121
import 'package:analyzer/source/error_processor.dart';
2222
import 'package:analyzer/source/source.dart' as engine;
2323
import 'package:analyzer/source/source_range.dart' as engine;
24+
import 'package:analyzer/src/dart/element/element.dart';
2425
import 'package:analyzer/src/utilities/extensions/element.dart';
2526
import 'package:analyzer_plugin/protocol/protocol_common.dart';
2627

@@ -333,6 +334,21 @@ Location? newLocation_fromElement2(engine.Element2? element) {
333334
return _locationForArgs2(fragment, range);
334335
}
335336

337+
/// Creates a location based on the [fragment].
338+
Location? newLocation_fromFragment(engine.Fragment? fragment) {
339+
if (fragment == null) {
340+
return null;
341+
}
342+
if (fragment is engine.FormalParameterFragment &&
343+
fragment.enclosingFragment == null) {
344+
return null;
345+
}
346+
var offset = fragment.nameOffset2 ?? 0;
347+
var length = fragment.name2?.length ?? 0;
348+
var range = engine.SourceRange(offset, length);
349+
return _locationForArgs2(fragment, range);
350+
}
351+
336352
/// Create a Location based on an [engine.SearchMatch].
337353
Location newLocation_fromMatch(engine.SearchMatch match) {
338354
var unitElement = _getUnitElement(match.element2.asElement!);
@@ -423,10 +439,12 @@ List<Element> _computePath(engine.Element element) {
423439
if (element2 != null) {
424440
for (var fragment in element2.firstFragment.withAncestors) {
425441
if (fragment case engine.Element e) {
426-
path.add(convertElement(e));
427442
if (fragment is engine.LibraryFragment) {
428-
path.add(convertElement2(fragment.element));
443+
path.add(
444+
convertLibraryFragment(fragment as CompilationUnitElementImpl),
445+
);
429446
}
447+
path.add(convertElement2(e.asElement2!));
430448
}
431449
}
432450
}

pkg/analysis_server/test/plugin/protocol_dart_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,9 @@ class A {
133133
}
134134

135135
void test_dynamic() {
136-
var engineElement = engine.DynamicElementImpl.instance;
136+
var engineElement = engine.DynamicElementImpl2.instance;
137137
// create notification Element
138-
var element = convertElement(engineElement);
138+
var element = convertElement2(engineElement);
139139
expect(element.kind, ElementKind.UNKNOWN);
140140
expect(element.name, 'dynamic');
141141
expect(element.location, isNull);

pkg/analysis_server/test/search/element_references_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ enum E {
402402
E(this.fff); // 02
403403
E.named() : fff = 0; // 03
404404
void foo() {
405-
fff = 0; // 04
405+
fff = 0; // 04
406406
fff += 0; // 05
407407
fff; // 06
408408
fff(); // 07

0 commit comments

Comments
 (0)