diff --git a/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart index eb9c8271ac90..468319c46131 100644 --- a/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart +++ b/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart @@ -88,11 +88,19 @@ class EncapsulateField extends ResolvedCorrectionProducer { // rename field builder.addSimpleReplacement(range.token(nameToken), '_$name'); + String fieldTypeCode; + var type = fieldDeclaration.fields.type; + if (type == null) { + fieldTypeCode = ''; + } else { + fieldTypeCode = utils.getNodeText(type); + } _updateReferencesInConstructors( builder, classMembers, fieldElement, name, + fieldTypeCode, ); // Write getter and setter. @@ -155,6 +163,7 @@ class EncapsulateField extends ResolvedCorrectionProducer { ConstructorDeclaration constructor, FieldElement2 fieldElement, String name, + String fieldTypeCode, ) { for (var parameter in constructor.parameters.parameters) { var identifier = parameter.name; @@ -166,9 +175,10 @@ class EncapsulateField extends ResolvedCorrectionProducer { var normalParam = parameter.parameter; if (normalParam is FieldFormalParameter) { var start = normalParam.thisKeyword; - var type = parameterElement.type.getDisplayString(); builder.addSimpleReplacement( - range.startEnd(start, normalParam.period), '$type '); + range.startEnd(start, normalParam.period), + fieldTypeCode.isNotEmpty ? '$fieldTypeCode ' : '', + ); var previous = constructor.separator ?? constructor.parameters; var replacement = constructor.initializers.isEmpty @@ -197,6 +207,7 @@ class EncapsulateField extends ResolvedCorrectionProducer { List classMembers, FieldElement2 fieldElement, String name, + String fieldTypeCode, ) { for (var constructor in classMembers) { if (constructor is ConstructorDeclaration) { @@ -205,6 +216,7 @@ class EncapsulateField extends ResolvedCorrectionProducer { constructor, fieldElement, name, + fieldTypeCode, ); } } diff --git a/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart b/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart index 76678e17997b..b4a4321ac24a 100644 --- a/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart +++ b/pkg/analysis_server/test/src/services/correction/assist/encapsulate_field_test.dart @@ -403,6 +403,56 @@ class A { '''); } + Future test_named_formalParameter_noType() async { + await resolveTestCode(''' +class C { + var foo; + + C({required this.foo}); +} +'''); + await assertHasAssistAt('foo;', ''' +class C { + var _foo; + + get foo => _foo; + + set foo(value) { + _foo = value; + } + + C({required foo}) : _foo = foo; +} +'''); + } + + Future test_named_formalParameter_prefixedType() async { + await resolveTestCode(''' +import 'dart:math' as math; + +class C { + math.Random foo; + + C({required this.foo}); +} +'''); + await assertHasAssistAt('foo;', ''' +import 'dart:math' as math; + +class C { + math.Random _foo; + + math.Random get foo => _foo; + + set foo(math.Random value) { + _foo = value; + } + + C({required math.Random foo}) : _foo = foo; +} +'''); + } + Future test_named_super_initializer() async { await resolveTestCode(''' class A {}