Skip to content

Commit 990d991

Browse files
FMorschelCommit Queue
authored andcommitted
[DAS] Removes "Add null check" fix false-positive and fixes num special-casing operators
Fixes: #61056 Change-Id: I28dab2908a9a2f384190a4705dd7383aec86860c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442703 Reviewed-by: Brian Wilkerson <[email protected]> Auto-Submit: Felipe Morschel <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]> Reviewed-by: Samuel Rawlins <[email protected]>
1 parent 07c248c commit 990d991

15 files changed

+320
-25
lines changed

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class AddNullCheck extends ResolvedCorrectionProducer {
8989
return;
9090
}
9191
var fromType = _target.staticType;
92-
if (fromType == null) {
92+
if (fromType == null || fromType is InvalidType) {
9393
return;
9494
}
9595

@@ -129,15 +129,11 @@ class AddNullCheck extends ResolvedCorrectionProducer {
129129
} else if (parent is SpreadElement) {
130130
var literal = parent.thisOrAncestorOfType<TypedLiteral>();
131131
if (literal is ListLiteral) {
132-
toType = literal.typeOrThrow.asInstanceOf(
133-
typeProvider.iterableElement,
134-
);
132+
toType = literal.typeOrThrow.asInstanceOf(typeProvider.iterableElement);
135133
} else if (literal is SetOrMapLiteral) {
136134
toType =
137135
literal.typeOrThrow.isDartCoreSet
138-
? literal.typeOrThrow.asInstanceOf(
139-
typeProvider.iterableElement,
140-
)
136+
? literal.typeOrThrow.asInstanceOf(typeProvider.iterableElement)
141137
: literal.typeOrThrow.asInstanceOf(typeProvider.mapElement);
142138
}
143139
} else if (parent is YieldStatement) {

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ class CreateExtensionGetter extends _CreateExtensionMember {
8181
// Try to find the type of the field.
8282
var fieldTypeNode = climbPropertyAccess(nameNode);
8383
var fieldType = inferUndefinedExpressionType(fieldTypeNode);
84+
if (fieldType is InvalidType) {
85+
return;
86+
}
8487

8588
void writeGetter(DartEditBuilder builder) {
8689
if (inStaticContext) {
@@ -198,6 +201,9 @@ class CreateExtensionMethod extends _CreateExtensionMember {
198201
if (invocation ?? parent case Expression exp) {
199202
returnType = inferUndefinedExpressionType(exp);
200203
}
204+
if (returnType is InvalidType) {
205+
return;
206+
}
201207

202208
if (returnType is InterfaceType && returnType.isDartCoreFunction) {
203209
returnType = FunctionTypeImpl(
@@ -363,6 +369,9 @@ class CreateExtensionOperator extends _CreateExtensionMember {
363369
// Try to find the return type.
364370
returnType = inferUndefinedExpressionType(node) ?? VoidTypeImpl.instance;
365371
}
372+
if (returnType is InvalidType) {
373+
return;
374+
}
366375

367376
void writeMethod(DartEditBuilder builder) {
368377
if (builder.writeType(
@@ -469,6 +478,9 @@ class CreateExtensionSetter extends _CreateExtensionMember {
469478
// Try to find the type of the field.
470479
var fieldTypeNode = climbPropertyAccess(nameNode);
471480
var fieldType = inferUndefinedExpressionType(fieldTypeNode);
481+
if (fieldType is InvalidType) {
482+
return;
483+
}
472484

473485
void writeSetter(DartEditBuilder builder) {
474486
builder.writeSetterDeclaration(

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,9 @@ class CreateField extends CreateFieldOrGetter {
187187
return;
188188
}
189189
var fieldType = inferUndefinedExpressionType(fieldTypeNode);
190+
if (fieldType is InvalidType) {
191+
return;
192+
}
190193

191194
await _addDeclaration(
192195
builder: builder,

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

Lines changed: 5 additions & 1 deletion
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/type.dart';
89
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
910
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
1011
import 'package:analyzer_plugin/utilities/range_factory.dart';
@@ -47,14 +48,17 @@ class CreateFunction extends ResolvedCorrectionProducer {
4748
return;
4849
}
4950
insertOffset = enclosingMember.end;
51+
var type = inferUndefinedExpressionType(invocation);
52+
if (type is InvalidType) {
53+
return;
54+
}
5055
// Build method source.
5156
await builder.addDartFileEdit(file, (builder) {
5257
var eol = builder.eol;
5358
var sourcePrefix = '$eol$eol';
5459
builder.addInsertion(insertOffset, (builder) {
5560
builder.write(sourcePrefix);
5661
// append return type
57-
var type = inferUndefinedExpressionType(invocation);
5862
if (builder.writeType(type, groupName: 'RETURN_TYPE')) {
5963
builder.write(' ');
6064
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ class CreateGetter extends CreateFieldOrGetter {
183183

184184
var fieldTypeNode = climbPropertyAccess(nameNode);
185185
var fieldType = inferUndefinedExpressionType(fieldTypeNode);
186+
if (fieldType is InvalidType) {
187+
return;
188+
}
186189

187190
await _addDeclaration(
188191
builder: builder,

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ class CreateLocalVariable extends ResolvedCorrectionProducer {
6868
if (!(type == null ||
6969
type is InterfaceType ||
7070
type is FunctionType ||
71-
type is RecordType)) {
71+
type is RecordType ||
72+
type is InvalidType)) {
7273
return;
7374
}
7475
// build variable declaration source

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:analysis_server/src/services/correction/util.dart';
77
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
88
import 'package:analyzer/dart/ast/ast.dart';
99
import 'package:analyzer/dart/element/element.dart';
10+
import 'package:analyzer/dart/element/type.dart';
1011
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
1112
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
1213
import 'package:analyzer_plugin/utilities/range_factory.dart';
@@ -221,6 +222,11 @@ class CreateMethod extends ResolvedCorrectionProducer {
221222
if (targetSource == null) return;
222223

223224
var targetFile = targetSource.fullName;
225+
var type = inferUndefinedExpressionType(invocation);
226+
if (type is InvalidType) {
227+
return;
228+
}
229+
224230
await builder.addDartFileEdit(targetFile, (builder) {
225231
if (targetNode == null) return;
226232
builder.insertMethod(targetNode, (builder) {
@@ -229,7 +235,6 @@ class CreateMethod extends ResolvedCorrectionProducer {
229235
builder.write('static ');
230236
}
231237
// Append return type.
232-
var type = inferUndefinedExpressionType(invocation);
233238
if (builder.writeType(type, groupName: 'RETURN_TYPE')) {
234239
builder.write(' ');
235240
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ class CreateMethodOrFunction extends ResolvedCorrectionProducer {
8282
DartType? parameterType;
8383
var fieldTypeNode = climbPropertyAccess(node);
8484
parameterType = inferUndefinedExpressionType(fieldTypeNode);
85+
if (parameterType is InvalidType) {
86+
return;
87+
}
88+
8589
var target = getQualifiedPropertyTarget(node);
8690

8791
if (parameterType == null) {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:analysis_server/src/utilities/extensions/string.dart';
88
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
99
import 'package:analyzer/dart/ast/ast.dart';
1010
import 'package:analyzer/dart/element/element.dart';
11+
import 'package:analyzer/dart/element/type.dart';
1112
import 'package:analyzer/file_system/file_system.dart';
1213
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
1314
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -128,6 +129,9 @@ class _CreateMixin extends ResolvedCorrectionProducer {
128129
// either not expecting anything specific or expecting a type || object
129130
if (_expression != null) {
130131
var fieldType = inferUndefinedExpressionType(_expression);
132+
if (fieldType is InvalidType) {
133+
return;
134+
}
131135
if (fieldType != null &&
132136
(!typeSystem.isAssignableTo(fieldType, typeProvider.typeType) ||
133137
!typeSystem.isSubtypeOf(fieldType, typeProvider.objectType))) {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ class CreateOperator extends ResolvedCorrectionProducer {
9494
// Try to find the return type.
9595
returnType = inferUndefinedExpressionType(node) ?? VoidTypeImpl.instance;
9696
}
97+
if (returnType is InvalidType) {
98+
return;
99+
}
97100

98101
var targetClassElement = getTargetInterfaceElement(target);
99102
if (targetClassElement == null) {

0 commit comments

Comments
 (0)