Skip to content

Commit 02f8684

Browse files
bwilkersonCommit Queue
authored andcommitted
[migration] etract_method.dart
Change-Id: I683d58f131fb610cd343e9446a2abf1466313b75 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/410143 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent d960dcd commit 02f8684

File tree

1 file changed

+50
-52
lines changed

1 file changed

+50
-52
lines changed

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

Lines changed: 50 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
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' hide Element;
86
import 'package:analysis_server/src/services/correction/name_suggestion.dart';
97
import 'package:analysis_server/src/services/correction/selection_analyzer.dart';
@@ -24,7 +22,6 @@ import 'package:analyzer/dart/analysis/session.dart';
2422
import 'package:analyzer/dart/ast/ast.dart';
2523
import 'package:analyzer/dart/ast/token.dart';
2624
import 'package:analyzer/dart/ast/visitor.dart';
27-
import 'package:analyzer/dart/element/element.dart';
2825
import 'package:analyzer/dart/element/element2.dart';
2926
import 'package:analyzer/dart/element/nullability_suffix.dart';
3027
import 'package:analyzer/dart/element/type.dart';
@@ -37,7 +34,6 @@ import 'package:analyzer/src/dart/ast/utilities.dart';
3734
import 'package:analyzer/src/dart/resolver/exit_detector.dart';
3835
import 'package:analyzer/src/generated/java_core.dart';
3936
import 'package:analyzer/src/utilities/extensions/ast.dart';
40-
import 'package:analyzer/src/utilities/extensions/element.dart';
4137
import 'package:analyzer/src/utilities/extensions/string.dart';
4238
import 'package:analyzer_plugin/utilities/range_factory.dart';
4339
import 'package:meta/meta.dart';
@@ -214,15 +210,14 @@ Future<void> addLibraryImports(
214210
}
215211
}
216212

217-
bool isLocalElement(Element? element) {
218-
return element is LocalVariableElement ||
219-
element is ParameterElement ||
220-
element is FunctionElement &&
221-
element.enclosingElement3 is! CompilationUnitElement;
213+
bool isLocalElement(Element2? element) {
214+
return element is LocalVariableElement2 ||
215+
element is FormalParameterElement ||
216+
element is LocalFunctionElement;
222217
}
223218

224-
Element? _getLocalElement(SimpleIdentifier node) {
225-
var element = node.writeOrReadElement;
219+
Element2? _getLocalElement(SimpleIdentifier node) {
220+
var element = node.writeOrReadElement2;
226221
if (isLocalElement(element)) {
227222
return element;
228223
}
@@ -832,7 +827,7 @@ final class ExtractMethodRefactoringImpl extends RefactoringImpl
832827
if (argument.parent is NamedExpression) {
833828
argument = argument.parent as NamedExpression;
834829
}
835-
var parameter = argument.staticParameterElement;
830+
var parameter = argument.correspondingParameter;
836831
if (parameter != null) {
837832
var parameterType = parameter.type;
838833
if (parameterType is FunctionType) {
@@ -913,7 +908,7 @@ final class ExtractMethodRefactoringImpl extends RefactoringImpl
913908
}
914909

915910
String _getTypeCode(DartType type) =>
916-
_resolveResult.libraryElement.getTypeSource(type, _librariesToImport)!;
911+
_resolveResult.libraryElement2.getTypeSource(type, _librariesToImport)!;
917912

918913
void _initializeHasAwait() {
919914
var visitor = _HasAwaitVisitor();
@@ -954,7 +949,7 @@ final class ExtractMethodRefactoringImpl extends RefactoringImpl
954949
_parametersMap.clear();
955950
_parameterReferencesMap.clear();
956951
var result = RefactoringStatus();
957-
var assignedUsedVariables = <VariableElement>[];
952+
var assignedUsedVariables = <VariableElement2>[];
958953

959954
var unit = _resolveResult.unit;
960955
_visibleRangeMap = VisibleRangesComputer.forNode(unit);
@@ -1040,7 +1035,7 @@ final class ExtractMethodRefactoringImpl extends RefactoringImpl
10401035
_variableType = _getTypeCode(returnTypeObj);
10411036
if (_hasAwait) {
10421037
if (returnTypeObj is InterfaceType &&
1043-
returnTypeObj.element != typeProvider.futureElement) {
1038+
returnTypeObj.element3 != typeProvider.futureElement2) {
10441039
returnType = _getTypeCode(typeProvider.futureType(returnTypeObj));
10451040
}
10461041
} else {
@@ -1050,8 +1045,8 @@ final class ExtractMethodRefactoringImpl extends RefactoringImpl
10501045
}
10511046

10521047
/// Checks if the given [element] is declared in [_selectionRange].
1053-
bool _isDeclaredInSelection(Element element) {
1054-
return _selectionRange.contains(element.nameOffset);
1048+
bool _isDeclaredInSelection(Element2 element) {
1049+
return _selectionRange.contains(element.firstFragment.nameOffset2!);
10551050
}
10561051

10571052
/// Checks if it is OK to extract the node with the given [SourceRange].
@@ -1096,7 +1091,7 @@ final class ExtractMethodRefactoringImpl extends RefactoringImpl
10961091
}
10971092

10981093
/// Checks if [element] is referenced after [_selectionRange].
1099-
bool _isUsedAfterSelection(Element element) {
1094+
bool _isUsedAfterSelection(Element2 element) {
11001095
var visitor = _IsUsedAfterSelectionVisitor(this, element);
11011096
_parentMember!.accept(visitor);
11021097
return visitor.result;
@@ -1345,11 +1340,13 @@ class _ExtractMethodAnalyzer extends StatementAnalyzer {
13451340
invalidSelection('Cannot extract the name part of a declaration.');
13461341
}
13471342
// method name
1348-
var element = node.writeOrReadElement;
1349-
if (element is FunctionElement || element is MethodElement) {
1343+
var element = node.writeOrReadElement2;
1344+
if (element is LocalFunctionElement ||
1345+
element is MethodElement2 ||
1346+
element is TopLevelFunctionElement) {
13501347
invalidSelection('Cannot extract a single method name.');
13511348
}
1352-
if (element is PrefixElement) {
1349+
if (element is PrefixElement2) {
13531350
invalidSelection('Cannot extract an import prefix.');
13541351
}
13551352
var parent = node.parent;
@@ -1407,17 +1404,17 @@ class _GetSourcePatternVisitor extends GeneralizingAstVisitor<void> {
14071404

14081405
@override
14091406
void visitSimpleIdentifier(SimpleIdentifier node) {
1410-
_addPatterns(nameToken: node.token, element: node.staticElement);
1407+
_addPatterns(nameToken: node.token, element: node.element);
14111408
}
14121409

14131410
@override
14141411
void visitVariableDeclaration(VariableDeclaration node) {
1415-
_addPatterns(nameToken: node.name, element: node.declaredElement);
1412+
_addPatterns(nameToken: node.name, element: node.declaredFragment?.element);
14161413

14171414
super.visitVariableDeclaration(node);
14181415
}
14191416

1420-
void _addPatterns({required Token nameToken, required Element? element}) {
1417+
void _addPatterns({required Token nameToken, required Element2? element}) {
14211418
var nameRange = range.token(nameToken);
14221419
if (partRange.covers(nameRange)) {
14231420
if (element != null && isLocalElement(element)) {
@@ -1440,11 +1437,11 @@ class _GetSourcePatternVisitor extends GeneralizingAstVisitor<void> {
14401437
}
14411438
}
14421439

1443-
DartType _getElementType(Element element) {
1444-
if (element is VariableElement) {
1440+
DartType _getElementType(Element2 element) {
1441+
if (element is VariableElement2) {
14451442
return element.type;
14461443
}
1447-
if (element is FunctionElement) {
1444+
if (element is LocalFunctionElement) {
14481445
return element.type;
14491446
}
14501447
throw StateError('Unknown element type: ${element.runtimeType}');
@@ -1620,7 +1617,7 @@ class _InitializeOccurrencesVisitor extends GeneralizingAstVisitor<void> {
16201617

16211618
class _InitializeParametersVisitor extends GeneralizingAstVisitor<void> {
16221619
final ExtractMethodRefactoringImpl ref;
1623-
final List<VariableElement> assignedUsedVariables;
1620+
final List<VariableElement2> assignedUsedVariables;
16241621

16251622
_InitializeParametersVisitor(this.ref, this.assignedUsedVariables);
16261623

@@ -1645,7 +1642,7 @@ class _InitializeParametersVisitor extends GeneralizingAstVisitor<void> {
16451642
if (parameter == null) {
16461643
var parameterType = node.writeOrReadType!;
16471644
var parametersBuffer = StringBuffer();
1648-
var parameterTypeCode = ref._resolveResult.libraryElement
1645+
var parameterTypeCode = ref._resolveResult.libraryElement2
16491646
.getTypeSource(
16501647
parameterType,
16511648
ref._librariesToImport,
@@ -1671,17 +1668,17 @@ class _InitializeParametersVisitor extends GeneralizingAstVisitor<void> {
16711668
}
16721669
// remember, if assigned and used after selection
16731670
if (isLeftHandOfAssignment(node) && ref._isUsedAfterSelection(element)) {
1674-
if (element is VariableElement &&
1671+
if (element is VariableElement2 &&
16751672
!assignedUsedVariables.contains(element)) {
16761673
assignedUsedVariables.add(element);
16771674
}
16781675
}
16791676
}
16801677
// remember information for conflicts checking
1681-
if (element is LocalElement) {
1678+
if (element is LocalElement2) {
16821679
// declared local elements
16831680
if (node.inDeclarationContext()) {
1684-
var range = ref._visibleRangeMap[element.asElement2];
1681+
var range = ref._visibleRangeMap[element];
16851682
if (range != null) {
16861683
var ranges = ref._localNames.putIfAbsent(name, () => <SourceRange>[]);
16871684
ranges.add(range);
@@ -1699,7 +1696,7 @@ class _InitializeParametersVisitor extends GeneralizingAstVisitor<void> {
16991696
visitVariableDeclaration(VariableDeclaration node) {
17001697
var nodeRange = range.node(node);
17011698
if (ref._selectionRange.covers(nodeRange)) {
1702-
var element = node.declaredElement!;
1699+
var element = node.declaredFragment!.element;
17031700

17041701
// remember, if assigned and used after selection
17051702
if (ref._isUsedAfterSelection(element)) {
@@ -1709,9 +1706,9 @@ class _InitializeParametersVisitor extends GeneralizingAstVisitor<void> {
17091706
}
17101707

17111708
// remember information for conflicts checking
1712-
if (element is LocalElement) {
1709+
if (element is LocalVariableElement2) {
17131710
// declared local elements
1714-
var range = ref._visibleRangeMap[element.asElement2 as LocalElement2];
1711+
var range = ref._visibleRangeMap[element];
17151712
if (range != null) {
17161713
var name = node.name.lexeme;
17171714
var ranges = ref._localNames.putIfAbsent(name, () => <SourceRange>[]);
@@ -1726,14 +1723,14 @@ class _InitializeParametersVisitor extends GeneralizingAstVisitor<void> {
17261723

17271724
class _IsUsedAfterSelectionVisitor extends GeneralizingAstVisitor<void> {
17281725
final ExtractMethodRefactoringImpl ref;
1729-
final Element element;
1726+
final Element2 element;
17301727
bool result = false;
17311728

17321729
_IsUsedAfterSelectionVisitor(this.ref, this.element);
17331730

17341731
@override
17351732
void visitSimpleIdentifier(SimpleIdentifier node) {
1736-
var nodeElement = node.writeOrReadElement;
1733+
var nodeElement = node.writeOrReadElement2;
17371734
if (identical(nodeElement, element)) {
17381735
var nodeOffset = node.offset;
17391736
if (nodeOffset > ref._selectionRange.end) {
@@ -1778,10 +1775,10 @@ class _SourcePattern {
17781775
}
17791776
}
17801777

1781-
extension on LibraryElement {
1778+
extension on LibraryElement2 {
17821779
/// Returns the source to reference [type] in this [CompilationUnit].
17831780
///
1784-
/// Fills [librariesToImport] with [LibraryElement]s whose elements are
1781+
/// Fills [librariesToImport] with library elements whose elements are
17851782
/// used by the generated source, but not imported.
17861783
String? getTypeSource(
17871784
DartType type,
@@ -1792,7 +1789,7 @@ extension on LibraryElement {
17921789
if (alias != null) {
17931790
return _getTypeCodeElementArguments(
17941791
librariesToImport: librariesToImport,
1795-
element: alias.element,
1792+
element: alias.element2,
17961793
isNullable: type.nullabilitySuffix == NullabilitySuffix.question,
17971794
typeArguments: alias.typeArguments,
17981795
);
@@ -1807,15 +1804,16 @@ extension on LibraryElement {
18071804
return 'Function';
18081805
}
18091806
parametersBuffer.write('(');
1810-
for (var parameter in type.parameters) {
1807+
for (var parameter in type.formalParameters) {
18111808
var parameterType = getTypeSource(parameter.type, librariesToImport);
18121809
if (parametersBuffer.length != 1) {
18131810
parametersBuffer.write(', ');
18141811
}
18151812
parametersBuffer.write(parameterType);
1816-
if (parameter.name.isNotEmpty) {
1813+
var parameterName = parameter.name3;
1814+
if (parameterName != null && parameterName.isNotEmpty) {
18171815
parametersBuffer.write(' ');
1818-
parametersBuffer.write(parameter.name);
1816+
parametersBuffer.write(parameterName);
18191817
}
18201818
}
18211819
parametersBuffer.write(')');
@@ -1825,7 +1823,7 @@ extension on LibraryElement {
18251823
if (type is InterfaceType) {
18261824
return _getTypeCodeElementArguments(
18271825
librariesToImport: librariesToImport,
1828-
element: type.element,
1826+
element: type.element3,
18291827
isNullable: type.nullabilitySuffix == NullabilitySuffix.question,
18301828
typeArguments: type.typeArguments,
18311829
);
@@ -1862,10 +1860,10 @@ extension on LibraryElement {
18621860
/// Returns the import element used to import given [element] into the
18631861
/// library.
18641862
///
1865-
/// May be `null` if was not imported, i.e. declared in the same library.
1866-
LibraryImportElement? _getImportElement(Element element) {
1867-
for (var imp in library.definingCompilationUnit.libraryImports) {
1868-
var definedNames = imp.namespace.definedNames;
1863+
/// Returns `null` if was not imported, i.e. declared in the same library.
1864+
LibraryImport? _getImportElement(Element2 element) {
1865+
for (var imp in firstFragment.libraryImports2) {
1866+
var definedNames = imp.namespace.definedNames2;
18691867
if (definedNames.containsValue(element)) {
18701868
return imp;
18711869
}
@@ -1875,14 +1873,14 @@ extension on LibraryElement {
18751873

18761874
String? _getTypeCodeElementArguments({
18771875
required Set<Source> librariesToImport,
1878-
required Element element,
1876+
required Element2 element,
18791877
required bool isNullable,
18801878
required List<DartType> typeArguments,
18811879
}) {
18821880
var sb = StringBuffer();
18831881

18841882
// Check if imported.
1885-
var library = element.library;
1883+
var library = element.library2;
18861884
if (library != null && library != this) {
18871885
// No source, if private.
18881886
if (element.isPrivate) {
@@ -1891,13 +1889,13 @@ extension on LibraryElement {
18911889
// Ensure import.
18921890
var importElement = _getImportElement(element);
18931891
if (importElement != null) {
1894-
var prefix = importElement.prefix?.element;
1892+
var prefix = importElement.prefix2?.element;
18951893
if (prefix != null) {
18961894
sb.write(prefix.displayName);
18971895
sb.write('.');
18981896
}
18991897
} else {
1900-
librariesToImport.add(library.source);
1898+
librariesToImport.add(library.firstFragment.source);
19011899
}
19021900
}
19031901

0 commit comments

Comments
 (0)