44
55import 'package:analyzer/dart/ast/ast.dart' ;
66import 'package:analyzer/dart/ast/visitor.dart' ;
7- import 'package:analyzer/dart/element/element .dart' ;
7+ import 'package:analyzer/dart/element/element2 .dart' ;
88import 'package:analyzer/src/lint/linter.dart' ; // ignore: implementation_imports
99import 'package:collection/collection.dart' show IterableExtension;
1010
@@ -40,17 +40,18 @@ class _Visitor extends SimpleAstVisitor<void> {
4040
4141 @override
4242 void visitConstructorDeclaration (ConstructorDeclaration node) {
43- var element = node.declaredElement ;
43+ var element = node.declaredFragment ? .element ;
4444 if (element == null ) return ;
4545 if (element.isConst) return ;
4646 if (node.body is ! EmptyFunctionBody ) return ;
47- var enclosingElement = element.enclosingElement3 ;
47+ var enclosingElement = element.enclosingElement2 ;
4848 if (enclosingElement.isMacro) return ;
49+
4950 if (enclosingElement.mixins.isNotEmpty) return ;
5051 if (! _hasImmutableAnnotation (enclosingElement)) return ;
5152 var isRedirected =
52- element.isFactory && element.redirectedConstructor != null ;
53- if (isRedirected && (element.redirectedConstructor ? .isConst ?? false )) {
53+ element.isFactory && element.redirectedConstructor2 != null ;
54+ if (isRedirected && (element.redirectedConstructor2 ? .isConst ?? false )) {
5455 rule.reportLintForToken (node.firstTokenAfterCommentAndMetadata);
5556 }
5657 if (! isRedirected &&
@@ -63,56 +64,57 @@ class _Visitor extends SimpleAstVisitor<void> {
6364 @override
6465 void visitExtensionTypeDeclaration (ExtensionTypeDeclaration node) {
6566 if (node.constKeyword != null ) return ;
66- var element = node.declaredElement ;
67+ var element = node.declaredFragment ? .element ;
6768 if (element == null ) return ;
68- if (element.hasImmutable) {
69+ if (element.metadata2. hasImmutable) {
6970 rule.reportLintForToken (node.name);
7071 }
7172 }
7273
73- static List <InterfaceElement > _getSelfAndSuperClasses (InterfaceElement self) {
74- InterfaceElement ? current = self;
75- var seenElements = < InterfaceElement > {};
74+ static List <InterfaceElement2 > _getSelfAndSuperClasses (
75+ InterfaceElement2 self) {
76+ InterfaceElement2 ? current = self;
77+ var seenElements = < InterfaceElement2 > {};
7678 while (current != null && seenElements.add (current)) {
77- current = current.supertype? .element ;
79+ current = current.supertype? .element3 ;
7880 }
7981 return seenElements.toList ();
8082 }
8183
8284 static bool _hasConstConstructorInvocation (ConstructorDeclaration node) {
83- var declaredElement = node.declaredElement ;
85+ var declaredElement = node.declaredFragment ? .element ;
8486 if (declaredElement == null ) {
8587 return false ;
8688 }
87- var clazz = declaredElement.enclosingElement3 ;
89+ var clazz = declaredElement.enclosingElement2 ;
8890 // Constructor with super-initializer.
8991 var superInvocation =
9092 node.initializers.whereType <SuperConstructorInvocation >().firstOrNull;
9193 if (superInvocation != null ) {
92- return superInvocation.staticElement ? .isConst ?? false ;
94+ return superInvocation.element ? .isConst ?? false ;
9395 }
9496 // Constructor with 'this' redirecting initializer.
9597 var redirectInvocation = node.initializers
9698 .whereType <RedirectingConstructorInvocation >()
9799 .firstOrNull;
98100 if (redirectInvocation != null ) {
99- return redirectInvocation.staticElement ? .isConst ?? false ;
101+ return redirectInvocation.element ? .isConst ?? false ;
100102 }
101103
102- if (clazz is ExtensionTypeElement ) {
103- return clazz.primaryConstructor .isConst;
104+ if (clazz is ExtensionTypeElement2 ) {
105+ return clazz.primaryConstructor2 .isConst;
104106 }
105107
106108 // Constructor with implicit `super()` call.
107109 var unnamedSuperConstructor =
108- clazz.supertype? .constructors .firstWhereOrNull ((e) => e.name.isEmpty);
110+ clazz.supertype? .constructors2 .firstWhereOrNull ((e) => e.name.isEmpty);
109111 return unnamedSuperConstructor != null && unnamedSuperConstructor.isConst;
110112 }
111113
112114 /// Whether [clazz] or any of its super-types are annotated with
113115 /// `@immutable` .
114- static bool _hasImmutableAnnotation (InterfaceElement clazz) {
116+ static bool _hasImmutableAnnotation (InterfaceElement2 clazz) {
115117 var selfAndInheritedClasses = _getSelfAndSuperClasses (clazz);
116- return selfAndInheritedClasses.any ((cls) => cls.hasImmutable);
118+ return selfAndInheritedClasses.any ((cls) => cls.metadata2. hasImmutable);
117119 }
118120}
0 commit comments