Skip to content

Commit 15cdbc5

Browse files
bwilkersonCommit Queue
authored andcommitted
Migrate five correction producers
Change-Id: I3289e0862797947fadf76d78a2ce27c0cf249dd2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394321 Commit-Queue: Brian Wilkerson <[email protected]> Reviewed-by: Phil Quitslund <[email protected]>
1 parent 25f8cc5 commit 15cdbc5

File tree

15 files changed

+153
-53
lines changed

15 files changed

+153
-53
lines changed

pkg/analysis_server/analyzer_use_new_elements.txt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,7 @@ lib/src/services/completion/postfix/postfix_completion.dart
5151
lib/src/services/completion/statement/statement_completion.dart
5252
lib/src/services/correction/bulk_fix_processor.dart
5353
lib/src/services/correction/dart/add_extension_override.dart
54-
lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
55-
lib/src/services/correction/dart/add_super_constructor_invocation.dart
56-
lib/src/services/correction/dart/convert_to_if_case_statement.dart
57-
lib/src/services/correction/dart/create_constructor_super.dart
5854
lib/src/services/correction/dart/create_extension_member.dart
59-
lib/src/services/correction/dart/create_missing_overrides.dart
6055
lib/src/services/correction/dart/import_library.dart
6156
lib/src/services/correction/dart/use_different_division_operator.dart
6257
lib/src/services/correction/fix/data_driven/element_matcher.dart

pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class AddMissingEnumCaseClauses extends ResolvedCorrectionProducer {
127127
var shortestPrefix = '';
128128
for (var directive in unit.directives) {
129129
if (directive is ImportDirective) {
130-
var namespace = directive.element?.namespace;
130+
var namespace = directive.libraryImport?.namespace;
131131
if (namespace != null) {
132132
if (namespace.definedNames2.containsValue(element)) {
133133
var prefix = directive.prefix?.name;

pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
import 'package:analysis_server/src/services/correction/fix.dart';
66
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
77
import 'package:analyzer/dart/ast/ast.dart';
8-
import 'package:analyzer/dart/element/element.dart';
8+
import 'package:analyzer/dart/element/element2.dart';
99
import 'package:analyzer/dart/element/type.dart';
10-
import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
1110
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
1211
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
1312

@@ -26,8 +25,8 @@ class AddSuperConstructorInvocation extends MultiCorrectionProducer {
2625
return const [];
2726
}
2827

29-
var targetClassElement = targetClassNode.declaredElement!;
30-
var superType = targetClassElement.supertype;
28+
var targetClassElement = targetClassNode.declaredFragment?.element;
29+
var superType = targetClassElement?.supertype;
3130
if (superType == null) {
3231
return const [];
3332
}
@@ -44,9 +43,10 @@ class AddSuperConstructorInvocation extends MultiCorrectionProducer {
4443
prefix = ', ';
4544
}
4645
var producers = <ResolvedCorrectionProducer>[];
47-
for (var constructor in superType.constructors) {
46+
for (var constructor in superType.constructors2) {
4847
// Only propose public constructors.
49-
if (!Identifier.isPrivateName(constructor.name)) {
48+
var name = constructor.name3;
49+
if (name != null && !Identifier.isPrivateName(name)) {
5050
producers.add(
5151
_AddInvocation(constructor, insertOffset, prefix, context: context),
5252
);
@@ -60,7 +60,7 @@ class AddSuperConstructorInvocation extends MultiCorrectionProducer {
6060
/// the [AddSuperConstructorInvocation] producer.
6161
class _AddInvocation extends ResolvedCorrectionProducer {
6262
/// The constructor to be invoked.
63-
final ConstructorElement _constructor;
63+
final ConstructorElement2 _constructor;
6464

6565
/// The offset at which the initializer is to be inserted.
6666
final int _insertOffset;
@@ -85,8 +85,8 @@ class _AddInvocation extends ResolvedCorrectionProducer {
8585
List<String> get fixArguments {
8686
var buffer = StringBuffer();
8787
buffer.write('super');
88-
var constructorName = _constructor.name;
89-
if (constructorName.isNotEmpty) {
88+
var constructorName = _constructor.name3;
89+
if (constructorName != null && constructorName != 'new') {
9090
buffer.write('.');
9191
buffer.write(constructorName);
9292
}
@@ -99,20 +99,24 @@ class _AddInvocation extends ResolvedCorrectionProducer {
9999

100100
@override
101101
Future<void> compute(ChangeBuilder builder) async {
102-
var constructorName = _constructor.name;
102+
var constructorName = _constructor.name3;
103+
if (constructorName == null ||
104+
_constructor.formalParameters.any((p) => p.name3 == null)) {
105+
return;
106+
}
103107
await builder.addDartFileEdit(file, (builder) {
104108
builder.addInsertion(_insertOffset, (builder) {
105109
builder.write(_prefix);
106110
// add super constructor name
107111
builder.write('super');
108-
if (!isEmpty(constructorName)) {
112+
if (constructorName != 'new') {
109113
builder.write('.');
110114
builder.addSimpleLinkedEdit('NAME', constructorName);
111115
}
112116
// add arguments
113117
builder.write('(');
114118
var firstParameter = true;
115-
for (var parameter in _constructor.parameters) {
119+
for (var parameter in _constructor.formalParameters) {
116120
// skip non-required parameters
117121
if (parameter.isOptional) {
118122
break;
@@ -125,11 +129,11 @@ class _AddInvocation extends ResolvedCorrectionProducer {
125129
}
126130

127131
if (parameter.isNamed) {
128-
builder.write('${parameter.name}: ');
132+
builder.write('${parameter.name3}: ');
129133
}
130134
// A default value to pass as an argument.
131135
builder.addSimpleLinkedEdit(
132-
parameter.name,
136+
parameter.name3!,
133137
parameter.type.defaultArgumentCode,
134138
);
135139
}

pkg/analysis_server/lib/src/services/correction/dart/convert_to_if_case_statement.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ConvertToIfCaseStatement extends ResolvedCorrectionProducer {
2727

2828
@override
2929
Future<void> compute(ChangeBuilder builder) async {
30-
if (!libraryElement.featureSet.isEnabled(Feature.patterns)) {
30+
if (!libraryElement2.featureSet.isEnabled(Feature.patterns)) {
3131
return;
3232
}
3333

pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import 'package:analysis_server/src/services/correction/fix.dart';
66
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
77
import 'package:analyzer/dart/analysis/features.dart';
88
import 'package:analyzer/dart/ast/ast.dart';
9-
import 'package:analyzer/dart/element/element.dart';
9+
import 'package:analyzer/dart/element/element2.dart';
1010
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
1111
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
1212

@@ -20,17 +20,18 @@ class CreateConstructorSuper extends MultiCorrectionProducer {
2020
return const [];
2121
}
2222

23-
var targetClassElement = targetClassNode.declaredElement!;
24-
var superType = targetClassElement.supertype;
23+
var targetClassElement = targetClassNode.declaredFragment?.element;
24+
var superType = targetClassElement?.supertype;
2525
if (superType == null) {
2626
return const [];
2727
}
2828

2929
var producers = <ResolvedCorrectionProducer>[];
3030
// add proposals for all super constructors
31-
for (var constructor in superType.constructors) {
31+
for (var constructor in superType.constructors2) {
3232
// Only propose public constructors.
33-
if (!Identifier.isPrivateName(constructor.name)) {
33+
var name = constructor.name3;
34+
if (name != null && !Identifier.isPrivateName(name)) {
3435
producers.add(
3536
_CreateConstructor(constructor, targetClassNode, context: context),
3637
);
@@ -44,7 +45,7 @@ class CreateConstructorSuper extends MultiCorrectionProducer {
4445
/// the [CreateConstructorSuper] producer.
4546
class _CreateConstructor extends ResolvedCorrectionProducer {
4647
/// The constructor to be invoked.
47-
final ConstructorElement _constructor;
48+
final ConstructorElement2 _constructor;
4849

4950
/// The class in which the constructor will be added.
5051
final ClassDeclaration _targetClass;
@@ -65,17 +66,17 @@ class _CreateConstructor extends ResolvedCorrectionProducer {
6566
List<String> get fixArguments {
6667
var buffer = StringBuffer();
6768
buffer.write('super');
68-
var constructorName = _constructor.name;
69-
if (libraryElement.featureSet.isEnabled(Feature.super_parameters)) {
70-
if (constructorName.isNotEmpty) {
69+
var constructorName = _constructor.name3;
70+
if (libraryElement2.featureSet.isEnabled(Feature.super_parameters)) {
71+
if (constructorName != null && constructorName != 'new') {
7172
buffer.write('.');
7273
buffer.write(constructorName);
7374
buffer.write('()');
7475
} else {
7576
buffer.write('.');
7677
}
7778
} else {
78-
if (constructorName.isNotEmpty) {
79+
if (constructorName != null && constructorName != 'new') {
7980
buffer.write('.');
8081
buffer.write(constructorName);
8182
}
@@ -89,27 +90,27 @@ class _CreateConstructor extends ResolvedCorrectionProducer {
8990

9091
@override
9192
Future<void> compute(ChangeBuilder builder) async {
92-
if (libraryElement.featureSet.isEnabled(Feature.super_parameters)) {
93+
if (libraryElement2.featureSet.isEnabled(Feature.super_parameters)) {
9394
await _computeWithSuperParameters(builder);
9495
} else {
9596
await _computeWithoutSuperParameters(builder);
9697
}
9798
}
9899

99100
Future<void> _computeWithoutSuperParameters(ChangeBuilder builder) async {
100-
var constructorName = _constructor.name;
101-
var requiredPositionalParameters = _constructor.parameters.where(
101+
var constructorName = _constructor.name3;
102+
var requiredPositionalParameters = _constructor.formalParameters.where(
102103
(parameter) => parameter.isRequiredPositional,
103104
);
104-
var requiredNamedParameters = _constructor.parameters.where(
105+
var requiredNamedParameters = _constructor.formalParameters.where(
105106
(parameter) => parameter.isRequiredNamed,
106107
);
107108
await builder.addDartFileEdit(file, (builder) {
108109
builder.insertConstructor(_targetClass, (builder) {
109110
// TODO(srawlins): Replace this block with `writeConstructorDeclaration`
110111
// and `parameterWriter`.
111112
void writeParameters(bool isDefinition) {
112-
void writeParameter(ParameterElement parameter) {
113+
void writeParameter(FormalParameterElement parameter) {
113114
var parameterName = parameter.displayName;
114115
var includeType = isDefinition;
115116
var includeRequired = isDefinition && parameter.isRequiredNamed;
@@ -161,14 +162,14 @@ class _CreateConstructor extends ResolvedCorrectionProducer {
161162
}
162163

163164
builder.write(_targetClass.name.lexeme);
164-
if (constructorName.isNotEmpty) {
165+
if (constructorName != null && constructorName != 'new') {
165166
builder.write('.');
166167
builder.addSimpleLinkedEdit('NAME', constructorName);
167168
}
168169
builder.write('(');
169170
writeParameters(true);
170171
builder.write(') : super');
171-
if (constructorName.isNotEmpty) {
172+
if (constructorName != null && constructorName != 'new') {
172173
builder.write('.');
173174
builder.addSimpleLinkedEdit('NAME', constructorName);
174175
}
@@ -180,18 +181,18 @@ class _CreateConstructor extends ResolvedCorrectionProducer {
180181
}
181182

182183
Future<void> _computeWithSuperParameters(ChangeBuilder builder) async {
183-
var constructorName = _constructor.name;
184-
var requiredPositionalParameters = _constructor.parameters.where(
184+
var constructorName = _constructor.name3;
185+
var requiredPositionalParameters = _constructor.formalParameters.where(
185186
(parameter) => parameter.isRequiredPositional,
186187
);
187-
var requiredNamedParameters = _constructor.parameters.where(
188+
var requiredNamedParameters = _constructor.formalParameters.where(
188189
(parameter) => parameter.isRequiredNamed,
189190
);
190191
await builder.addDartFileEdit(file, (builder) {
191192
builder.insertConstructor(_targetClass, (builder) {
192193
// TODO(srawlins): Replace this block with `writeConstructorDeclaration`
193194
// and `parameterWriter`.
194-
void writeParameter(ParameterElement parameter) {
195+
void writeParameter(FormalParameterElement parameter) {
195196
var parameterName = parameter.displayName;
196197

197198
if (parameterName.length > 1 && parameterName.startsWith('_')) {
@@ -207,7 +208,7 @@ class _CreateConstructor extends ResolvedCorrectionProducer {
207208
}
208209

209210
builder.write(_targetClass.name.lexeme);
210-
if (constructorName.isNotEmpty) {
211+
if (constructorName != null && constructorName != 'new') {
211212
builder.write('.');
212213
builder.addSimpleLinkedEdit('NAME', constructorName);
213214
}
@@ -237,7 +238,7 @@ class _CreateConstructor extends ResolvedCorrectionProducer {
237238
builder.write('}');
238239
}
239240

240-
if (constructorName.isNotEmpty) {
241+
if (constructorName != null && constructorName != 'new') {
241242
builder.write(') : super.');
242243
builder.addSimpleLinkedEdit('NAME', constructorName);
243244
builder.write('(');

pkg/analysis_server/lib/src/services/correction/dart/create_missing_overrides.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:analysis_server/src/utilities/strings.dart';
77
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
88
import 'package:analyzer/dart/ast/ast.dart';
99
import 'package:analyzer/dart/ast/token.dart';
10-
import 'package:analyzer/dart/element/element.dart';
10+
import 'package:analyzer/dart/element/element2.dart';
1111
import 'package:analyzer/src/error/inheritance_override.dart';
1212
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
1313
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -43,11 +43,13 @@ class CreateMissingOverrides extends ResolvedCorrectionProducer {
4343
return;
4444
}
4545
var signatures = [
46-
...InheritanceOverrideVerifier.missingOverrides(targetDeclaration),
47-
...InheritanceOverrideVerifier.missingMustBeOverridden(targetDeclaration),
46+
...InheritanceOverrideVerifier.missingOverrides2(targetDeclaration),
47+
...InheritanceOverrideVerifier.missingMustBeOverridden2(
48+
targetDeclaration,
49+
),
4850
];
4951
// Sort by name, getters before setters.
50-
signatures.sort((ExecutableElement a, ExecutableElement b) {
52+
signatures.sort((ExecutableElement2 a, ExecutableElement2 b) {
5153
var names = compareStrings(a.displayName, b.displayName);
5254
if (names != 0) {
5355
return names;
@@ -102,7 +104,7 @@ class CreateMissingOverrides extends ResolvedCorrectionProducer {
102104
}
103105
builder.writeType(element.returnType, required: true);
104106
builder.write(' ');
105-
builder.write(element.name);
107+
builder.write(element.name3 ?? '');
106108
builder.write(';');
107109
}
108110
}
@@ -112,7 +114,7 @@ class CreateMissingOverrides extends ResolvedCorrectionProducer {
112114
addSeparatorBetweenDeclarations();
113115
// When only 1 override is being added, we delegate the
114116
// selection-setting to `builder.writeOverride`.
115-
builder.writeOverride(element, setSelection: _numElements == 1);
117+
builder.writeOverride2(element, setSelection: _numElements == 1);
116118
}
117119
});
118120
});

pkg/analysis_server/lib/src/services/correction/namespace.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
import 'package:analyzer/dart/ast/ast.dart';
66
import 'package:analyzer/dart/element/element.dart';
7+
import 'package:analyzer/dart/element/element2.dart';
78
import 'package:analyzer/src/dart/resolver/scope.dart';
9+
import 'package:analyzer/src/utilities/extensions/element.dart';
810

911
/// Returns the [Element] exported from the given [LibraryElement].
1012
Element? getExportedElement(LibraryElement? library, String name) {
@@ -14,6 +16,16 @@ Element? getExportedElement(LibraryElement? library, String name) {
1416
return _getExportNamespaceForLibrary(library)[name];
1517
}
1618

19+
/// Returns the [Element] exported from the given [LibraryElement].
20+
Element2? getExportedElement2(LibraryElement2? library, String name) {
21+
if (library == null) {
22+
return null;
23+
}
24+
return _getExportNamespaceForLibrary(
25+
library as LibraryElement,
26+
)[name].asElement2;
27+
}
28+
1729
/// Return the [LibraryImportElement] that is referenced by [prefixNode], or
1830
/// `null` if the node does not reference a prefix or if we cannot determine
1931
/// which import is being referenced.

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ extension LibraryElementExtensions on LibraryElement {
100100
}
101101
}
102102

103+
extension LibraryElementExtensions2 on LibraryElement2 {
104+
/// Return all extensions exported from this library.
105+
Iterable<ExtensionElement> get exportedExtensions {
106+
return exportNamespace.definedNames.values.whereType();
107+
}
108+
}
109+
103110
extension MethodElementExtensions on MethodElement {
104111
/// Return `true` if this element represents the method `cast` from either
105112
/// `Iterable`, `List`, `Map`, or `Set`.

pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,4 +785,10 @@ sealed class _AbstractCorrectionProducer<T extends ParsedUnitResult> {
785785
Stream<LibraryElement> librariesWithExtensions(String memberName) {
786786
return _context.dartFixContext!.librariesWithExtensions(memberName);
787787
}
788+
789+
/// Returns libraries with extensions that declare non-static public
790+
/// extension members with the [memberName].
791+
Stream<LibraryElement2> librariesWithExtensions2(String memberName) {
792+
return _context.dartFixContext!.librariesWithExtensions2(memberName);
793+
}
788794
}

0 commit comments

Comments
 (0)