mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 23:49:47 +00:00
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:
parent
63f1fb02a4
commit
5502e51627
|
@ -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(' ');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue