[analyzer] use preferred quote-style for `AddMissingRequiredArgument`

Bug: #49559
Change-Id: Iec3eea9915e0f4093aad8caa3fc8635081f3f9db
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/260523
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index f6f6dc6..8571456 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -782,9 +782,12 @@
     // If appendColon is false, default values should never be appended.
     if (element is ConstructorElement && appendColon) {
       if (Flutter.instance.isWidget(element.enclosingElement3)) {
+        var codeStyleOptions = request
+            .analysisSession.analysisContext.analysisOptions.codeStyleOptions;
         // Don't bother with nullability. It won't affect default list values.
-        var defaultValue =
-            getDefaultStringParameterValue(parameter, withNullability: false);
+        var defaultValue = getDefaultStringParameterValue(
+            parameter, codeStyleOptions,
+            withNullability: false);
         // TODO(devoncarew): Should we remove the check here? We would then
         // suggest values for param types like closures.
         if (defaultValue != null && defaultValue.text == '[]') {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
index a1f4f68..a2f978e 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/protocol_server.dart'
     show CompletionSuggestion, Location;
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analyzer/dart/analysis/code_style_options.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -165,7 +166,8 @@
 }
 
 /// Return a default argument value for the given [parameter].
-DefaultArgument? getDefaultStringParameterValue(ParameterElement parameter,
+DefaultArgument? getDefaultStringParameterValue(
+    ParameterElement parameter, CodeStyleOptions codeStyleOptions,
     {required bool withNullability}) {
   var type = parameter.type;
   if (type is InterfaceType) {
@@ -174,7 +176,8 @@
     } else if (type.isDartCoreMap) {
       return DefaultArgument('{}', cursorPosition: 1);
     } else if (type.isDartCoreString) {
-      return DefaultArgument("''", cursorPosition: 1);
+      var quote = codeStyleOptions.preferredQuoteForStrings;
+      return DefaultArgument('$quote$quote', cursorPosition: 1);
     }
   } else if (type is FunctionType) {
     var params = type.parameters
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
index e818a51..2831117 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
@@ -74,7 +74,7 @@
       int offset;
       var hasTrailingComma = false;
       var insertBetweenParams = false;
-      List<Expression> arguments = argumentList.arguments;
+      var arguments = argumentList.arguments;
       if (arguments.isEmpty) {
         offset = argumentList.leftParenthesis.end;
       } else {
@@ -93,7 +93,10 @@
         }
       }
 
-      var defaultValue = getDefaultStringParameterValue(missingParameter,
+      var codeStyleOptions = sessionHelper
+          .session.analysisContext.analysisOptions.codeStyleOptions;
+      var defaultValue = getDefaultStringParameterValue(
+          missingParameter, codeStyleOptions,
           withNullability: libraryElement.isNonNullableByDefault &&
               (missingParameter.library?.isNonNullableByDefault ?? false));
 
@@ -107,13 +110,14 @@
 
           // Use defaultValue.cursorPosition if it's not null.
           if (defaultValue != null) {
+            var text = defaultValue.text;
             var cursorPosition = defaultValue.cursorPosition;
             if (cursorPosition != null) {
-              builder.write(defaultValue.text.substring(0, cursorPosition));
+              builder.write(text.substring(0, cursorPosition));
               builder.selectHere();
-              builder.write(defaultValue.text.substring(cursorPosition));
+              builder.write(text.substring(cursorPosition));
             } else {
-              builder.addSimpleLinkedEdit('VALUE', defaultValue.text);
+              builder.addSimpleLinkedEdit('VALUE', text);
             }
           } else {
             builder.addSimpleLinkedEdit('VALUE', 'null');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
index 9f07038..f4b1faf 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../../../../analysis_server_base.dart';
 import 'fix_processor.dart';
 
 void main() {
@@ -360,6 +361,29 @@
 ''');
   }
 
+  Future<void> test_doubleQuotes() async {
+    var config = AnalysisOptionsFileConfig(
+      lints: ['prefer_double_quotes'],
+    );
+    newAnalysisOptionsYamlFile(
+      testPackageRootPath,
+      config.toContent(),
+    );
+
+    await resolveTestCode('''
+test({required String a}) {}
+void f() {
+  test();
+}
+''');
+    await assertHasFix('''
+test({required String a}) {}
+void f() {
+  test(a: "");
+}
+''');
+  }
+
   Future<void> test_multiple() async {
     await resolveTestCode('''
 test({required int a, required int bcd}) {}