@@ -21,6 +21,7 @@ import 'package:analysis_server/src/services/correction/dart/convert_to_where_ty
21
21
import 'package:analysis_server/src/services/correction/dart/inline_typedef.dart' ;
22
22
import 'package:analysis_server/src/services/correction/dart/remove_dead_if_null.dart' ;
23
23
import 'package:analysis_server/src/services/correction/dart/remove_if_null_operator.dart' ;
24
+ import 'package:analysis_server/src/services/correction/dart/remove_unused.dart' ;
24
25
import 'package:analysis_server/src/services/correction/dart/replace_with_eight_digit_hex.dart' ;
25
26
import 'package:analysis_server/src/services/correction/dart/wrap_in_future.dart' ;
26
27
import 'package:analysis_server/src/services/correction/fix.dart' ;
@@ -35,7 +36,6 @@ import 'package:analyzer/dart/analysis/features.dart';
35
36
import 'package:analyzer/dart/ast/ast.dart' ;
36
37
import 'package:analyzer/dart/ast/precedence.dart' ;
37
38
import 'package:analyzer/dart/ast/token.dart' ;
38
- import 'package:analyzer/dart/ast/visitor.dart' ;
39
39
import 'package:analyzer/dart/element/element.dart' ;
40
40
import 'package:analyzer/dart/element/nullability_suffix.dart' ;
41
41
import 'package:analyzer/dart/element/type.dart' ;
@@ -374,12 +374,6 @@ class FixProcessor extends BaseProcessor {
374
374
if (errorCode == HintCode .UNUSED_CATCH_STACK ) {
375
375
await _addFix_removeUnusedCatchStack ();
376
376
}
377
- if (errorCode == HintCode .UNUSED_ELEMENT ) {
378
- await _addFix_removeUnusedElement ();
379
- }
380
- if (errorCode == HintCode .UNUSED_FIELD ) {
381
- await _addFix_removeUnusedField ();
382
- }
383
377
if (errorCode == HintCode .UNUSED_IMPORT ) {
384
378
await _addFix_removeUnusedImport ();
385
379
}
@@ -3752,110 +3746,6 @@ class FixProcessor extends BaseProcessor {
3752
3746
}
3753
3747
}
3754
3748
3755
- Future <void > _addFix_removeUnusedElement () async {
3756
- final sourceRanges = < SourceRange > [];
3757
- final referencedNode = node.parent;
3758
- if (referencedNode is ClassDeclaration ||
3759
- referencedNode is EnumDeclaration ||
3760
- referencedNode is FunctionDeclaration ||
3761
- referencedNode is FunctionTypeAlias ||
3762
- referencedNode is MethodDeclaration ||
3763
- referencedNode is VariableDeclaration ) {
3764
- final element = referencedNode is Declaration
3765
- ? referencedNode.declaredElement
3766
- : (referencedNode as NamedCompilationUnitMember ).declaredElement;
3767
- final references = _findAllReferences (unit, element);
3768
- // todo (pq): consider filtering for references that are limited to within the class.
3769
- if (references.length == 1 ) {
3770
- var sourceRange;
3771
- if (referencedNode is VariableDeclaration ) {
3772
- VariableDeclarationList parent = referencedNode.parent;
3773
- if (parent.variables.length == 1 ) {
3774
- sourceRange = utils.getLinesRange (range.node (parent.parent));
3775
- } else {
3776
- sourceRange = range.nodeInList (parent.variables, referencedNode);
3777
- }
3778
- } else {
3779
- sourceRange = utils.getLinesRange (range.node (referencedNode));
3780
- }
3781
- sourceRanges.add (sourceRange);
3782
- }
3783
- }
3784
-
3785
- if (sourceRanges.isNotEmpty) {
3786
- final changeBuilder = _newDartChangeBuilder ();
3787
- await changeBuilder.addFileEdit (file, (DartFileEditBuilder builder) {
3788
- for (var sourceRange in sourceRanges) {
3789
- builder.addDeletion (sourceRange);
3790
- }
3791
- });
3792
- _addFixFromBuilder (changeBuilder, DartFixKind .REMOVE_UNUSED_ELEMENT );
3793
- }
3794
- }
3795
-
3796
- Future <void > _addFix_removeUnusedField () async {
3797
- final declaration = node.parent;
3798
- if (declaration is ! VariableDeclaration ) {
3799
- return ;
3800
- }
3801
- final element = (declaration as VariableDeclaration ).declaredElement;
3802
- if (element is ! FieldElement ) {
3803
- return ;
3804
- }
3805
-
3806
- final sourceRanges = < SourceRange > [];
3807
- final references = _findAllReferences (unit, element);
3808
- for (var reference in references) {
3809
- // todo (pq): consider scoping this to parent or parent.parent.
3810
- final referenceNode = reference.thisOrAncestorMatching ((node) =>
3811
- node is VariableDeclaration ||
3812
- node is ExpressionStatement ||
3813
- node is ConstructorFieldInitializer ||
3814
- node is FieldFormalParameter );
3815
- if (referenceNode == null ) {
3816
- return ;
3817
- }
3818
- var sourceRange;
3819
- if (referenceNode is VariableDeclaration ) {
3820
- VariableDeclarationList parent = referenceNode.parent;
3821
- if (parent.variables.length == 1 ) {
3822
- sourceRange = utils.getLinesRange (range.node (parent.parent));
3823
- } else {
3824
- sourceRange = range.nodeInList (parent.variables, referenceNode);
3825
- }
3826
- } else if (referenceNode is ConstructorFieldInitializer ) {
3827
- ConstructorDeclaration cons =
3828
- referenceNode.parent as ConstructorDeclaration ;
3829
- // A() : _f = 0;
3830
- if (cons.initializers.length == 1 ) {
3831
- sourceRange = range.endEnd (cons.parameters, referenceNode);
3832
- } else {
3833
- sourceRange = range.nodeInList (cons.initializers, referenceNode);
3834
- }
3835
- } else if (referenceNode is FieldFormalParameter ) {
3836
- FormalParameterList params =
3837
- referenceNode.parent as FormalParameterList ;
3838
- if (params.parameters.length == 1 ) {
3839
- sourceRange =
3840
- range.endStart (params.leftParenthesis, params.rightParenthesis);
3841
- } else {
3842
- sourceRange = range.nodeInList (params.parameters, referenceNode);
3843
- }
3844
- } else {
3845
- sourceRange = utils.getLinesRange (range.node (referenceNode));
3846
- }
3847
- sourceRanges.add (sourceRange);
3848
- }
3849
-
3850
- final changeBuilder = _newDartChangeBuilder ();
3851
- await changeBuilder.addFileEdit (file, (DartFileEditBuilder builder) {
3852
- for (var sourceRange in sourceRanges) {
3853
- builder.addDeletion (sourceRange);
3854
- }
3855
- });
3856
- _addFixFromBuilder (changeBuilder, DartFixKind .REMOVE_UNUSED_FIELD );
3857
- }
3858
-
3859
3749
Future <void > _addFix_removeUnusedImport () async {
3860
3750
// prepare ImportDirective
3861
3751
ImportDirective importDirective =
@@ -4714,7 +4604,11 @@ class FixProcessor extends BaseProcessor {
4714
4604
}
4715
4605
4716
4606
var errorCode = error.errorCode;
4717
- if (errorCode == StaticWarningCode .DEAD_NULL_AWARE_EXPRESSION ) {
4607
+ if (errorCode == HintCode .UNUSED_ELEMENT ) {
4608
+ await compute (RemoveUnusedElement ());
4609
+ } else if (errorCode == HintCode .UNUSED_FIELD ) {
4610
+ await compute (RemoveUnusedField ());
4611
+ } else if (errorCode == StaticWarningCode .DEAD_NULL_AWARE_EXPRESSION ) {
4718
4612
await compute (RemoveDeadIfNull ());
4719
4613
} else if (errorCode is LintCode ) {
4720
4614
String name = errorCode.name;
@@ -4844,12 +4738,6 @@ class FixProcessor extends BaseProcessor {
4844
4738
_addFixFromBuilder (changeBuilder, DartFixKind .CREATE_METHOD , args: [name]);
4845
4739
}
4846
4740
4847
- List <SimpleIdentifier > _findAllReferences (AstNode root, Element element) {
4848
- var collector = _ElementReferenceCollector (element);
4849
- root.accept (collector);
4850
- return collector.references;
4851
- }
4852
-
4853
4741
/// Return the class, enum or mixin declaration for the given [element] .
4854
4742
Future <ClassOrMixinDeclaration > _getClassDeclaration (
4855
4743
ClassElement element) async {
@@ -5235,32 +5123,6 @@ class _ClosestElementFinder {
5235
5123
}
5236
5124
}
5237
5125
5238
- class _ElementReferenceCollector extends RecursiveAstVisitor <void > {
5239
- final Element element;
5240
- final List <SimpleIdentifier > references = [];
5241
-
5242
- _ElementReferenceCollector (this .element);
5243
-
5244
- @override
5245
- void visitSimpleIdentifier (SimpleIdentifier node) {
5246
- final staticElement = node.staticElement;
5247
- if (staticElement == element) {
5248
- references.add (node);
5249
- }
5250
- // Implicit Setter.
5251
- else if (staticElement is PropertyAccessorElement ) {
5252
- if (staticElement.variable == element) {
5253
- references.add (node);
5254
- }
5255
- // Field Formals.
5256
- } else if (staticElement is FieldFormalParameterElement ) {
5257
- if (staticElement.field == element) {
5258
- references.add (node);
5259
- }
5260
- }
5261
- }
5262
- }
5263
-
5264
5126
/// [ExecutableElement] , its parameters, and operations on them.
5265
5127
class _ExecutableParameters {
5266
5128
final AnalysisSessionHelper sessionHelper;
0 commit comments