Issue 56558. Fixed encapsulate_field to work with dynamic and prefixed types.
Bug: https://github.com/dart-lang/sdk/issues/56558
Change-Id: I59cce649a2f7989804e4dfd580cf2041c89fbe3a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/385322
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
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 eb9c827..468319c 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 @@
// 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 @@
ConstructorDeclaration constructor,
FieldElement2 fieldElement,
String name,
+ String fieldTypeCode,
) {
for (var parameter in constructor.parameters.parameters) {
var identifier = parameter.name;
@@ -166,9 +175,10 @@
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 @@
List<ClassMember> classMembers,
FieldElement2 fieldElement,
String name,
+ String fieldTypeCode,
) {
for (var constructor in classMembers) {
if (constructor is ConstructorDeclaration) {
@@ -205,6 +216,7 @@
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 76678e1..b4a4321 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 @@
''');
}
+ Future<void> 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<void> 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<void> test_named_super_initializer() async {
await resolveTestCode('''
class A {}