Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Unified Diff: pkg/analysis_server/lib/src/services/correction/fix_internal.dart

Issue 1468913004: Issue 25021. Fix for adding new required parameters when optional exist. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/correction/fix_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/services/correction/fix_internal.dart
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 67e82d24eb318f74e089071794f9b516520e8850..ce09e5a6d0e8137c4735bcc72ce2e1896103f0e9 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -390,12 +390,16 @@ class FixProcessor {
if (targetElement is ExecutableElement) {
List<ParameterElement> parameters = targetElement.parameters;
int numParameters = parameters.length;
- Expression argument = arguments[numParameters];
+ Iterable<ParameterElement> requiredParameters = parameters
+ .takeWhile((p) => p.parameterKind == ParameterKind.REQUIRED);
+ Iterable<ParameterElement> optionalParameters = parameters
+ .skipWhile((p) => p.parameterKind == ParameterKind.REQUIRED);
+ int numRequired = requiredParameters.length;
+ Expression argument = arguments[numRequired];
// prepare target
int targetOffset;
- if (numParameters != 0) {
- ParameterElement parameterElement = parameters.last;
- AstNode parameterNode = parameterElement.computeNode();
+ if (numRequired != 0) {
+ AstNode parameterNode = requiredParameters.last.computeNode();
targetOffset = parameterNode.end;
} else {
AstNode targetNode = targetElement.computeNode();
@@ -413,23 +417,26 @@ class FixProcessor {
{
SourceBuilder sb = new SourceBuilder(targetFile, targetOffset);
// append source
- if (numParameters != 0) {
+ if (numRequired != 0) {
+ sb.append(', ');
+ }
+ _appendParameterForArgument(sb, numRequired, argument);
+ if (numRequired != numParameters) {
sb.append(', ');
}
- _appendParameterForArgument(sb, numParameters, argument);
// add proposal
_insertBuilder(sb, targetElement);
_addFix(DartFixKind.ADD_MISSING_PARAMETER_REQUIRED, []);
}
// optional positional
- {
+ if (optionalParameters.isEmpty) {
SourceBuilder sb = new SourceBuilder(targetFile, targetOffset);
// append source
- if (numParameters != 0) {
+ if (numRequired != 0) {
sb.append(', ');
}
sb.append('[');
- _appendParameterForArgument(sb, numParameters, argument);
+ _appendParameterForArgument(sb, numRequired, argument);
sb.append(']');
// add proposal
_insertBuilder(sb, targetElement);
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/correction/fix_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698