Skip to content

Commit

Permalink
Issue 56558. Fixed encapsulate_field to work with dynamic and prefixe…
Browse files Browse the repository at this point in the history
…d types.

Bug: #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>
  • Loading branch information
fshcheglov authored and Commit Queue committed Oct 1, 2024
1 parent 19eab32 commit 4366f82
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -197,6 +207,7 @@ class EncapsulateField extends ResolvedCorrectionProducer {
List<ClassMember> classMembers,
FieldElement2 fieldElement,
String name,
String fieldTypeCode,
) {
for (var constructor in classMembers) {
if (constructor is ConstructorDeclaration) {
Expand All @@ -205,6 +216,7 @@ class EncapsulateField extends ResolvedCorrectionProducer {
constructor,
fieldElement,
name,
fieldTypeCode,
);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,56 @@ class A {
''');
}

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 {}
Expand Down

0 comments on commit 4366f82

Please sign in to comment.