Skip to content

Commit 0c41286

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Elements. Migrate RenameImportRefactoringImpl.
Change-Id: I0e295b36fdc6c9e47c3cf5b0e648891d12fad031 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/408922 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent e758dff commit 0c41286

File tree

3 files changed

+52
-16
lines changed

3 files changed

+52
-16
lines changed

pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,11 @@ abstract class RenameRefactoring implements Refactoring {
465465
}
466466
}
467467
if (element is LibraryImportElement) {
468-
return RenameImportRefactoringImpl(workspace, sessionHelper, element);
468+
return RenameImportRefactoringImpl(
469+
workspace,
470+
sessionHelper,
471+
element.asElement2,
472+
);
469473
}
470474
var enclosingElement = element.enclosingElement3;
471475
if (enclosingElement is CompilationUnitElement) {

pkg/analysis_server/lib/src/services/refactoring/legacy/rename_import.dart

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,46 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// ignore_for_file: analyzer_use_new_elements
6-
75
import 'package:analysis_server/src/protocol_server.dart';
86
import 'package:analysis_server/src/services/correction/status.dart';
97
import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
108
import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
119
import 'package:analysis_server/src/services/refactoring/legacy/rename.dart';
1210
import 'package:analyzer/dart/analysis/results.dart';
1311
import 'package:analyzer/dart/ast/ast.dart';
14-
import 'package:analyzer/dart/element/element.dart';
12+
import 'package:analyzer/dart/element/element2.dart';
1513
import 'package:analyzer/source/source_range.dart';
1614
import 'package:analyzer/src/dart/analysis/search.dart';
15+
import 'package:analyzer/src/dart/analysis/session_helper.dart';
1716
import 'package:analyzer/src/dart/ast/utilities.dart';
1817
import 'package:analyzer/src/utilities/extensions/element.dart';
1918
import 'package:analyzer_plugin/utilities/range_factory.dart';
2019

21-
/// A [Refactoring] for renaming [LibraryImportElement]s.
20+
/// A [Refactoring] for renaming [LibraryImport]s.
2221
class RenameImportRefactoringImpl extends RenameRefactoringImpl {
23-
RenameImportRefactoringImpl(
22+
@override
23+
final MockLibraryImportElement element2;
24+
25+
factory RenameImportRefactoringImpl(
26+
RefactoringWorkspace workspace,
27+
AnalysisSessionHelper sessionHelper,
28+
LibraryImport import,
29+
) {
30+
var element2 = MockLibraryImportElement(import);
31+
return RenameImportRefactoringImpl._(
32+
workspace,
33+
sessionHelper,
34+
element2,
35+
element2,
36+
);
37+
}
38+
39+
RenameImportRefactoringImpl._(
2440
super.workspace,
2541
super.sessionHelper,
26-
LibraryImportElement super.element,
27-
);
28-
29-
@override
30-
LibraryImportElement get element => super.element as LibraryImportElement;
42+
super.element,
43+
this.element2,
44+
) : super.c2();
3145

3246
@override
3347
String get refactoringName {
@@ -78,12 +92,12 @@ class RenameImportRefactoringImpl extends RenameRefactoringImpl {
7892
}
7993
}
8094
if (edit != null) {
81-
doSourceChange_addElementEdit(change, element, edit);
95+
doSourceChange_addFragmentEdit(change, element2, edit);
8296
}
8397
}
8498
// update references
8599
var references = await searchEngine.searchLibraryImportReferences(
86-
element.asElement2,
100+
element2.import,
87101
);
88102
for (var reference in references) {
89103
if (newName.isEmpty) {
@@ -117,14 +131,14 @@ class RenameImportRefactoringImpl extends RenameRefactoringImpl {
117131

118132
/// Return the [ImportDirective] node that corresponds to the [element].
119133
Future<ImportDirective?> _findNode() async {
120-
var library = element.library;
121-
var path = library.source.fullName;
134+
var libraryFragment = element2.libraryFragment;
135+
var path = libraryFragment.source.fullName;
122136
var unitResult = sessionHelper.session.getParsedUnit(path);
123137
if (unitResult is! ParsedUnitResult) {
124138
return null;
125139
}
126140
var unit = unitResult.unit;
127-
var index = library.definingCompilationUnit.libraryImports.indexOf(element);
141+
var index = libraryFragment.libraryImports2.indexOf(element2.import);
128142
return unit.directives.whereType<ImportDirective>().elementAt(index);
129143
}
130144

pkg/analyzer/lib/src/utilities/extensions/element.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,22 @@ import 'package:analyzer/src/dart/element/member.dart';
1414
import 'package:analyzer/src/dart/element/type.dart';
1515
import 'package:meta/meta.dart';
1616

17+
class MockLibraryImportElement implements Element2, PrefixFragment {
18+
final LibraryImportElementImpl import;
19+
20+
MockLibraryImportElement(LibraryImport import)
21+
: import = import as LibraryImportElementImpl;
22+
23+
@override
24+
ElementKind get kind => ElementKind.IMPORT;
25+
26+
@override
27+
LibraryFragment get libraryFragment => import.libraryFragment;
28+
29+
@override
30+
noSuchMethod(invocation) => super.noSuchMethod(invocation);
31+
}
32+
1733
extension BindPatternVariableElementImpl2Extension
1834
on BindPatternVariableElementImpl2 {
1935
BindPatternVariableElementImpl get asElement {
@@ -204,6 +220,8 @@ extension Element2OrNullExtension on Element2? {
204220
return element2.asElement;
205221
case TypeDefiningElement2():
206222
return self.firstFragment as Element;
223+
case MockLibraryImportElement():
224+
return self.import;
207225
default:
208226
throw UnsupportedError('Unsupported type: $runtimeType');
209227
}

0 commit comments

Comments
 (0)