Skip to content

Commit 912090b

Browse files
FMorschelCommit Queue
authored andcommitted
[DAS] Fixes make return type nullable fix
Fixes: #61299 Change-Id: Ic65f13728836475afcb528f03b542b21a216ff49 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/444902 Reviewed-by: Samuel Rawlins <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Samuel Rawlins <[email protected]> Auto-Submit: Felipe Morschel <[email protected]>
1 parent 5b2a008 commit 912090b

File tree

4 files changed

+35
-6
lines changed

4 files changed

+35
-6
lines changed

pkg/analysis_server/lib/src/services/correction/dart/make_return_type_nullable.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:analysis_server/src/services/correction/fix.dart';
66
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
77
import 'package:analyzer/dart/ast/ast.dart';
8+
import 'package:analyzer/dart/element/nullability_suffix.dart';
89
import 'package:analyzer/src/dart/ast/extensions.dart';
910
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
1011
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -47,8 +48,8 @@ class MakeReturnTypeNullable extends ResolvedCorrectionProducer {
4748

4849
if (node is! NullLiteral &&
4950
!typeSystem.isAssignableTo(
50-
returnType.typeOrThrow,
51-
typeSystem.promoteToNonNull(type),
51+
type,
52+
returnType.typeOrThrow.withNullability(NullabilitySuffix.question),
5253
strictCasts: analysisOptions.strictCasts,
5354
)) {
5455
return;

pkg/analysis_server/lib/src/services/correction/dart/replace_return_type.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ class ReplaceReturnType extends ResolvedCorrectionProducer {
3232
Future<void> compute(ChangeBuilder builder) async {
3333
var node = this.node;
3434
if (node is Expression) {
35-
var typeSystem = libraryElement2.typeSystem;
36-
3735
var newType = node.staticType;
3836

3937
void updateNewType(SyntacticEntity entity) {

pkg/analysis_server/test/src/services/correction/fix/make_return_type_nullable_test.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:analysis_server/src/services/correction/fix.dart';
66
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
7+
import 'package:analyzer_testing/utilities/utilities.dart';
78
import 'package:test_reflective_loader/test_reflective_loader.dart';
89

910
import 'fix_processor.dart';
@@ -146,6 +147,21 @@ class B extends A {
146147
await assertNoFix();
147148
}
148149

150+
Future<void> test_nullable_type() async {
151+
await resolveTestCode('''
152+
int? f(String v) => v;
153+
''');
154+
await assertNoFix();
155+
}
156+
157+
Future<void> test_nullable_type_dynamic() async {
158+
writeAnalysisOptionsFile(analysisOptionsContent(strictCasts: true));
159+
await resolveTestCode('''
160+
int? f(dynamic v) => v;
161+
''');
162+
await assertNoFix();
163+
}
164+
149165
Future<void> test_returnTypeHasTypeArguments() async {
150166
await resolveTestCode('''
151167
List<String> f() {
@@ -158,4 +174,12 @@ List<String>? f() {
158174
}
159175
''');
160176
}
177+
178+
Future<void> test_unrelated_types() async {
179+
writeAnalysisOptionsFile(analysisOptionsContent(strictCasts: true));
180+
await resolveTestCode('''
181+
int f(dynamic v) => v;
182+
''');
183+
await assertNoFix();
184+
}
161185
}

pkg/analyzer/lib/src/dart/element/type_system.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,10 @@ class TypeSystemImpl implements TypeSystem {
713713
required covariant InterfaceElementImpl element,
714714
required NullabilitySuffix nullabilitySuffix,
715715
}) {
716-
return instantiateInterfaceToBounds(element: element, nullabilitySuffix: nullabilitySuffix);
716+
return instantiateInterfaceToBounds(
717+
element: element,
718+
nullabilitySuffix: nullabilitySuffix,
719+
);
717720
}
718721

719722
/// Given a [DartType] [type] and a list of types
@@ -753,7 +756,10 @@ class TypeSystemImpl implements TypeSystem {
753756
required covariant TypeAliasElementImpl element,
754757
required NullabilitySuffix nullabilitySuffix,
755758
}) {
756-
return instantiateTypeAliasToBounds(element: element, nullabilitySuffix: nullabilitySuffix);
759+
return instantiateTypeAliasToBounds(
760+
element: element,
761+
nullabilitySuffix: nullabilitySuffix,
762+
);
757763
}
758764

759765
/// Given uninstantiated [typeFormals], instantiate them to their bounds.

0 commit comments

Comments
 (0)