Skip to content

Commit 7d45894

Browse files
pqCommit Queue
authored andcommitted
[element model] migrate correct_override
Change-Id: I481b0abfd8bd7c1e09dcde649b88291dc2f26002 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/410642 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Phil Quitslund <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 8f79645 commit 7d45894

File tree

4 files changed

+71
-76
lines changed

4 files changed

+71
-76
lines changed

pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,8 @@ class DiagnosticFactory {
295295
Source source,
296296
ErrorCode errorCode,
297297
SyntacticEntity errorNode,
298-
ExecutableElement member,
299-
ExecutableElement superMember,
298+
ExecutableElement2 member,
299+
ExecutableElement2 superMember,
300300
String memberName) {
301301
// Elements enclosing members that can participate in overrides are always
302302
// named, so we can safely assume `_thisMember.enclosingElement3.name` and
@@ -308,9 +308,9 @@ class DiagnosticFactory {
308308
errorCode: errorCode,
309309
arguments: [
310310
memberName,
311-
member.enclosingElement3.name!,
311+
member.enclosingElement2!.name3,
312312
member.type,
313-
superMember.enclosingElement3.name!,
313+
superMember.enclosingElement2!.name3,
314314
superMember.type,
315315
],
316316
contextMessages: [
@@ -321,18 +321,18 @@ class DiagnosticFactory {
321321
// concrete).
322322
if (errorCode == CompileTimeErrorCode.INVALID_OVERRIDE)
323323
DiagnosticMessageImpl(
324-
filePath: superMember.source.fullName,
324+
filePath: superMember.asElement.source.fullName,
325325
message: "The member being overridden.",
326-
offset: superMember.nonSynthetic.nameOffset,
327-
length: superMember.nonSynthetic.nameLength,
326+
offset: superMember.asElement.nonSynthetic.nameOffset,
327+
length: superMember.asElement.nonSynthetic.nameLength,
328328
url: null,
329329
),
330330
if (errorCode == CompileTimeErrorCode.INVALID_OVERRIDE_SETTER)
331331
DiagnosticMessageImpl(
332-
filePath: superMember.source.fullName,
332+
filePath: superMember.asElement.source.fullName,
333333
message: "The setter being overridden.",
334-
offset: superMember.nonSynthetic.nameOffset,
335-
length: superMember.nonSynthetic.nameLength,
334+
offset: superMember.asElement.nonSynthetic.nameOffset,
335+
length: superMember.asElement.nonSynthetic.nameLength,
336336
url: null,
337337
)
338338
],

pkg/analyzer/lib/src/error/correct_override.dart

Lines changed: 54 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
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
import 'package:analyzer/dart/ast/syntactic_entity.dart';
8-
import 'package:analyzer/dart/element/element.dart';
6+
import 'package:analyzer/dart/element/element2.dart';
97
import 'package:analyzer/dart/element/nullability_suffix.dart';
108
import 'package:analyzer/dart/element/type.dart';
119
import 'package:analyzer/error/error.dart';
@@ -18,27 +16,26 @@ import 'package:analyzer/src/dart/element/type_algebra.dart';
1816
import 'package:analyzer/src/dart/element/type_system.dart';
1917
import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
2018
import 'package:analyzer/src/error/codes.dart';
21-
import 'package:analyzer/src/utilities/extensions/element.dart';
2219

2320
class CorrectOverrideHelper {
2421
final TypeSystemImpl _typeSystem;
2522

26-
final ExecutableElement _thisMember;
23+
final ExecutableElement2 _thisMember;
2724
FunctionType? _thisTypeForSubtype;
2825

2926
final DiagnosticFactory _diagnosticFactory = DiagnosticFactory();
3027

3128
CorrectOverrideHelper({
3229
required TypeSystemImpl typeSystem,
33-
required ExecutableElement thisMember,
30+
required ExecutableElement2 thisMember,
3431
}) : _typeSystem = typeSystem,
3532
_thisMember = thisMember {
3633
_computeThisTypeForSubtype();
3734
}
3835

3936
/// Return `true` if [_thisMember] is a correct override of [superMember].
4037
bool isCorrectOverrideOf({
41-
required ExecutableElement superMember,
38+
required ExecutableElement2 superMember,
4239
}) {
4340
var superType = superMember.type;
4441
return _typeSystem.isSubtypeOf(_thisTypeForSubtype!, superType);
@@ -47,36 +44,35 @@ class CorrectOverrideHelper {
4744
/// If [_thisMember] is not a correct override of [superMember], report the
4845
/// error.
4946
void verify({
50-
required ExecutableElement superMember,
47+
required ExecutableElement2 superMember,
5148
required ErrorReporter errorReporter,
5249
required SyntacticEntity errorNode,
5350
required ErrorCode errorCode,
5451
}) {
5552
var isCorrect = isCorrectOverrideOf(superMember: superMember);
5653
if (!isCorrect) {
5754
var member = _thisMember;
58-
var memberName = member.name;
59-
if (member is PropertyAccessorElement && member.isSetter) {
60-
memberName = memberName.substring(0, memberName.length - 1);
55+
var memberName = member.name3;
56+
if (memberName != null) {
57+
errorReporter.reportError(_diagnosticFactory.invalidOverride(
58+
errorReporter.source,
59+
errorCode,
60+
errorNode,
61+
_thisMember,
62+
superMember,
63+
memberName,
64+
));
6165
}
62-
errorReporter.reportError(_diagnosticFactory.invalidOverride(
63-
errorReporter.source,
64-
errorCode,
65-
errorNode,
66-
_thisMember,
67-
superMember,
68-
memberName,
69-
));
7066
}
7167
}
7268

7369
/// Fill [_thisTypeForSubtype]. If [_thisMember] has covariant formal
7470
/// parameters, replace their types with `Object?` or `Object`.
7571
void _computeThisTypeForSubtype() {
7672
var type = _thisMember.type;
77-
var parameters = type.parameters;
73+
var parameters = type.formalParameters;
7874

79-
List<ParameterElement>? newParameters;
75+
List<FormalParameterElement>? newParameters;
8076
for (var i = 0; i < parameters.length; i++) {
8177
var parameter = parameters[i];
8278
if (parameter.isCovariant) {
@@ -88,9 +84,9 @@ class CorrectOverrideHelper {
8884
}
8985

9086
if (newParameters != null) {
91-
_thisTypeForSubtype = FunctionTypeImpl(
92-
typeFormals: type.typeFormals,
93-
parameters: newParameters,
87+
_thisTypeForSubtype = FunctionTypeImpl.v2(
88+
typeParameters: type.typeParameters,
89+
formalParameters: newParameters,
9490
returnType: type.returnType,
9591
nullabilitySuffix: type.nullabilitySuffix,
9692
);
@@ -104,12 +100,12 @@ class CovariantParametersVerifier {
104100
final AnalysisSessionImpl _session;
105101
final TypeSystemImpl _typeSystem;
106102

107-
final ExecutableElement _thisMember;
103+
final ExecutableElement2 _thisMember;
108104

109105
CovariantParametersVerifier({
110-
required ExecutableElement thisMember,
111-
}) : _session = thisMember.library.session as AnalysisSessionImpl,
112-
_typeSystem = thisMember.library.typeSystem as TypeSystemImpl,
106+
required ExecutableElement2 thisMember,
107+
}) : _session = thisMember.library2.session as AnalysisSessionImpl,
108+
_typeSystem = thisMember.library2.typeSystem as TypeSystemImpl,
113109
_thisMember = thisMember;
114110

115111
void verify({
@@ -133,10 +129,10 @@ class CovariantParametersVerifier {
133129
errorEntity,
134130
CompileTimeErrorCode.INVALID_OVERRIDE,
135131
arguments: [
136-
_thisMember.name,
137-
_thisMember.enclosingElement3.name!,
132+
_thisMember.name3!,
133+
_thisMember.enclosingElement2!.name3!,
138134
_thisMember.type,
139-
superMember.enclosingElement3.name!,
135+
superMember.enclosingElement2!.name3!,
140136
superMember.type,
141137
],
142138
);
@@ -147,13 +143,12 @@ class CovariantParametersVerifier {
147143

148144
List<_SuperMember> _superMembers() {
149145
var classHierarchy = _session.classHierarchy;
150-
var classElement = _thisMember.enclosingElement3 as InterfaceElementImpl;
151-
var interfaces =
152-
classHierarchy.implementedInterfaces(classElement.asElement2);
146+
var classElement = _thisMember.enclosingElement2 as InterfaceElementImpl2;
147+
var interfaces = classHierarchy.implementedInterfaces(classElement);
153148

154149
var superMembers = <_SuperMember>[];
155150
for (var interface in interfaces) {
156-
var superMember = _correspondingMember(interface.element, _thisMember);
151+
var superMember = _correspondingMember(interface.element3, _thisMember);
157152
if (superMember != null) {
158153
superMembers.add(
159154
_SuperMember(interface, superMember),
@@ -164,18 +159,18 @@ class CovariantParametersVerifier {
164159
return superMembers;
165160
}
166161

167-
Map<ParameterElement, List<_SuperParameter>> _superParameters() {
168-
var result = <ParameterElement, List<_SuperParameter>>{};
162+
Map<FormalParameterElement, List<_SuperParameter>> _superParameters() {
163+
var result = <FormalParameterElement, List<_SuperParameter>>{};
169164

170165
List<_SuperMember>? superMembers;
171-
var parameters = _thisMember.parameters;
166+
var parameters = _thisMember.formalParameters;
172167
for (var i = 0; i < parameters.length; i++) {
173168
var parameter = parameters[i];
174169
if (parameter.isCovariant) {
175170
superMembers ??= _superMembers();
176171
for (var superMember in superMembers) {
177172
var superParameter = _correspondingParameter(
178-
superMember.rawElement.parameters,
173+
superMember.rawElement.formalParameters,
179174
parameter,
180175
i,
181176
);
@@ -200,11 +195,11 @@ class CovariantParametersVerifier {
200195
Substitution result = Substitution.fromInterfaceType(superMember.interface);
201196

202197
// If the executable has type parameters, ensure that super uses the same.
203-
var thisTypeParameters = _thisMember.typeParameters;
198+
var thisTypeParameters = _thisMember.typeParameters2;
204199
if (thisTypeParameters.isNotEmpty) {
205-
var superTypeParameters = superMember.rawElement.typeParameters;
200+
var superTypeParameters = superMember.rawElement.typeParameters2;
206201
if (thisTypeParameters.length == superTypeParameters.length) {
207-
var typeParametersSubstitution = Substitution.fromPairs(
202+
var typeParametersSubstitution = Substitution.fromPairs2(
208203
superTypeParameters,
209204
thisTypeParameters.map((e) {
210205
return e.instantiate(
@@ -221,27 +216,27 @@ class CovariantParametersVerifier {
221216

222217
/// Return a member from [classElement] that corresponds to the [proto],
223218
/// or `null` if no such member exist.
224-
static ExecutableElement? _correspondingMember(
225-
InterfaceElement classElement,
226-
ExecutableElement proto,
219+
static ExecutableElement2? _correspondingMember(
220+
InterfaceElement2 classElement,
221+
ExecutableElement2 proto,
227222
) {
228-
if (proto is MethodElement) {
229-
return classElement.getMethod(proto.displayName);
223+
if (proto is MethodElement2) {
224+
return classElement.getMethod2(proto.displayName);
230225
}
231-
if (proto is PropertyAccessorElement) {
232-
if (proto.isGetter) {
233-
return classElement.getGetter(proto.displayName);
226+
if (proto is PropertyAccessorElement2) {
227+
if (proto is GetterElement) {
228+
return classElement.getGetter2(proto.displayName);
234229
}
235-
return classElement.getSetter(proto.displayName);
230+
return classElement.getSetter2(proto.displayName);
236231
}
237232
return null;
238233
}
239234

240235
/// Return an element of [parameters] that corresponds for the [proto],
241236
/// or `null` if no such parameter exist.
242-
static ParameterElement? _correspondingParameter(
243-
List<ParameterElement> parameters,
244-
ParameterElement proto,
237+
static FormalParameterElement? _correspondingParameter(
238+
List<FormalParameterElement> parameters,
239+
FormalParameterElement proto,
245240
int protoIndex,
246241
) {
247242
if (proto.isPositional) {
@@ -254,7 +249,7 @@ class CovariantParametersVerifier {
254249
} else {
255250
assert(proto.isNamed);
256251
for (var parameter in parameters) {
257-
if (parameter.isNamed && parameter.name == proto.name) {
252+
if (parameter.isNamed && parameter.name3 == proto.name3) {
258253
return parameter;
259254
}
260255
}
@@ -265,17 +260,17 @@ class CovariantParametersVerifier {
265260

266261
class _SuperMember {
267262
final InterfaceType interface;
268-
final ExecutableElement rawElement;
263+
final ExecutableElement2 rawElement;
269264

270265
_SuperMember(this.interface, this.rawElement);
271266
}
272267

273268
class _SuperParameter {
274-
final ParameterElement element;
269+
final FormalParameterElement element;
275270
final DartType type;
276271

277272
_SuperParameter(this.element, this.type);
278273

279-
ExecutableElement get member =>
280-
element.enclosingElement3 as ExecutableElement;
274+
ExecutableElement2 get member =>
275+
element.enclosingElement2 as ExecutableElement2;
281276
}

pkg/analyzer/lib/src/error/inheritance_override.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,9 @@ class _ClassVerifier {
351351
// overriding method. The classNameNode is always wrong.
352352
CorrectOverrideHelper(
353353
typeSystem: typeSystem,
354-
thisMember: concreteElement,
354+
thisMember: concreteElement.asElement2,
355355
).verify(
356-
superMember: interfaceElement,
356+
superMember: interfaceElement.asElement2,
357357
errorReporter: reporter,
358358
errorNode: classNameToken,
359359
errorCode: concreteElement is PropertyAccessorElementOrMember &&
@@ -385,7 +385,7 @@ class _ClassVerifier {
385385
var name = Name(libraryUri, member.name);
386386
var correctOverrideHelper = CorrectOverrideHelper(
387387
typeSystem: typeSystem,
388-
thisMember: member,
388+
thisMember: member.asElement2,
389389
);
390390

391391
for (var superType in directSuperInterfaces) {
@@ -405,7 +405,7 @@ class _ClassVerifier {
405405
}
406406

407407
correctOverrideHelper.verify(
408-
superMember: superMember,
408+
superMember: superMember.asElement2,
409409
errorReporter: reporter,
410410
errorNode: node,
411411
errorCode: member is PropertyAccessorElement && member.isSetter
@@ -414,7 +414,7 @@ class _ClassVerifier {
414414
}
415415

416416
if (mixinIndex == -1) {
417-
CovariantParametersVerifier(thisMember: member).verify(
417+
CovariantParametersVerifier(thisMember: member.asElement2).verify(
418418
errorReporter: reporter,
419419
errorEntity: node,
420420
);

pkg/analyzer/lib/src/generated/error_verifier.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4511,9 +4511,9 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
45114511
if (mixinMember != null) {
45124512
var isCorrect = CorrectOverrideHelper(
45134513
typeSystem: typeSystem,
4514-
thisMember: superMember,
4514+
thisMember: superMember.asElement2,
45154515
).isCorrectOverrideOf(
4516-
superMember: mixinMember,
4516+
superMember: mixinMember.asElement2,
45174517
);
45184518
if (!isCorrect) {
45194519
errorReporter.atNode(

0 commit comments

Comments
 (0)