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' ;
85import 'package:analyzer/dart/element/type.dart' ;
96import 'package:analyzer/src/dart/ast/ast.dart' ;
107import 'package:analyzer/src/dart/element/element.dart' ;
@@ -20,7 +17,7 @@ import 'package:collection/collection.dart';
2017/// instance methods within a single compilation unit.
2118class 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.
736736class _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}
0 commit comments