Skip to content

Commit 02a8d42

Browse files
pqCommit Bot
authored and
Commit Bot
committed
use-super-parameters when use_super_parameters is enabled
Fixes: #49556 Change-Id: Ia22a4f2734b7dd3affe8984ea41984e5b2c263a8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/252961 Commit-Queue: Phil Quitslund <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 92cdc0b commit 02a8d42

File tree

3 files changed

+144
-64
lines changed

3 files changed

+144
-64
lines changed

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

+35-20
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,9 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
408408
builder.addInsertion(_enclosingUnitMember!.end, (builder) {
409409
builder.writeln();
410410
builder.writeln();
411+
var useSuperParameters = _featureSet.isEnabled(Feature.super_parameters);
412+
var paramsToInitialize =
413+
_parameters.where((p) => p.constructorName != p.name).toList();
411414
builder.writeClassDeclaration(
412415
name,
413416
superclass: classStatelessWidget!.instantiate(
@@ -425,15 +428,19 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
425428

426429
// Add the required `key` parameter.
427430
builder.write(' ');
428-
builder.writeParameter(
429-
'key',
430-
type: classKey!.instantiate(
431-
typeArguments: const [],
432-
nullabilitySuffix: _isNonNullable
433-
? NullabilitySuffix.question
434-
: NullabilitySuffix.star,
435-
),
436-
);
431+
if (useSuperParameters) {
432+
builder.write('super.key');
433+
} else {
434+
builder.writeParameter(
435+
'key',
436+
type: classKey!.instantiate(
437+
typeArguments: const [],
438+
nullabilitySuffix: _isNonNullable
439+
? NullabilitySuffix.question
440+
: NullabilitySuffix.star,
441+
),
442+
);
443+
}
437444
builder.writeln(',');
438445

439446
// Add parameters for fields, local, and method parameters.
@@ -459,17 +466,25 @@ class ExtractWidgetRefactoringImpl extends RefactoringImpl
459466

460467
builder.write(' }');
461468
},
462-
initializerWriter: () {
463-
for (var parameter in _parameters) {
464-
if (parameter.constructorName != parameter.name) {
465-
builder.write(parameter.name);
466-
builder.write(' = ');
467-
builder.write(parameter.constructorName);
468-
builder.write(', ');
469-
}
470-
}
471-
builder.write('super(key: key)');
472-
},
469+
initializerWriter: useSuperParameters && paramsToInitialize.isEmpty
470+
? null
471+
: () {
472+
for (var i = 0; i < paramsToInitialize.length; ++i) {
473+
var parameter = paramsToInitialize[i];
474+
if (i > 0) {
475+
builder.write(', ');
476+
}
477+
builder.write(parameter.name);
478+
builder.write(' = ');
479+
builder.write(parameter.constructorName);
480+
}
481+
if (!useSuperParameters) {
482+
if (paramsToInitialize.isNotEmpty) {
483+
builder.write(', ');
484+
}
485+
builder.write('super(key: key)');
486+
}
487+
},
473488
);
474489
builder.writeln();
475490
builder.writeln();

pkg/analysis_server/test/lsp/code_actions_refactor_test.dart

+11-8
Original file line numberDiff line numberDiff line change
@@ -677,9 +677,11 @@ void foo(int arg) {}
677677
class ExtractWidgetRefactorCodeActionsTest extends AbstractCodeActionsTest {
678678
final extractWidgetTitle = 'Extract Widget';
679679

680-
/// Nullability suffix expected in this test class.
681-
String get expectedNullableSuffix => '?';
682-
680+
String get expectedNewWidgetConstructorDeclaration => '''
681+
const NewWidget({
682+
super.key,
683+
});
684+
''';
683685
@override
684686
void setUp() {
685687
super.setUp();
@@ -728,10 +730,7 @@ class MyWidget extends StatelessWidget {
728730
}
729731
730732
class NewWidget extends StatelessWidget {
731-
const NewWidget({
732-
Key$expectedNullableSuffix key,
733-
}) : super(key: key);
734-
733+
$expectedNewWidgetConstructorDeclaration
735734
@override
736735
Widget build(BuildContext context) {
737736
return new Column(
@@ -776,7 +775,11 @@ void f() {}
776775
class ExtractWidgetRefactorCodeActionsWithoutNullSafetyTest
777776
extends ExtractWidgetRefactorCodeActionsTest {
778777
@override
779-
String get expectedNullableSuffix => '';
778+
String get expectedNewWidgetConstructorDeclaration => '''
779+
const NewWidget({
780+
Key key,
781+
}) : super(key: key);
782+
''';
780783

781784
@override
782785
String get testPackageLanguageVersion => '2.9';

0 commit comments

Comments
 (0)