Elements. Migrate RemoveUnusedElement.
Change-Id: I616a2078b8c08cb8400cc8297fac118086b2bab0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/389640
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/analysis_server/analyzer_use_new_elements.txt b/pkg/analysis_server/analyzer_use_new_elements.txt
index 3e07d76..a746f33 100644
--- a/pkg/analysis_server/analyzer_use_new_elements.txt
+++ b/pkg/analysis_server/analyzer_use_new_elements.txt
@@ -415,6 +415,7 @@
lib/src/services/correction/dart/remove_unnecessary_string_escape.dart
lib/src/services/correction/dart/remove_unnecessary_string_interpolation.dart
lib/src/services/correction/dart/remove_unnecessary_wildcard_pattern.dart
+lib/src/services/correction/dart/remove_unused.dart
lib/src/services/correction/dart/remove_unused_catch_clause.dart
lib/src/services/correction/dart/remove_unused_catch_stack.dart
lib/src/services/correction/dart/remove_unused_import.dart
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart
index 4bfb45a..16a68e2 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart
@@ -7,7 +7,7 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
-import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/source/source_range.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -39,34 +39,39 @@
return;
}
- if (node is ClassDeclaration ||
- node is EnumDeclaration ||
- node is FunctionDeclaration ||
- node is FunctionTypeAlias ||
- node is MethodDeclaration ||
- node is VariableDeclaration) {
- var element = node is Declaration
- ? node.declaredElement!
- : (node as NamedCompilationUnitMember).declaredElement!;
- var references = _findAllReferences(unit, element);
- // TODO(pq): consider filtering for references that are limited to within the class.
- if (references.isEmpty) {
- var parent = node.parent;
- var grandParent = parent?.parent;
- SourceRange sourceRange;
- if (node is VariableDeclaration &&
- parent is VariableDeclarationList &&
- grandParent != null) {
- if (parent.variables.length == 1) {
- sourceRange = utils.getLinesRange(range.node(grandParent));
- } else {
- sourceRange = range.nodeInList(parent.variables, node);
- }
+ var element = switch (node) {
+ ClassDeclaration() => node.declaredFragment?.element,
+ EnumDeclaration() => node.declaredFragment?.element,
+ FunctionDeclaration() =>
+ node.declaredElement2 ?? node.declaredFragment?.element,
+ FunctionTypeAlias() => node.declaredFragment?.element,
+ GenericTypeAlias() => node.declaredFragment?.element,
+ MethodDeclaration() => node.declaredFragment?.element,
+ VariableDeclaration() => node.declaredFragment?.element,
+ _ => null,
+ };
+ if (element == null) {
+ return;
+ }
+
+ var references = _findAllReferences(unit, element);
+ // TODO(pq): consider filtering for references that are limited to within the class.
+ if (references.isEmpty) {
+ var parent = node.parent;
+ var grandParent = parent?.parent;
+ SourceRange sourceRange;
+ if (node is VariableDeclaration &&
+ parent is VariableDeclarationList &&
+ grandParent != null) {
+ if (parent.variables.length == 1) {
+ sourceRange = utils.getLinesRange(range.node(grandParent));
} else {
- sourceRange = utils.getLinesRange(range.node(node));
+ sourceRange = range.nodeInList(parent.variables, node);
}
- sourceRanges.add(sourceRange);
+ } else {
+ sourceRange = utils.getLinesRange(range.node(node));
}
+ sourceRanges.add(sourceRange);
}
await builder.addDartFileEdit(file, (builder) {
@@ -116,8 +121,8 @@
return;
}
- var element = declaration.declaredElement;
- if (element is! FieldElement) {
+ var element = declaration.declaredFragment!.element;
+ if (element is! FieldElement2) {
return;
}
@@ -243,16 +248,16 @@
}
class _ElementReferenceCollector extends RecursiveAstVisitor<void> {
- final Element element;
+ final Element2 element;
final List<AstNode> references = [];
_ElementReferenceCollector(this.element);
@override
void visitFieldFormalParameter(FieldFormalParameter node) {
- var declaredElement = node.declaredElement;
- if (declaredElement is FieldFormalParameterElement) {
- if (declaredElement.field == element) {
+ var declaredElement = node.declaredFragment!.element;
+ if (declaredElement is FieldFormalParameterElement2) {
+ if (declaredElement.field2 == element) {
references.add(node);
}
}
@@ -262,7 +267,7 @@
@override
void visitNamedType(NamedType node) {
- if (node.element == element) {
+ if (node.element2 == element) {
references.add(node);
}
@@ -271,15 +276,19 @@
@override
void visitSimpleIdentifier(SimpleIdentifier node) {
- var staticElement = node.writeOrReadElement;
+ var staticElement = node.writeOrReadElement2;
if (staticElement == element) {
references.add(node);
- } else if (staticElement is PropertyAccessorElement) {
- if (staticElement.variable2 == element) {
+ } else if (staticElement is GetterElement) {
+ if (staticElement.variable3 == element) {
references.add(node);
}
- } else if (staticElement is FieldFormalParameterElement) {
- if (staticElement.field == element) {
+ } else if (staticElement is SetterElement) {
+ if (staticElement.variable3 == element) {
+ references.add(node);
+ }
+ } else if (staticElement is FieldFormalParameterElement2) {
+ if (staticElement.field2 == element) {
references.add(node);
}
}
@@ -289,7 +298,7 @@
abstract class _RemoveUnused extends ResolvedCorrectionProducer {
_RemoveUnused({required super.context});
- List<AstNode> _findAllReferences(AstNode root, Element element) {
+ List<AstNode> _findAllReferences(AstNode root, Element2 element) {
var collector = _ElementReferenceCollector(element);
root.accept(collector);
return collector.references;