55import 'package:analyzer/dart/ast/ast.dart' ;
66import 'package:analyzer/dart/ast/token.dart' ;
77import 'package:analyzer/dart/ast/visitor.dart' ;
8- import 'package:analyzer/dart/element/element .dart' ;
8+ import 'package:analyzer/dart/element/element2 .dart' ;
99import 'package:collection/collection.dart' ;
1010
1111import '../analyzer.dart' ;
@@ -43,28 +43,30 @@ class UseLateForPrivateFieldsAndVariables extends LintRule {
4343}
4444
4545class _Visitor extends RecursiveAstVisitor <void > {
46- final lateables = < CompilationUnitElement , List <VariableDeclaration >> {};
46+ final Map <LibraryFragment , List <VariableDeclaration >> lateables =
47+ < LibraryFragment , List <VariableDeclaration >> {};
4748
48- final nullableAccess = < Element > {};
49+ final Set < Element2 > nullableAccess = < Element2 > {};
4950
5051 final LintRule rule;
5152 final LinterContext context;
5253
53- /// The "current" [CompilationUnitElement ] , which is set by
54+ /// The "current" [LibraryFragment ] , which is set by
5455 /// [visitCompilationUnit] .
55- late CompilationUnitElement currentUnit ;
56+ late LibraryFragment currentLibraryFragment ;
5657
5758 _Visitor (this .rule, this .context);
5859
5960 void afterLibrary () {
6061 for (var contextUnit in context.allUnits) {
61- var unit = contextUnit.unit.declaredElement ;
62- var variables = lateables[unit ];
62+ var libraryFragment = contextUnit.unit.declaredFragment ;
63+ var variables = lateables[libraryFragment ];
6364 if (variables == null ) continue ;
6465 for (var variable in variables) {
65- if (! nullableAccess.contains (variable.declaredElement)) {
66- var contextUnit = context.allUnits
67- .firstWhereOrNull ((u) => u.unit.declaredElement == unit);
66+ var variableElement = variable.declaredFragment? .element;
67+ if (! nullableAccess.contains (variableElement)) {
68+ var contextUnit = context.allUnits.firstWhereOrNull (
69+ (u) => u.unit.declaredFragment == libraryFragment);
6870 if (contextUnit == null ) continue ;
6971 contextUnit.errorReporter.atNode (variable, rule.lintCode);
7072 }
@@ -74,7 +76,7 @@ class _Visitor extends RecursiveAstVisitor<void> {
7476
7577 @override
7678 void visitAssignmentExpression (AssignmentExpression node) {
77- var element = node.writeElement ? .canonicalElement ;
79+ var element = node.writeElement2 ? .canonicalElement2 ;
7880 if (element != null ) {
7981 var assignee = node.leftHandSide;
8082 var rhsType = node.rightHandSide.staticType;
@@ -85,7 +87,7 @@ class _Visitor extends RecursiveAstVisitor<void> {
8587 context.typeSystem.isNonNullable (rhsType)) {
8688 // This is OK; non-null access.
8789 } else {
88- nullableAccess.add (element);
90+ nullableAccess.add (element.baseElement );
8991 }
9092 }
9193 super .visitAssignmentExpression (node);
@@ -105,9 +107,9 @@ class _Visitor extends RecursiveAstVisitor<void> {
105107
106108 @override
107109 void visitCompilationUnit (CompilationUnit node) {
108- var declaredElement = node.declaredElement ;
109- if (declaredElement == null ) return ;
110- currentUnit = declaredElement ;
110+ var declaredFragment = node.declaredFragment ;
111+ if (declaredFragment == null ) return ;
112+ currentLibraryFragment = declaredFragment ;
111113
112114 super .visitCompilationUnit (node);
113115 }
@@ -141,21 +143,21 @@ class _Visitor extends RecursiveAstVisitor<void> {
141143
142144 @override
143145 void visitPrefixedIdentifier (PrefixedIdentifier node) {
144- var element = node.staticElement ? .canonicalElement ;
146+ var element = node.element ? .canonicalElement2 ;
145147 _visitIdentifierOrPropertyAccess (node, element);
146148 super .visitPrefixedIdentifier (node);
147149 }
148150
149151 @override
150152 void visitPropertyAccess (PropertyAccess node) {
151- var element = node.propertyName.staticElement ? .canonicalElement ;
153+ var element = node.propertyName.element ? .canonicalElement2 ;
152154 _visitIdentifierOrPropertyAccess (node, element);
153155 super .visitPropertyAccess (node);
154156 }
155157
156158 @override
157159 void visitSimpleIdentifier (SimpleIdentifier node) {
158- var element = node.staticElement ? .canonicalElement ;
160+ var element = node.element ? .canonicalElement2 ;
159161 _visitIdentifierOrPropertyAccess (node, element);
160162 super .visitSimpleIdentifier (node);
161163 }
@@ -173,18 +175,18 @@ class _Visitor extends RecursiveAstVisitor<void> {
173175 void _visit (VariableDeclaration variable) {
174176 if (variable.isLate) return ;
175177 if (variable.isSynthetic) return ;
176- var declaredElement = variable.declaredElement ;
178+ var declaredElement = variable.declaredFragment ? .element ;
177179 if (declaredElement == null ||
178180 context.typeSystem.isNonNullable (declaredElement.type)) {
179181 return ;
180182 }
181- lateables.putIfAbsent (currentUnit , () => []).add (variable);
183+ lateables.putIfAbsent (currentLibraryFragment , () => []).add (variable);
182184 }
183185
184186 /// Checks whether [expression] , which must be an [Identifier] or
185187 /// [PropertyAccess] , and its [canonicalElement] , represent a nullable access.
186188 void _visitIdentifierOrPropertyAccess (
187- Expression expression, Element ? canonicalElement) {
189+ Expression expression, Element2 ? canonicalElement) {
188190 assert (expression is Identifier || expression is PropertyAccess );
189191 if (canonicalElement == null ) return ;
190192
@@ -199,7 +201,7 @@ class _Visitor extends RecursiveAstVisitor<void> {
199201 parent.operator .type == TokenType .BANG ) {
200202 // This is OK; non-null access.
201203 } else {
202- nullableAccess.add (canonicalElement);
204+ nullableAccess.add (canonicalElement.baseElement );
203205 }
204206 }
205207}
0 commit comments