Skip to content

Commit 84f65be

Browse files
scheglovCommit Queue
authored andcommitted
Fix 'Extract Method' refactoring inside extensions.
Change-Id: If055456980361c5ec768bf5cb104af11cfa1b12e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/323704 Reviewed-by: Brian Wilkerson <[email protected]> Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 42d8cdf commit 84f65be

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ AstNode? getEnclosingClassOrUnitMember(AstNode input) {
247247
case ClassDeclaration _:
248248
case CompilationUnit _:
249249
case EnumDeclaration _:
250+
case ExtensionDeclaration _:
250251
case ExtensionTypeDeclaration _:
251252
case MixinDeclaration _:
252253
return member;

pkg/analysis_server/test/services/refactoring/legacy/extract_method_test.dart

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'abstract_refactoring.dart';
1212
void main() {
1313
defineReflectiveSuite(() {
1414
defineReflectiveTests(ExtractMethodTest_Enum);
15+
defineReflectiveTests(ExtractMethodTest_Extension);
1516
defineReflectiveTests(ExtractMethodTest_ExtensionType);
1617
defineReflectiveTests(ExtractMethodTest_Mixin);
1718
defineReflectiveTests(ExtractMethodTest);
@@ -3338,6 +3339,57 @@ enum E {
33383339
}
33393340
}
33403341

3342+
@reflectiveTest
3343+
class ExtractMethodTest_Extension extends _ExtractMethodTest {
3344+
Future<void> test_singleExpression_method() async {
3345+
await indexTestUnit('''
3346+
extension E on int {
3347+
void foo() {
3348+
int a = 1 + 2;
3349+
}
3350+
}
3351+
''');
3352+
_createRefactoringForString('1 + 2');
3353+
// apply refactoring
3354+
return _assertSuccessfulRefactoring('''
3355+
extension E on int {
3356+
void foo() {
3357+
int a = res();
3358+
}
3359+
3360+
int res() => 1 + 2;
3361+
}
3362+
''');
3363+
}
3364+
3365+
Future<void> test_statements_method() async {
3366+
await indexTestUnit('''
3367+
extension E on int {
3368+
void foo() {
3369+
// start
3370+
print(0);
3371+
// end
3372+
}
3373+
}
3374+
''');
3375+
_createRefactoringForStartEndComments();
3376+
// apply refactoring
3377+
return _assertSuccessfulRefactoring('''
3378+
extension E on int {
3379+
void foo() {
3380+
// start
3381+
res();
3382+
// end
3383+
}
3384+
3385+
void res() {
3386+
print(0);
3387+
}
3388+
}
3389+
''');
3390+
}
3391+
}
3392+
33413393
@reflectiveTest
33423394
class ExtractMethodTest_ExtensionType extends _ExtractMethodTest {
33433395
Future<void> test_bad_conflict_method_alreadyDeclaresMethod() async {

0 commit comments

Comments
 (0)