5
5
import 'package:analyzer/dart/ast/ast.dart' ;
6
6
import 'package:analyzer/dart/ast/token.dart' ;
7
7
import 'package:analyzer/dart/ast/visitor.dart' ;
8
- import 'package:analyzer/dart/element/element .dart' ;
8
+ import 'package:analyzer/dart/element/element2 .dart' ;
9
9
import 'package:collection/collection.dart' ;
10
10
11
11
import '../analyzer.dart' ;
@@ -43,28 +43,30 @@ class UseLateForPrivateFieldsAndVariables extends LintRule {
43
43
}
44
44
45
45
class _Visitor extends RecursiveAstVisitor <void > {
46
- final lateables = < CompilationUnitElement , List <VariableDeclaration >> {};
46
+ final Map <LibraryFragment , List <VariableDeclaration >> lateables =
47
+ < LibraryFragment , List <VariableDeclaration >> {};
47
48
48
- final nullableAccess = < Element > {};
49
+ final Set < Element2 > nullableAccess = < Element2 > {};
49
50
50
51
final LintRule rule;
51
52
final LinterContext context;
52
53
53
- /// The "current" [CompilationUnitElement ] , which is set by
54
+ /// The "current" [LibraryFragment ] , which is set by
54
55
/// [visitCompilationUnit] .
55
- late CompilationUnitElement currentUnit ;
56
+ late LibraryFragment currentLibraryFragment ;
56
57
57
58
_Visitor (this .rule, this .context);
58
59
59
60
void afterLibrary () {
60
61
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 ];
63
64
if (variables == null ) continue ;
64
65
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);
68
70
if (contextUnit == null ) continue ;
69
71
contextUnit.errorReporter.atNode (variable, rule.lintCode);
70
72
}
@@ -74,7 +76,7 @@ class _Visitor extends RecursiveAstVisitor<void> {
74
76
75
77
@override
76
78
void visitAssignmentExpression (AssignmentExpression node) {
77
- var element = node.writeElement ? .canonicalElement ;
79
+ var element = node.writeElement2 ? .canonicalElement2 ;
78
80
if (element != null ) {
79
81
var assignee = node.leftHandSide;
80
82
var rhsType = node.rightHandSide.staticType;
@@ -85,7 +87,7 @@ class _Visitor extends RecursiveAstVisitor<void> {
85
87
context.typeSystem.isNonNullable (rhsType)) {
86
88
// This is OK; non-null access.
87
89
} else {
88
- nullableAccess.add (element);
90
+ nullableAccess.add (element.baseElement );
89
91
}
90
92
}
91
93
super .visitAssignmentExpression (node);
@@ -105,9 +107,9 @@ class _Visitor extends RecursiveAstVisitor<void> {
105
107
106
108
@override
107
109
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 ;
111
113
112
114
super .visitCompilationUnit (node);
113
115
}
@@ -141,21 +143,21 @@ class _Visitor extends RecursiveAstVisitor<void> {
141
143
142
144
@override
143
145
void visitPrefixedIdentifier (PrefixedIdentifier node) {
144
- var element = node.staticElement ? .canonicalElement ;
146
+ var element = node.element ? .canonicalElement2 ;
145
147
_visitIdentifierOrPropertyAccess (node, element);
146
148
super .visitPrefixedIdentifier (node);
147
149
}
148
150
149
151
@override
150
152
void visitPropertyAccess (PropertyAccess node) {
151
- var element = node.propertyName.staticElement ? .canonicalElement ;
153
+ var element = node.propertyName.element ? .canonicalElement2 ;
152
154
_visitIdentifierOrPropertyAccess (node, element);
153
155
super .visitPropertyAccess (node);
154
156
}
155
157
156
158
@override
157
159
void visitSimpleIdentifier (SimpleIdentifier node) {
158
- var element = node.staticElement ? .canonicalElement ;
160
+ var element = node.element ? .canonicalElement2 ;
159
161
_visitIdentifierOrPropertyAccess (node, element);
160
162
super .visitSimpleIdentifier (node);
161
163
}
@@ -173,18 +175,18 @@ class _Visitor extends RecursiveAstVisitor<void> {
173
175
void _visit (VariableDeclaration variable) {
174
176
if (variable.isLate) return ;
175
177
if (variable.isSynthetic) return ;
176
- var declaredElement = variable.declaredElement ;
178
+ var declaredElement = variable.declaredFragment ? .element ;
177
179
if (declaredElement == null ||
178
180
context.typeSystem.isNonNullable (declaredElement.type)) {
179
181
return ;
180
182
}
181
- lateables.putIfAbsent (currentUnit , () => []).add (variable);
183
+ lateables.putIfAbsent (currentLibraryFragment , () => []).add (variable);
182
184
}
183
185
184
186
/// Checks whether [expression] , which must be an [Identifier] or
185
187
/// [PropertyAccess] , and its [canonicalElement] , represent a nullable access.
186
188
void _visitIdentifierOrPropertyAccess (
187
- Expression expression, Element ? canonicalElement) {
189
+ Expression expression, Element2 ? canonicalElement) {
188
190
assert (expression is Identifier || expression is PropertyAccess );
189
191
if (canonicalElement == null ) return ;
190
192
@@ -199,7 +201,7 @@ class _Visitor extends RecursiveAstVisitor<void> {
199
201
parent.operator .type == TokenType .BANG ) {
200
202
// This is OK; non-null access.
201
203
} else {
202
- nullableAccess.add (canonicalElement);
204
+ nullableAccess.add (canonicalElement.baseElement );
203
205
}
204
206
}
205
207
}
0 commit comments