Elements. Migrate AddMissingRequiredArgument.
Change-Id: I155f1be9d36ed45c3a814326864e76b713559881
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/387131
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/analyzer_use_new_elements.txt b/pkg/analysis_server/analyzer_use_new_elements.txt
index eea633f..8b7ec22 100644
--- a/pkg/analysis_server/analyzer_use_new_elements.txt
+++ b/pkg/analysis_server/analyzer_use_new_elements.txt
@@ -16,3 +16,4 @@
lib/src/services/correction/dart/add_late.dart
lib/src/services/correction/dart/add_leading_newline_to_string.dart
lib/src/services/correction/dart/add_missing_parameter_named.dart
+lib/src/services/correction/dart/add_missing_required_argument.dart
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 a97c531..ecce60b 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -12,6 +12,7 @@
import 'package:analysis_server/src/utilities/extensions/flutter.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/source/source.dart';
@@ -171,6 +172,29 @@
return null;
}
+/// Return a default argument value for the given [parameter].
+DefaultArgument? getDefaultStringParameterValue2(
+ FormalParameterElement parameter, String quote) {
+ var type = parameter.type;
+ if (type is InterfaceType) {
+ if (type.isDartCoreList) {
+ return DefaultArgument('[]', cursorPosition: 1);
+ } else if (type.isDartCoreMap) {
+ return DefaultArgument('{}', cursorPosition: 1);
+ } else if (type.isDartCoreString) {
+ return DefaultArgument('$quote$quote', cursorPosition: 1);
+ }
+ } else if (type is FunctionType) {
+ var params = type.parameters
+ .map((p) => '${getTypeString(p.type)}${p.name}')
+ .join(', ');
+ // TODO(devoncarew): Support having this method return text with newlines.
+ var text = '($params) { }';
+ return DefaultArgument(text, cursorPosition: text.length - 2);
+ }
+ return null;
+}
+
String getRequestLineIndent(DartCompletionRequest request) {
var content = request.content;
var lineStartOffset = request.offset;
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 d6e3c80..a19897c 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
@@ -8,7 +8,7 @@
import 'package:analysis_server/src/utilities/extensions/flutter.dart';
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
import 'package:collection/collection.dart';
@@ -33,7 +33,7 @@
@override
Future<void> compute(ChangeBuilder builder) async {
InstanceCreationExpression? creation;
- Element? targetElement;
+ Element2? targetElement;
ArgumentList? argumentList;
if (node is SimpleIdentifier ||
@@ -41,12 +41,12 @@
node is NamedType) {
var invocation = node.parent;
if (invocation is MethodInvocation) {
- targetElement = invocation.methodName.staticElement;
+ targetElement = invocation.methodName.element;
argumentList = invocation.argumentList;
} else {
creation = invocation?.thisOrAncestorOfType();
if (creation != null) {
- targetElement = creation.constructorName.staticElement;
+ targetElement = creation.constructorName.element;
argumentList = creation.argumentList;
}
}
@@ -57,7 +57,7 @@
return;
}
- if (targetElement is ExecutableElement && argumentList != null) {
+ if (targetElement is ExecutableElement2 && argumentList != null) {
// Format: "Missing required argument 'foo'."
var messageParts =
diagnostic.problemMessage.messageText(includeUrl: false).split("'");
@@ -66,7 +66,7 @@
}
_missingParameterName = messageParts[1];
- var missingParameter = targetElement.parameters.firstWhereOrNull(
+ var missingParameter = targetElement.formalParameters.firstWhereOrNull(
(p) => p.name == _missingParameterName,
);
if (missingParameter == null) {
@@ -94,7 +94,7 @@
}
var codeStyleOptions = getCodeStyleOptions(unitResult.file);
- var defaultValue = getDefaultStringParameterValue(
+ var defaultValue = getDefaultStringParameterValue2(
missingParameter, codeStyleOptions.preferredQuoteForStrings);
await builder.addDartFileEdit(file, (builder) {