Skip to content

Commit f78b304

Browse files
pqCommit Queue
authored and
Commit Queue
committed
[element model] migrate prefer_is_not_empty
Bug: https://github.com/dart-lang/linter/issues/5099 Change-Id: Iabb9ddb952f5a111b9df290705bad5f0b26c9c75 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390627 Reviewed-by: Brian Wilkerson <[email protected]> Auto-Submit: Phil Quitslund <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent 6f83217 commit f78b304

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
lines changed

pkg/linter/analyzer_use_new_elements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ lib/src/rules/prefer_if_null_operators.dart
127127
lib/src/rules/prefer_inlined_adds.dart
128128
lib/src/rules/prefer_interpolation_to_compose_strings.dart
129129
lib/src/rules/prefer_is_empty.dart
130+
lib/src/rules/prefer_is_not_empty.dart
130131
lib/src/rules/prefer_is_not_operator.dart
131132
lib/src/rules/prefer_iterable_whereType.dart
132133
lib/src/rules/prefer_mixin.dart

pkg/linter/lib/src/ast.dart

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import 'package:analyzer/dart/ast/ast.dart';
99
import 'package:analyzer/dart/ast/syntactic_entity.dart';
1010
import 'package:analyzer/dart/ast/token.dart';
1111
import 'package:analyzer/dart/element/element.dart';
12+
import 'package:analyzer/dart/element/element2.dart';
1213
import 'package:analyzer/dart/element/visitor.dart';
14+
import 'package:analyzer/dart/element/visitor2.dart';
1315
import 'package:analyzer/file_system/file_system.dart';
1416
import 'package:analyzer/src/lint/linter.dart'; // ignore: implementation_imports
1517
import 'package:analyzer/src/workspace/workspace.dart'; // ignore: implementation_imports
@@ -32,6 +34,18 @@ List<Element> getChildren(Element parent, [String? name]) {
3234
return children;
3335
}
3436

37+
/// Returns direct children of [parent].
38+
List<Element2> getChildren2(Element2 parent, [String? name]) {
39+
var children = <Element2>[];
40+
visitChildren2(parent, (Element2 element) {
41+
if (name == null || element.displayName == name) {
42+
children.add(element);
43+
}
44+
return false;
45+
});
46+
return children;
47+
}
48+
3549
/// Return the compilation unit of a node
3650
CompilationUnit? getCompilationUnit(AstNode node) =>
3751
node.thisOrAncestorOfType<CompilationUnit>();
@@ -307,6 +321,12 @@ void visitChildren(Element element, ElementProcessor processor) {
307321
element.visitChildren(_ElementVisitorAdapter(processor));
308322
}
309323

324+
/// Uses [processor] to visit all of the children of [element].
325+
/// If [processor] returns `true`, then children of a child are visited too.
326+
void visitChildren2(Element2 element, ElementProcessor2 processor) {
327+
element.visitChildren2(_ElementVisitorAdapter2(processor));
328+
}
329+
310330
bool _checkForSimpleGetter(MethodDeclaration getter, Expression? expression) {
311331
if (expression is SimpleIdentifier) {
312332
var staticElement = expression.staticElement;
@@ -418,6 +438,10 @@ bool _hasFieldOrMethod(ClassMember element, String name) =>
418438
/// If `true` is returned, children of [element] will be visited.
419439
typedef ElementProcessor = bool Function(Element element);
420440

441+
/// An [Element] processor function type.
442+
/// If `true` is returned, children of [element] will be visited.
443+
typedef ElementProcessor2 = bool Function(Element2 element);
444+
421445
/// A [GeneralizingElementVisitor] adapter for [ElementProcessor].
422446
class _ElementVisitorAdapter extends GeneralizingElementVisitor<void> {
423447
final ElementProcessor processor;
@@ -433,6 +457,21 @@ class _ElementVisitorAdapter extends GeneralizingElementVisitor<void> {
433457
}
434458
}
435459

460+
/// A [GeneralizingElementVisitor] adapter for [ElementProcessor].
461+
class _ElementVisitorAdapter2 extends GeneralizingElementVisitor2<void> {
462+
final ElementProcessor2 processor;
463+
464+
_ElementVisitorAdapter2(this.processor);
465+
466+
@override
467+
void visitElement(Element2 element) {
468+
var visitChildren = processor(element);
469+
if (visitChildren) {
470+
element.visitChildren2(this);
471+
}
472+
}
473+
}
474+
436475
extension AstNodeExtension on AstNode {
437476
bool get isToStringInvocationWithArguments {
438477
var self = this;

pkg/linter/lib/src/rules/prefer_is_not_empty.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@ class _Visitor extends SimpleAstVisitor<void> {
5757
}
5858

5959
// Element identifier should be "isEmpty".
60-
var propertyElement = isEmptyIdentifier.staticElement;
60+
var propertyElement = isEmptyIdentifier.element;
6161
if (propertyElement == null || 'isEmpty' != propertyElement.name) {
6262
return;
6363
}
6464

6565
// Element should also support "isNotEmpty".
66-
var propertyTarget = propertyElement.enclosingElement3;
66+
var propertyTarget = propertyElement.enclosingElement2;
6767
if (propertyTarget == null ||
68-
getChildren(propertyTarget, 'isNotEmpty').isEmpty) {
68+
getChildren2(propertyTarget, 'isNotEmpty').isEmpty) {
6969
return;
7070
}
7171

0 commit comments

Comments
 (0)