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;
   }
 }