DAS: Rearrange code to promote variables better
The motivation here was to remove the local duplicate variables,
`isEmptyIdentifier_final`, `context_final`, and `returnType_final`.
These variables only existed because the variables they
duplicate lose their promoted types inside the `builder.addDartFileEdit`
closure. They lose their promoted type because they are multiply
assigned.
This CL simplifies each method by taking advantage of early returns
and implicit late assignment.
Change-Id: I81ff248d97e875a5b75c7d20b8e95f1b0c08ea24
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/417701
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not_empty.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not_empty.dart
index 1b66371..f67aa9c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not_empty.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not_empty.dart
@@ -24,56 +24,53 @@
@override
Future<void> compute(ChangeBuilder builder) async {
- // prepare "expr.isEmpty"
- SimpleIdentifier? isEmptyIdentifier;
- AstNode? isEmptyAccess;
- if (node is SimpleIdentifier) {
- var identifier = node as SimpleIdentifier;
- var parent = identifier.parent;
- // normal case (but rare)
- if (parent is PropertyAccess) {
- isEmptyIdentifier = parent.propertyName;
- isEmptyAccess = parent;
- }
- // usual case
- if (parent is PrefixedIdentifier) {
- isEmptyIdentifier = parent.identifier;
- isEmptyAccess = parent;
- }
- }
- if (isEmptyIdentifier == null || isEmptyAccess == null) {
+ if (node is! SimpleIdentifier) {
return;
}
- // should be "isEmpty"
+
+ // Prepare `expr.isEmpty`.
+ SimpleIdentifier isEmptyIdentifier;
+ AstNode isEmptyAccess;
+ var identifier = node as SimpleIdentifier;
+ var parent = identifier.parent;
+ if (parent is PropertyAccess) {
+ // Normal case (but rare).
+ isEmptyIdentifier = parent.propertyName;
+ isEmptyAccess = parent;
+ } else if (parent is PrefixedIdentifier) {
+ // Usual case.
+ isEmptyIdentifier = parent.identifier;
+ isEmptyAccess = parent;
+ } else {
+ return;
+ }
+
+ // Should be `isEmpty`.
var propertyElement = isEmptyIdentifier.element;
if (propertyElement == null || 'isEmpty' != propertyElement.name3) {
return;
}
- // should have "isNotEmpty"
+ // Should have `isNotEmpty`.
var propertyTarget = propertyElement.enclosingElement2;
if (propertyTarget == null ||
getChildren(propertyTarget, 'isNotEmpty').isEmpty) {
return;
}
- // should be in PrefixExpression
+ // Should be in `PrefixExpression`.
if (isEmptyAccess.parent is! PrefixExpression) {
return;
}
var prefixExpression = isEmptyAccess.parent as PrefixExpression;
- // should be !
+ // Should be `!`.
if (prefixExpression.operator.type != TokenType.BANG) {
return;
}
- var isEmptyIdentifier_final = isEmptyIdentifier;
await builder.addDartFileEdit(file, (builder) {
builder.addDeletion(
range.startStart(prefixExpression, prefixExpression.operand),
);
- builder.addSimpleReplacement(
- range.node(isEmptyIdentifier_final),
- 'isNotEmpty',
- );
+ builder.addSimpleReplacement(range.node(isEmptyIdentifier), 'isNotEmpty');
});
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_field_parameter.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_field_parameter.dart
index 83799ee..bb62c44 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_field_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_field_parameter.dart
@@ -11,6 +11,7 @@
import 'package:analyzer_plugin/utilities/assist/assist.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/range_factory.dart';
+import 'package:collection/collection.dart';
class ConvertToFieldParameter extends ResolvedCorrectionProducer {
ConvertToFieldParameter({required super.context});
@@ -44,48 +45,38 @@
if (visitor.count != 1) {
return;
}
- // find the field initializer
- ConstructorFieldInitializer? parameterInitializer;
- for (var initializer in initializers) {
- if (initializer is ConstructorFieldInitializer) {
- var expression = initializer.expression;
- if (expression is SimpleIdentifier &&
- expression.name == parameterName) {
- parameterInitializer = initializer;
- }
- }
- }
+ // Find the field initializer.
+ var parameterInitializer = initializers
+ .whereType<ConstructorFieldInitializer>()
+ .firstWhereOrNull((i) {
+ var expression = i.expression;
+ return expression is SimpleIdentifier &&
+ expression.name == parameterName;
+ });
if (parameterInitializer == null) {
return;
}
var fieldName = parameterInitializer.fieldName.name;
- var context_final = context;
- var parameterInitializer_final = parameterInitializer;
await builder.addDartFileEdit(file, (builder) {
- // replace parameter
+ // Replace the parameter.
builder.addSimpleReplacement(
- range.node(context_final.parameter),
+ range.node(context.parameter),
'this.$fieldName',
);
- // remove initializer
- var initializerIndex = initializers.indexOf(parameterInitializer_final);
+ // Remove the initializer.
+ var initializerIndex = initializers.indexOf(parameterInitializer);
if (initializers.length == 1) {
builder.addDeletion(
- range.endEnd(
- context_final.constructor.parameters,
- parameterInitializer_final,
- ),
+ range.endEnd(context.constructor.parameters, parameterInitializer),
);
} else {
if (initializerIndex == 0) {
var next = initializers[initializerIndex + 1];
- builder.addDeletion(
- range.startStart(parameterInitializer_final, next),
- );
+ builder.addDeletion(range.startStart(parameterInitializer, next));
} else {
var prev = initializers[initializerIndex - 1];
- builder.addDeletion(range.endEnd(prev, parameterInitializer_final));
+ builder.addDeletion(range.endEnd(prev, parameterInitializer));
}
}
});
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_return_type_nullable.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_return_type_nullable.dart
index 433d9e3..0522316 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_return_type_nullable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_return_type_nullable.dart
@@ -45,21 +45,6 @@
return;
}
- if (body.isAsynchronous || body.isGenerator) {
- if (returnType is! NamedType) {
- return;
- }
- var typeArguments = returnType.typeArguments;
- if (typeArguments == null) {
- return;
- }
- var arguments = typeArguments.arguments;
- if (arguments.length != 1) {
- return;
- }
- returnType = arguments[0];
- }
-
if (node is! NullLiteral &&
!typeSystem.isAssignableTo(
returnType.typeOrThrow,
@@ -69,9 +54,8 @@
return;
}
- var returnType_final = returnType;
await builder.addDartFileEdit(file, (builder) {
- builder.addSimpleInsertion(returnType_final.end, '?');
+ builder.addSimpleInsertion(returnType.end, '?');
});
}
@@ -80,11 +64,29 @@
if (function is FunctionExpression) {
function = function.parent;
}
+ TypeAnnotation? returnType;
if (function is MethodDeclaration) {
- return function.returnType;
+ returnType = function.returnType;
} else if (function is FunctionDeclaration) {
- return function.returnType;
+ returnType = function.returnType;
+ } else {
+ return null;
}
- return null;
+
+ if (body.isAsynchronous || body.isGenerator) {
+ if (returnType is! NamedType) {
+ return null;
+ }
+ var typeArguments = returnType.typeArguments;
+ if (typeArguments == null) {
+ return null;
+ }
+ var arguments = typeArguments.arguments;
+ if (arguments.length != 1) {
+ return null;
+ }
+ returnType = arguments.single;
+ }
+ return returnType;
}
}