Skip to content

Commit 44e36ba

Browse files
FMorschelCommit Queue
authored andcommitted
[DAS] Fixes import fixes ordering and fixes prefixed invocation fix
Fixes: #61315 Change-Id: Ic1229dbe052cca5992b7901ba7cd33627e3ac0a4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/445127 Auto-Submit: Felipe Morschel <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]> Reviewed-by: Samuel Rawlins <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent 1942f43 commit 44e36ba

File tree

5 files changed

+96
-24
lines changed

5 files changed

+96
-24
lines changed

pkg/analysis_server/lib/src/services/correction/dart/import_library.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -965,16 +965,20 @@ class _ImportLibraryPrefix extends ResolvedCorrectionProducer {
965965
builder.addSimpleInsertion(targetNode.offset, '$_prefixName.');
966966
});
967967
} else if (_nodePrefix != _prefixName) {
968-
AstNode prefix;
968+
SourceRange nodeRange;
969969
if (targetNode case NamedType(:var importPrefix?)) {
970-
prefix = importPrefix;
970+
nodeRange = range.node(importPrefix);
971971
} else if (targetNode case PrefixedIdentifier(prefix: var prefixNode)) {
972-
prefix = prefixNode;
972+
nodeRange = range.node(prefixNode);
973+
} else if (targetNode.parent case MethodInvocation(
974+
:SimpleIdentifier target,
975+
) when target.name == _nodePrefix) {
976+
nodeRange = range.startOffsetEndOffset(target.offset, target.end + 1);
973977
} else {
974978
return;
975979
}
976980
await builder.addDartFileEdit(file, (builder) {
977-
builder.addSimpleReplacement(range.node(prefix), '$_prefixName.');
981+
builder.addSimpleReplacement(nodeRange, '$_prefixName.');
978982
});
979983
}
980984
}

pkg/analysis_server/lib/src/services/correction/fix.dart

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -902,12 +902,12 @@ abstract final class DartFixKind {
902902
);
903903
static const IMPORT_LIBRARY_COMBINATOR = FixKind(
904904
'dart.fix.import.libraryCombinator',
905-
DartFixKindPriority.standard + 5,
905+
DartFixKindPriority.standard + 6,
906906
"Import '{0}' from {1}",
907907
);
908908
static const IMPORT_LIBRARY_COMBINATOR_MULTIPLE = FixKind(
909909
'dart.fix.import.libraryCombinatorMultiple',
910-
DartFixKindPriority.standard + 5,
910+
DartFixKindPriority.standard + 6,
911911
"Import '{0}' and {1} other{2} from {3}",
912912
);
913913
static const IMPORT_LIBRARY_HIDE = FixKind(
@@ -917,7 +917,7 @@ abstract final class DartFixKind {
917917
);
918918
static const IMPORT_LIBRARY_PREFIX = FixKind(
919919
'dart.fix.import.libraryPrefix',
920-
DartFixKindPriority.standard + 5,
920+
DartFixKindPriority.standard + 6,
921921
"Use imported library '{0}' with prefix '{1}'",
922922
);
923923

@@ -926,28 +926,28 @@ abstract final class DartFixKind {
926926
/// {@endtemplate}
927927
static const IMPORT_LIBRARY_PROJECT1 = FixKind(
928928
'dart.fix.import.libraryProject1',
929-
DartFixKindPriority.standard + 3,
929+
DartFixKindPriority.standard + 5,
930930
"Import library '{0}'",
931931
);
932932

933933
/// {@macro dart.fix.import.libraryProject1}
934934
static const IMPORT_LIBRARY_PROJECT1_PREFIXED = FixKind(
935935
'dart.fix.import.libraryProject1Prefixed',
936-
DartFixKindPriority.standard + 3,
936+
DartFixKindPriority.standard + 5,
937937
"Import library '{0}' with prefix '{1}'",
938938
);
939939

940940
/// {@macro dart.fix.import.libraryProject1}
941941
static const IMPORT_LIBRARY_PROJECT1_PREFIXED_SHOW = FixKind(
942942
'dart.fix.import.libraryProject1PrefixedShow',
943-
DartFixKindPriority.standard + 3,
943+
DartFixKindPriority.standard + 5,
944944
"Import library '{0}' with prefix '{1}' and 'show'",
945945
);
946946

947947
/// {@macro dart.fix.import.libraryProject1}
948948
static const IMPORT_LIBRARY_PROJECT1_SHOW = FixKind(
949949
'dart.fix.import.libraryProject1Show',
950-
DartFixKindPriority.standard + 3,
950+
DartFixKindPriority.standard + 5,
951951
"Import library '{0}' with 'show'",
952952
);
953953

@@ -956,28 +956,28 @@ abstract final class DartFixKind {
956956
/// {@endtemplate}
957957
static const IMPORT_LIBRARY_PROJECT2 = FixKind(
958958
'dart.fix.import.libraryProject2',
959-
DartFixKindPriority.standard + 2,
959+
DartFixKindPriority.standard + 4,
960960
"Import library '{0}'",
961961
);
962962

963963
/// {@macro dart.fix.import.libraryProject2}
964964
static const IMPORT_LIBRARY_PROJECT2_PREFIXED = FixKind(
965965
'dart.fix.import.libraryProject2Prefixed',
966-
DartFixKindPriority.standard + 2,
966+
DartFixKindPriority.standard + 4,
967967
"Import library '{0}' with prefix '{1}'",
968968
);
969969

970970
/// {@macro dart.fix.import.libraryProject2}
971971
static const IMPORT_LIBRARY_PROJECT2_PREFIXED_SHOW = FixKind(
972972
'dart.fix.import.libraryProject2PrefixedShow',
973-
DartFixKindPriority.standard + 2,
973+
DartFixKindPriority.standard + 4,
974974
"Import library '{0}' with prefix '{1}' and 'show'",
975975
);
976976

977977
/// {@macro dart.fix.import.libraryProject2}
978978
static const IMPORT_LIBRARY_PROJECT2_SHOW = FixKind(
979979
'dart.fix.import.libraryProject2Show',
980-
DartFixKindPriority.standard + 2,
980+
DartFixKindPriority.standard + 4,
981981
"Import library '{0}' with 'show'",
982982
);
983983

@@ -986,28 +986,28 @@ abstract final class DartFixKind {
986986
/// {@endtemplate}
987987
static const IMPORT_LIBRARY_PROJECT3 = FixKind(
988988
'dart.fix.import.libraryProject3',
989-
DartFixKindPriority.standard + 1,
989+
DartFixKindPriority.standard + 3,
990990
"Import library '{0}'",
991991
);
992992

993993
/// {@macro dart.fix.import.libraryProject3}
994994
static const IMPORT_LIBRARY_PROJECT3_PREFIXED = FixKind(
995995
'dart.fix.import.libraryProject3Prefixed',
996-
DartFixKindPriority.standard + 1,
996+
DartFixKindPriority.standard + 3,
997997
"Import library '{0}' with prefix '{1}'",
998998
);
999999

10001000
/// {@macro dart.fix.import.libraryProject3}
10011001
static const IMPORT_LIBRARY_PROJECT3_PREFIXED_SHOW = FixKind(
10021002
'dart.fix.import.libraryProject3PrefixedShow',
1003-
DartFixKindPriority.standard + 1,
1003+
DartFixKindPriority.standard + 3,
10041004
"Import library '{0}' with prefix '{1}' and 'show'",
10051005
);
10061006

10071007
/// {@macro dart.fix.import.libraryProject3}
10081008
static const IMPORT_LIBRARY_PROJECT3_SHOW = FixKind(
10091009
'dart.fix.import.libraryProject3Show',
1010-
DartFixKindPriority.standard + 1,
1010+
DartFixKindPriority.standard + 3,
10111011
"Import library '{0}' with 'show'",
10121012
);
10131013
static const IMPORT_LIBRARY_REMOVE_SHOW = FixKind(
@@ -1017,22 +1017,22 @@ abstract final class DartFixKind {
10171017
);
10181018
static const IMPORT_LIBRARY_SDK = FixKind(
10191019
'dart.fix.import.librarySdk',
1020-
DartFixKindPriority.standard + 4,
1020+
DartFixKindPriority.standard + 7,
10211021
"Import library '{0}'",
10221022
);
10231023
static const IMPORT_LIBRARY_SDK_PREFIXED = FixKind(
10241024
'dart.fix.import.librarySdkPrefixed',
1025-
DartFixKindPriority.standard + 4,
1025+
DartFixKindPriority.standard + 7,
10261026
"Import library '{0}' with prefix '{1}'",
10271027
);
10281028
static const IMPORT_LIBRARY_SDK_SHOW = FixKind(
10291029
'dart.fix.import.librarySdkShow',
1030-
DartFixKindPriority.standard + 4,
1030+
DartFixKindPriority.standard + 7,
10311031
"Import library '{0}' with 'show'",
10321032
);
10331033
static const IMPORT_LIBRARY_SDK_PREFIXED_SHOW = FixKind(
10341034
'dart.fix.import.librarySdkPrefixedShow',
1035-
DartFixKindPriority.standard + 4,
1035+
DartFixKindPriority.standard + 7,
10361036
"Import library '{0}' with prefix '{1}' and 'show'",
10371037
);
10381038
static const INLINE_INVOCATION = FixKind(

pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,15 +207,25 @@ void f() {
207207
]);
208208
}
209209

210-
Future<void> test_classLast_import() async {
210+
Future<void> test_classLast_imports() async {
211211
newFile('$testPackageLibPath/lib.dart', r'''
212212
class A {}
213+
''');
214+
newFile('$testPackageLibPath/export.dart', '''
215+
export 'lib.dart';
216+
''');
217+
// This example project doesn't have to make sense, only demonstrate the
218+
// priorities
219+
newFile('$testPackageLibPath/src/inner.dart', '''
220+
class A {}
213221
''');
214222
await resolveTestCode('''
215223
A? a;
216224
''');
217225
await assertFixPriorityOrder([
218226
DartFixKind.IMPORT_LIBRARY_PROJECT1,
227+
DartFixKind.IMPORT_LIBRARY_PROJECT2,
228+
DartFixKind.IMPORT_LIBRARY_PROJECT3,
219229
DartFixKind.CREATE_CLASS_UPPERCASE,
220230
]);
221231
}

pkg/analysis_server/test/src/services/correction/fix/import_library_prefix_test.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,26 @@ void f(lib.C c) {
4848
''');
4949
}
5050

51+
Future<void> test_prefixed_invocation() async {
52+
newFile('$testPackageLibPath/lib.dart', '''
53+
int fn(int a) => a;
54+
''');
55+
await resolveTestCode('''
56+
import 'lib.dart' as lib;
57+
58+
void f() {
59+
other.fn();
60+
}
61+
''');
62+
await assertHasFix('''
63+
import 'lib.dart' as lib;
64+
65+
void f() {
66+
lib.fn();
67+
}
68+
''');
69+
}
70+
5171
Future<void> test_with_hideCombinator() async {
5272
newFile('$testPackageLibPath/lib.dart', '''
5373
class A {}

pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ void main() {
1313
defineReflectiveSuite(() {
1414
defineReflectiveTests(ImportLibrarySdkPrefixedTest);
1515
defineReflectiveTests(ImportLibrarySdkPrefixedWithShowTest);
16+
defineReflectiveTests(ImportLibrarySdkPriorityTest);
1617
defineReflectiveTests(ImportLibrarySdkTest);
1718
defineReflectiveTests(ImportLibrarySdkWithShowTest);
1819
});
@@ -64,6 +65,43 @@ void f() {
6465
}
6566
}
6667

68+
@reflectiveTest
69+
class ImportLibrarySdkPriorityTest extends FixPriorityTest {
70+
Future<void> test_sdksFirst_prefixed() async {
71+
newFile('$testPackageLibPath/lib.dart', '''
72+
int max(int a) => a;
73+
''');
74+
await resolveTestCode('''
75+
import 'lib.dart' as lib;
76+
77+
void f() {
78+
math.max();
79+
}
80+
''');
81+
await assertFixPriorityOrder([
82+
DartFixKind.IMPORT_LIBRARY_SDK_PREFIXED,
83+
DartFixKind.IMPORT_LIBRARY_SDK_PREFIXED_SHOW,
84+
DartFixKind.IMPORT_LIBRARY_PREFIX,
85+
]);
86+
}
87+
88+
Future<void> test_sdksFirst_project1() async {
89+
newFile('$testPackageLibPath/lib.dart', '''
90+
int max(int a) => a;
91+
''');
92+
await resolveTestCode('''
93+
void f() {
94+
max();
95+
}
96+
''');
97+
await assertFixPriorityOrder([
98+
DartFixKind.IMPORT_LIBRARY_SDK,
99+
DartFixKind.IMPORT_LIBRARY_SDK_SHOW,
100+
DartFixKind.IMPORT_LIBRARY_PROJECT1,
101+
]);
102+
}
103+
}
104+
67105
@reflectiveTest
68106
class ImportLibrarySdkTest extends FixProcessorTest {
69107
@override

0 commit comments

Comments
 (0)