CHANGE_TYPE_ANNOTATION to handle unreferenceable type

Fixes #46971

Change-Id: Id0f1a2ebd79b1459c4d518c0cd7f42545c584159
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/210960
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Ahmed Ashour 2021-08-23 23:53:37 +00:00 committed by commit-bot@chromium.org
parent 63f1fb02a4
commit 5502e51627
4 changed files with 56 additions and 17 deletions

View file

@ -65,14 +65,16 @@ class AddReturnType extends CorrectionProducer {
final insertBeforeEntity_final = insertBeforeEntity;
await builder.addDartFileEdit(file, (builder) {
builder.addInsertion(insertBeforeEntity_final.offset, (builder) {
if (returnType.isDynamic) {
builder.write('dynamic');
} else {
builder.writeType(returnType);
}
builder.write(' ');
});
if (returnType.isDynamic || builder.canWriteType(returnType)) {
builder.addInsertion(insertBeforeEntity_final.offset, (builder) {
if (returnType.isDynamic) {
builder.write('dynamic');
} else {
builder.writeType(returnType);
}
builder.write(' ');
});
}
});
}

View file

@ -44,9 +44,11 @@ class ChangeTypeAnnotation extends CorrectionProducer {
_oldAnnotation = displayStringForType(typeNode.typeOrThrow);
_newAnnotation = displayStringForType(newType);
await builder.addDartFileEdit(file, (builder) {
builder.addReplacement(range.node(typeNode), (builder) {
builder.writeType(newType);
});
if (builder.canWriteType(newType)) {
builder.addReplacement(range.node(typeNode), (builder) {
builder.writeType(newType);
});
}
});
}
}

View file

@ -152,6 +152,22 @@ class A {
''');
}
Future<void> test_privateType() async {
addSource('/home/test/lib/a.dart', '''
class A {
_B b => _B();
}
class _B {}
''');
await resolveTestCode('''
import 'package:test/a.dart';
f(A a) => a.b();
''');
await assertNoFix();
}
Future<void> test_topLevelFunction_block() async {
await resolveTestCode('''
f() {

View file

@ -22,13 +22,13 @@ class ChangeTypeAnnotationTest extends FixProcessorTest {
Future<void> test_generic() async {
await resolveTestCode('''
main() {
f() {
String v = <int>[];
print(v);
}
''');
await assertHasFix('''
main() {
f() {
List<int> v = <int>[];
print(v);
}
@ -37,7 +37,7 @@ main() {
Future<void> test_multipleVariables() async {
await resolveTestCode('''
main() {
f() {
String a, b = '';
print('\$a \$b');
}
@ -47,7 +47,7 @@ main() {
Future<void> test_notVariableDeclaration() async {
await resolveTestCode('''
main() {
f() {
String v;
v = 42;
print(v);
@ -56,15 +56,34 @@ main() {
await assertNoFix();
}
Future<void> test_privateType() async {
addSource('/home/test/lib/a.dart', '''
class A {
_B b => _B();
}
class _B {}
''');
await resolveTestCode('''
import 'package:test/a.dart';
f(A a) {
String v = a.b();
print(v);
}
''');
await assertNoFix();
}
Future<void> test_simple() async {
await resolveTestCode('''
main() {
f() {
String v = 'abc'.length;
print(v);
}
''');
await assertHasFix('''
main() {
f() {
int v = 'abc'.length;
print(v);
}