Skip to content

Commit de339e1

Browse files
bwilkersonCommit Queue
authored andcommitted
[migrate] instance_member_inferrer.dart
Change-Id: Icaee3515becbf9fd1e7106c97b1ad8f535df597b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/417106 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent b8e4feb commit de339e1

File tree

2 files changed

+54
-44
lines changed

2 files changed

+54
-44
lines changed

pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
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-
7-
import 'package:analyzer/dart/element/element.dart';
85
import 'package:analyzer/dart/element/type.dart';
96
import 'package:analyzer/src/dart/ast/ast.dart';
107
import 'package:analyzer/src/dart/element/element.dart';
@@ -20,7 +17,7 @@ import 'package:collection/collection.dart';
2017
/// instance methods within a single compilation unit.
2118
class InstanceMemberInferrer {
2219
final InheritanceManager3 inheritance;
23-
final Set<InterfaceElement> elementsBeingInferred = {};
20+
final Set<InterfaceElementImpl> elementsBeingInferred = {};
2421

2522
late InterfaceElementImpl currentInterfaceElement;
2623

@@ -39,7 +36,7 @@ class InstanceMemberInferrer {
3936
/// Return `true` if the elements corresponding to the [elements] have the
4037
/// same kind as the [element].
4138
bool _allSameElementKind(
42-
ExecutableElement element, List<ExecutableElement> elements) {
39+
ExecutableElementImpl element, List<ExecutableElementImpl> elements) {
4340
var elementKind = element.kind;
4441
for (int i = 0; i < elements.length; i++) {
4542
if (elements[i].kind != elementKind) {
@@ -194,7 +191,7 @@ class InstanceMemberInferrer {
194191
}
195192
var parameter = parameters[0];
196193

197-
if (overriddenSetters.any(_isCovariantSetter)) {
194+
if (overriddenSetters.any((s) => _isCovariantSetter(s.declarationImpl))) {
198195
parameter.inheritsCovariant = true;
199196
}
200197

@@ -229,7 +226,8 @@ class InstanceMemberInferrer {
229226

230227
if (field != null) {
231228
if (field.setter != null) {
232-
if (overriddenSetters.any(_isCovariantSetter)) {
229+
if (overriddenSetters
230+
.any((s) => _isCovariantSetter(s.declarationImpl))) {
233231
var parameter = field.setter!.parameters[0];
234232
parameter.inheritsCovariant = true;
235233
}
@@ -365,8 +363,7 @@ class InstanceMemberInferrer {
365363
}
366364
}
367365

368-
void _inferConstructor(ConstructorElement constructor) {
369-
constructor as ConstructorElementImpl;
366+
void _inferConstructor(ConstructorElementImpl constructor) {
370367
for (var parameter in constructor.parameters) {
371368
if (parameter.hasImplicitType) {
372369
if (parameter is FieldFormalParameterElementImpl) {
@@ -405,7 +402,8 @@ class InstanceMemberInferrer {
405402
name,
406403
);
407404
if (overriddenElements == null ||
408-
!_allSameElementKind(element, overriddenElements)) {
405+
!_allSameElementKind(element,
406+
overriddenElements.map((e) => e.declarationImpl).toList())) {
409407
return;
410408
}
411409

@@ -433,7 +431,7 @@ class InstanceMemberInferrer {
433431
var conflict = conflicts.single;
434432
if (conflict is CandidatesConflict) {
435433
conflictExplanation = conflict.candidates.map((candidate) {
436-
var className = candidate.enclosingElement3.name;
434+
var className = candidate.enclosingElementImpl.name;
437435
var typeStr = candidate.type.getDisplayString();
438436
return '$className.${name.name} ($typeStr)';
439437
}).join(', ');
@@ -461,19 +459,18 @@ class InstanceMemberInferrer {
461459
//
462460
// Infer the parameter types.
463461
//
464-
List<ParameterElement> parameters = element.parameters;
462+
var parameters = element.parameters;
465463
for (var index = 0; index < parameters.length; index++) {
466-
ParameterElement parameter = parameters[index];
467-
if (parameter is ParameterElementImpl) {
468-
_inferParameterCovariance(parameter, index, overriddenElements);
464+
var parameter = parameters[index];
465+
_inferParameterCovariance(parameter, index, overriddenElements);
469466

470-
if (parameter.hasImplicitType) {
471-
_inferParameterType(parameter, index, combinedSignatureType);
472-
}
467+
if (parameter.hasImplicitType) {
468+
_inferParameterType(parameter, index, combinedSignatureType);
473469
}
474470
}
475471

476-
_resetOperatorEqualParameterTypeToDynamic(element, overriddenElements);
472+
_resetOperatorEqualParameterTypeToDynamic(
473+
element, overriddenElements.map((e) => e.declarationImpl).toList());
477474
}
478475

479476
void _inferExtensionTypes(List<ExtensionTypeElementImpl> extensionTypes) {
@@ -491,26 +488,26 @@ class InstanceMemberInferrer {
491488
var superType = classElement.supertype;
492489
if (superType != null) {
493490
var index = classElement.constructors.indexOf(constructor);
494-
var superConstructors = superType.element.constructors
491+
var superConstructors = superType.elementImpl.constructors
495492
.where((element) => element.isAccessibleIn(classElement.library))
496493
.toList();
497494
if (index < superConstructors.length) {
498495
var baseConstructor = superConstructors[index];
499496
var substitution = Substitution.fromInterfaceType(superType);
500-
forCorrespondingPairs<ParameterElement, ParameterElement>(
497+
forCorrespondingPairs<ParameterElementImpl, ParameterElementImpl>(
501498
constructor.parameters,
502499
baseConstructor.parameters,
503500
(parameter, baseParameter) {
504501
var type = substitution.substituteType(baseParameter.type);
505-
(parameter as ParameterElementImpl).type = type;
502+
parameter.type = type;
506503
},
507504
);
508505
// Update arguments of `SuperConstructorInvocation` to have the types
509506
// (which we have just set) of the corresponding formal parameters.
510507
// MixinApp(x, y) : super(x, y);
511508
var initializers = constructor.constantInitializers;
512509
var initializer = initializers.single as SuperConstructorInvocation;
513-
forCorrespondingPairs<ParameterElement, Expression>(
510+
forCorrespondingPairs<ParameterElementImpl, Expression>(
514511
constructor.parameters,
515512
initializer.argumentList.arguments,
516513
(parameter, argument) {
@@ -556,7 +553,7 @@ class InstanceMemberInferrer {
556553
/// interface [type].
557554
void _inferType(InterfaceTypeImpl? type) {
558555
if (type != null) {
559-
var element = type.element;
556+
var element = type.elementImpl;
560557
_inferClass(element);
561558
}
562559
}
@@ -570,7 +567,7 @@ class InstanceMemberInferrer {
570567
/// https://github.com/dart-lang/language/issues/569
571568
void _resetOperatorEqualParameterTypeToDynamic(
572569
MethodElementImpl element,
573-
List<ExecutableElement> overriddenElements,
570+
List<ExecutableElementImpl> overriddenElements,
574571
) {
575572
if (element.name != '==') return;
576573

@@ -590,8 +587,9 @@ class InstanceMemberInferrer {
590587
overridden = overridden.declaration;
591588

592589
// Skip Object itself.
593-
var enclosingElement = overridden.enclosingElement3;
594-
if (enclosingElement is ClassElement &&
590+
var enclosingElement =
591+
ElementImplExtension(overridden).enclosingElementImpl;
592+
if (enclosingElement is ClassElementImpl &&
595593
enclosingElement.isDartCoreObject) {
596594
continue;
597595
}
@@ -609,7 +607,7 @@ class InstanceMemberInferrer {
609607

610608
/// Find and mark the induced modifier of an element, if the [classElement] is
611609
/// 'sealed'.
612-
void _setInducedModifier(InterfaceElement classElement) {
610+
void _setInducedModifier(InterfaceElementImpl classElement) {
613611
// Only sealed elements propagate induced modifiers.
614612
if (classElement is! ClassElementImpl || !classElement.isSealed) {
615613
return;
@@ -619,25 +617,25 @@ class InstanceMemberInferrer {
619617
var interfaces = classElement.interfaces;
620618
var mixins = classElement.mixins;
621619

622-
if (mixins.any((type) => type.element.isFinal)) {
620+
if (mixins.any((type) => type.elementImpl.isFinal)) {
623621
// A sealed declaration is considered 'final' if it has a direct
624622
// superclass which is 'final'.
625623
classElement.isFinal = true;
626624
return;
627625
}
628626

629627
if (supertype != null) {
630-
if (supertype.element.isFinal) {
628+
if (supertype.elementImpl.isFinal) {
631629
// A sealed declaration is considered 'final' if it has a direct
632630
// superclass which is 'final'.
633631
classElement.isFinal = true;
634632
return;
635633
}
636-
if (supertype.element.isBase) {
634+
if (supertype.elementImpl.isBase) {
637635
// A sealed declaration is considered 'final' if it has a
638636
// direct superclass which is 'interface' and it has a direct
639637
// superinterface which is 'base'.
640-
if (mixins.any((type) => type.element.isInterface)) {
638+
if (mixins.any((type) => type.elementImpl.isInterface)) {
641639
classElement.isFinal = true;
642640
return;
643641
}
@@ -647,12 +645,12 @@ class InstanceMemberInferrer {
647645
classElement.isBase = true;
648646
return;
649647
}
650-
if (supertype.element.isInterface) {
648+
if (supertype.elementImpl.isInterface) {
651649
// A sealed declaration is considered 'final' if it has a
652650
// direct superclass which is 'interface' and it has a direct
653651
// superinterface which is 'base'.
654-
if (interfaces.any((type) => type.element.isBase) ||
655-
mixins.any((type) => type.element.isBase)) {
652+
if (interfaces.any((type) => type.elementImpl.isBase) ||
653+
mixins.any((type) => type.elementImpl.isBase)) {
656654
classElement.isFinal = true;
657655
return;
658656
}
@@ -664,19 +662,21 @@ class InstanceMemberInferrer {
664662
}
665663
}
666664

667-
if (interfaces.any((type) => type.element.isBase || type.element.isFinal) ||
668-
mixins.any((type) => type.element.isBase || type.element.isFinal)) {
665+
if (interfaces.any(
666+
(type) => type.elementImpl.isBase || type.elementImpl.isFinal) ||
667+
mixins.any(
668+
(type) => type.elementImpl.isBase || type.elementImpl.isFinal)) {
669669
// A sealed declaration is considered 'base' if it has a direct
670670
// superinterface which is 'base' or 'final'.
671671
classElement.isBase = true;
672672
return;
673673
}
674674

675-
if (mixins.any((type) => type.element.isInterface)) {
675+
if (mixins.any((type) => type.elementImpl.isInterface)) {
676676
// A sealed declaration is considered 'final' if it has a
677677
// direct superclass which is 'interface' and it has a direct
678678
// superinterface which is 'base'.
679-
if (interfaces.any((type) => type.element.isBase)) {
679+
if (interfaces.any((type) => type.elementImpl.isBase)) {
680680
classElement.isFinal = true;
681681
return;
682682
}
@@ -719,8 +719,8 @@ class InstanceMemberInferrer {
719719
);
720720
}
721721

722-
static bool _isCovariantSetter(ExecutableElement element) {
723-
if (element is PropertyAccessorElement) {
722+
static bool _isCovariantSetter(ExecutableElementImpl element) {
723+
if (element is PropertyAccessorElementImpl) {
724724
var parameters = element.parameters;
725725
return parameters.isNotEmpty && parameters[0].isCovariant;
726726
}
@@ -735,7 +735,7 @@ class InstanceMemberInferrer {
735735
/// A class of exception that is not used anywhere else.
736736
class _CycleException implements Exception {}
737737

738-
extension on InterfaceElement {
738+
extension on InterfaceElementImpl {
739739
bool get isBase {
740740
var self = this;
741741
if (self is ClassOrMixinElementImpl) return self.isBase;
@@ -744,13 +744,13 @@ extension on InterfaceElement {
744744

745745
bool get isFinal {
746746
var self = this;
747-
if (self is ClassElement) return self.isFinal;
747+
if (self is ClassElementImpl) return self.isFinal;
748748
return false;
749749
}
750750

751751
bool get isInterface {
752752
var self = this;
753-
if (self is ClassElement) return self.isInterface;
753+
if (self is ClassElementImpl) return self.isInterface;
754754
return false;
755755
}
756756
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:analyzer/dart/element/type.dart';
1111
import 'package:analyzer/src/dart/ast/ast.dart';
1212
import 'package:analyzer/src/dart/element/element.dart';
1313
import 'package:analyzer/src/dart/element/member.dart';
14+
import 'package:analyzer/src/dart/element/type.dart';
1415
import 'package:meta/meta.dart';
1516

1617
class MockLibraryImportElement implements Element2, PrefixFragment {
@@ -378,6 +379,9 @@ extension ExecutableElementExtension on ExecutableElement {
378379
// switch patterns above.
379380
as ExecutableElement2OrMember;
380381
}
382+
383+
ExecutableElementImpl get declarationImpl =>
384+
declaration as ExecutableElementImpl;
381385
}
382386

383387
extension ExecutableElementImpl2Extension on ExecutableElementImpl2 {
@@ -400,6 +404,8 @@ extension ExecutableElementOrMemberExtension on ExecutableElementOrMember {
400404
_ => throw UnsupportedError('Unsupported type: $runtimeType'),
401405
};
402406
}
407+
408+
ElementImpl get enclosingElementImpl => enclosingElement3 as ElementImpl;
403409
}
404410

405411
extension ExecutableElementOrNullExtension on ExecutableElement? {
@@ -546,6 +552,10 @@ extension InterfaceElementImplExtension on InterfaceElementImpl {
546552
}
547553
}
548554

555+
extension InterfaceTypeImplExtension on InterfaceTypeImpl {
556+
InterfaceElementImpl get elementImpl => element;
557+
}
558+
549559
extension JoinPatternVariableElementImplExtension
550560
on JoinPatternVariableElementImpl {
551561
JoinPatternVariableElementImpl2 get asElement2 {

0 commit comments

Comments
 (0)