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-
75import 'package:analyzer/dart/analysis/features.dart' ;
86import 'package:analyzer/dart/ast/syntactic_entity.dart' ;
97import 'package:analyzer/dart/ast/token.dart' ;
10- import 'package:analyzer/dart/element/element.dart' ;
118import 'package:analyzer/dart/element/element2.dart' ;
129import 'package:analyzer/dart/element/type.dart' ;
1310import 'package:analyzer/dart/element/type_provider.dart' ;
@@ -26,7 +23,7 @@ import 'package:analyzer/src/error/inference_error.dart';
2623import 'package:analyzer/src/utilities/extensions/element.dart' ;
2724
2825final _missingMustBeOverridden = Expando <List <ExecutableElement2 >>();
29- final _missingOverrides = Expando <List <ExecutableElement >>();
26+ final _missingOverrides = Expando <List <ExecutableElement2OrMember >>();
3027
3128class InheritanceOverrideVerifier {
3229 final TypeSystemImpl _typeSystem;
@@ -133,25 +130,18 @@ class InheritanceOverrideVerifier {
133130 }
134131 }
135132
136- /// Returns [Element ] members that are in the interface of the
133+ /// Returns [ExecutableElement2 ] members that are in the interface of the
137134 /// given class with `@mustBeOverridden` , but don't have implementations.
138135 static List <ExecutableElement2 > missingMustBeOverridden (
139136 NamedCompilationUnitMember node) {
140137 return _missingMustBeOverridden[node.name] ?? const [];
141138 }
142139
143- /// Returns [ExecutableElement] members that are in the interface of the
144- /// given class, but don't have concrete implementations.
145- static List <ExecutableElement > missingOverrides (
146- NamedCompilationUnitMember node) {
147- return _missingOverrides[node.name] ?? const [];
148- }
149-
150140 /// Returns [ExecutableElement2] members that are in the interface of the
151141 /// given class, but don't have concrete implementations.
152- static List <ExecutableElement2 > missingOverrides2 (
142+ static List <ExecutableElement2 > missingOverrides (
153143 NamedCompilationUnitMember node) {
154- return _missingOverrides[node.name].asElement2 ;
144+ return _missingOverrides[node.name] ?? const [] ;
155145 }
156146}
157147
@@ -263,7 +253,7 @@ class _ClassVerifier {
263253 field.name, libraryUri, fieldElement.getter? .asElement2);
264254 _checkDeclaredMember (
265255 field.name, libraryUri, fieldElement.setter? .asElement2);
266- if (! member.isStatic && firstFragment is ! EnumElement ) {
256+ if (! member.isStatic && firstFragment is ! EnumElementImpl ) {
267257 _checkIllegalEnumValuesDeclaration (field.name);
268258 }
269259 if (! member.isStatic) {
@@ -282,7 +272,7 @@ class _ClassVerifier {
282272 if (! (member.isStatic || member.isAbstract || member.isSetter)) {
283273 _checkIllegalConcreteEnumMemberDeclaration (member.name);
284274 }
285- if (! member.isStatic && firstFragment is ! EnumElement ) {
275+ if (! member.isStatic && firstFragment is ! EnumElementImpl ) {
286276 _checkIllegalEnumValuesDeclaration (member.name);
287277 }
288278 }
@@ -298,26 +288,26 @@ class _ClassVerifier {
298288
299289 if (firstFragment is ClassElementImpl && ! firstFragment.isAbstract ||
300290 firstFragment is EnumElementImpl ) {
301- List <ExecutableElement >? inheritedAbstract;
291+ List <ExecutableElement2OrMember >? inheritedAbstract;
302292
303293 for (var name in interface .map.keys) {
304294 if (! name.isAccessibleFor (libraryUri)) {
305295 continue ;
306296 }
307297
308- var interfaceElement = interface .map[name]! ;
309- var concreteElement = interface .implemented [name];
298+ var interfaceElement = interface .map[name]! .asElement2 ;
299+ var concreteElement = interface .implemented2 [name];
310300
311301 // No concrete implementation of the name.
312302 if (concreteElement == null ) {
313303 if (_reportConcreteClassWithAbstractMember (name.name)) {
314304 continue ;
315305 }
316- if (_isNotImplementedInConcreteSuperClass (firstFragment, name)) {
306+ if (_isNotImplementedInConcreteSuperClass (name)) {
317307 continue ;
318308 }
319309 // We already reported ILLEGAL_ENUM_VALUES_INHERITANCE.
320- if (firstFragment is EnumElement &&
310+ if (firstFragment is EnumElementImpl &&
321311 const {'values' , 'values=' }.contains (name.name)) {
322312 continue ;
323313 }
@@ -348,13 +338,12 @@ class _ClassVerifier {
348338 // overriding method. The classNameNode is always wrong.
349339 CorrectOverrideHelper (
350340 typeSystem: typeSystem,
351- thisMember: concreteElement.asElement2 ,
341+ thisMember: concreteElement,
352342 ).verify (
353- superMember: interfaceElement.asElement2 ,
343+ superMember: interfaceElement,
354344 errorReporter: reporter,
355345 errorNode: classNameToken,
356- errorCode: concreteElement is PropertyAccessorElementOrMember &&
357- concreteElement.isSetter
346+ errorCode: concreteElement is SetterElement2OrMember
358347 ? CompileTimeErrorCode .INVALID_IMPLEMENTATION_OVERRIDE_SETTER
359348 : CompileTimeErrorCode .INVALID_IMPLEMENTATION_OVERRIDE ,
360349 );
@@ -541,7 +530,7 @@ class _ClassVerifier {
541530 )) {
542531 hasError = true ;
543532 }
544- if (classElement is EnumElement && _checkMixinOfEnum (namedType)) {
533+ if (classElement is EnumElementImpl && _checkMixinOfEnum (namedType)) {
545534 hasError = true ;
546535 }
547536 }
@@ -558,7 +547,7 @@ class _ClassVerifier {
558547 /// [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS] ,
559548 /// [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_ON] ,
560549 /// [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_WITH] .
561- bool _checkForRecursiveInterfaceInheritance (InterfaceElement2 element,
550+ bool _checkForRecursiveInterfaceInheritance (InterfaceElementImpl2 element,
562551 [List <InterfaceElement2 >? path]) {
563552 path ?? = < InterfaceElement2 > [];
564553
@@ -616,7 +605,7 @@ class _ClassVerifier {
616605 }
617606 }
618607
619- if (element is MixinElement2 ) {
608+ if (element is MixinElementImpl2 ) {
620609 for (var type in element.superclassConstraints) {
621610 if (_checkForRecursiveInterfaceInheritance (type.element3, path)) {
622611 return true ;
@@ -656,7 +645,7 @@ class _ClassVerifier {
656645 // We ignore mixins because they don't inherit and members.
657646 // But to support `super.foo()` invocations we put members from superclass
658647 // constraints into the `superImplemented` bucket, the same we look below.
659- if (classElement is MixinElement ) {
648+ if (classElement is MixinElementImpl ) {
660649 return ;
661650 }
662651
@@ -665,17 +654,19 @@ class _ClassVerifier {
665654
666655 void checkSingle (
667656 String memberName,
668- bool Function (ClassElement enclosingClass) filter,
657+ bool Function (ClassElement2 enclosingClass) filter,
669658 ) {
670659 var member = concreteMap[Name (libraryUri, memberName)];
671660 if (member != null ) {
672- var enclosingClass = member.enclosingElement3 as InterfaceElement ;
673- if (enclosingClass is ! ClassElement || filter (enclosingClass)) {
674- reporter.atToken (
675- classNameToken,
676- CompileTimeErrorCode .ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE ,
677- arguments: [memberName, enclosingClass.name],
678- );
661+ var enclosingClass = member.asElement2.enclosingElement2;
662+ if (enclosingClass != null ) {
663+ if (enclosingClass is ! ClassElement2 || filter (enclosingClass)) {
664+ reporter.atToken (
665+ classNameToken,
666+ CompileTimeErrorCode .ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE ,
667+ arguments: [memberName, enclosingClass.name3! ],
668+ );
669+ }
679670 }
680671 }
681672 }
@@ -697,20 +688,20 @@ class _ClassVerifier {
697688
698689 void _checkIllegalEnumValuesInheritance () {
699690 if (implementsDartCoreEnum) {
700- var getter = inheritance.getInherited2 (
701- classElement,
691+ var getter = inheritance.getInherited4 (
692+ classElement.asElement2 ,
702693 Name (libraryUri, 'values' ),
703694 );
704- var setter = inheritance.getInherited2 (
705- classElement,
695+ var setter = inheritance.getInherited4 (
696+ classElement.asElement2 ,
706697 Name (libraryUri, 'values=' ),
707698 );
708699 var inherited = getter ?? setter;
709700 if (inherited != null ) {
710701 reporter.atToken (
711702 classNameToken,
712703 CompileTimeErrorCode .ILLEGAL_ENUM_VALUES_INHERITANCE ,
713- arguments: [inherited.enclosingElement3.name ! ],
704+ arguments: [inherited.enclosingElement2 ! .name3 ! ],
714705 );
715706 }
716707 }
@@ -742,20 +733,20 @@ class _ClassVerifier {
742733 /// Return the error code that should be used when the given class [element]
743734 /// references itself directly.
744735 ErrorCode _getRecursiveErrorCode (InterfaceElement2 element) {
745- if (element.supertype? .element3.asElement == classElement) {
736+ if (element.supertype? .element3 == classElement.asElement2 ) {
746737 return CompileTimeErrorCode .RECURSIVE_INTERFACE_INHERITANCE_EXTENDS ;
747738 }
748739
749740 if (element is MixinElement2 ) {
750741 for (var type in element.superclassConstraints) {
751- if (type.element3.asElement == classElement) {
742+ if (type.element3 == classElement.asElement2 ) {
752743 return CompileTimeErrorCode .RECURSIVE_INTERFACE_INHERITANCE_ON ;
753744 }
754745 }
755746 }
756747
757748 for (var type in element.mixins) {
758- if (type.element3.asElement == classElement) {
749+ if (type.element3 == classElement.asElement2 ) {
759750 return CompileTimeErrorCode .RECURSIVE_INTERFACE_INHERITANCE_WITH ;
760751 }
761752 }
@@ -764,9 +755,8 @@ class _ClassVerifier {
764755 }
765756
766757 /// If [name] is not implemented in the extended concrete class, the
767- /// issue should be fixed there, and then [element ] will not have it too.
758+ /// issue should be fixed there, and then [classElement ] will not have it too.
768759 bool _isNotImplementedInConcreteSuperClass (
769- InterfaceElement element,
770760 Name name,
771761 ) {
772762 var superElement = classElement.supertype? .element3;
@@ -787,7 +777,7 @@ class _ClassVerifier {
787777 if (memberName == name) {
788778 reporter.atNode (
789779 member,
790- classElement is EnumElement
780+ classElement.asElement2 is EnumElement2
791781 ? CompileTimeErrorCode .ENUM_WITH_ABSTRACT_MEMBER
792782 : CompileTimeErrorCode .CONCRETE_CLASS_WITH_ABSTRACT_MEMBER ,
793783 arguments: [displayName, classElement.name],
@@ -832,13 +822,13 @@ class _ClassVerifier {
832822 CompileTimeErrorCode .INCONSISTENT_INHERITANCE_GETTER_AND_METHOD ,
833823 arguments: [
834824 name.name,
835- conflict.getter.enclosingElement3.name ! ,
836- conflict.method.enclosingElement3.name !
825+ conflict.getter2.enclosingElement2 ! .name3 ! ,
826+ conflict.method2.enclosingElement2 ! .name3 !
837827 ],
838828 );
839829 } else if (conflict is CandidatesConflict ) {
840- var candidatesStr = conflict.candidates .map ((candidate) {
841- var className = candidate.enclosingElement3.name ;
830+ var candidatesStr = conflict.candidates2 .map ((candidate) {
831+ var className = candidate.enclosingElement2 ! .name3 ;
842832 var typeStr = candidate.type.getDisplayString ();
843833 return '$className .${name .name } ($typeStr )' ;
844834 }).join (', ' );
@@ -853,7 +843,8 @@ class _ClassVerifier {
853843 }
854844 }
855845
856- void _reportInheritedAbstractMembers (List <ExecutableElement >? elements) {
846+ void _reportInheritedAbstractMembers (
847+ List <ExecutableElement2OrMember >? elements) {
857848 if (elements == null ) {
858849 return ;
859850 }
@@ -862,18 +853,15 @@ class _ClassVerifier {
862853
863854 var descriptions = < String > [];
864855 for (var element in elements) {
865- var prefix = '' ;
866- if (element is PropertyAccessorElement ) {
867- if (element.isGetter) {
868- prefix = 'getter ' ;
869- } else {
870- prefix = 'setter ' ;
871- }
872- }
856+ var prefix = switch (element) {
857+ GetterElement () => 'getter ' ,
858+ SetterElement () => 'setter ' ,
859+ _ => '' ,
860+ };
873861
874862 var elementName = element.displayName;
875- var enclosingElement = element.enclosingElement3 ;
876- var enclosingName = enclosingElement.displayName ;
863+ var enclosingElement = element.enclosingElement2 ! ;
864+ var enclosingName = enclosingElement.displayString2 () ;
877865 var description = "$prefix $enclosingName .$elementName " ;
878866
879867 descriptions.add (description);
@@ -957,7 +945,7 @@ class _ClassVerifier {
957945 }
958946
959947 var noSuchMethodDeclaration =
960- classElement.getMethod2 (FunctionElement .NO_SUCH_METHOD_METHOD_NAME );
948+ classElement.getMethod2 (MethodElement2 .NO_SUCH_METHOD_METHOD_NAME );
961949 if (noSuchMethodDeclaration != null &&
962950 ! noSuchMethodDeclaration.isAbstract) {
963951 return ;
@@ -1055,9 +1043,3 @@ class _ClassVerifier {
10551043 }
10561044 }
10571045}
1058-
1059- extension on List <ExecutableElement >? {
1060- List <ExecutableElement2 > get asElement2 {
1061- return this ? .map ((element) => element.asElement2).toList () ?? const [];
1062- }
1063- }
0 commit comments