@@ -85,16 +85,17 @@ public class AssignToVariableAssistProposal extends LinkedCorrectionProposal {
85
85
private final int fVariableKind ;
86
86
private final List <ASTNode > fNodesToAssign ; // ExpressionStatement or SingleVariableDeclaration(s)
87
87
private final ITypeBinding fTypeBinding ;
88
+ private final List <String > fParamNames ;
88
89
89
90
private VariableDeclarationFragment fExistingFragment ;
90
91
91
92
public AssignToVariableAssistProposal (ICompilationUnit cu , int variableKind , ExpressionStatement node , ITypeBinding typeBinding , int relevance ) {
92
93
super ("" , JavaCodeActionKind .QUICK_ASSIST , cu , null , relevance ); //$NON-NLS-1$
93
94
94
95
fVariableKind = variableKind ;
96
+ fParamNames = null ;
95
97
fNodesToAssign = new ArrayList <>();
96
98
fNodesToAssign .add (node );
97
-
98
99
fTypeBinding = Bindings .normalizeForDeclarationUse (typeBinding , node .getAST ());
99
100
if (variableKind == LOCAL ) {
100
101
setDisplayName (CorrectionMessages .AssignToVariableAssistProposal_assigntolocal_description );
@@ -108,6 +109,7 @@ public AssignToVariableAssistProposal(ICompilationUnit cu, String kind, int vari
108
109
super ("" , kind , cu , null , relevance ); //$NON-NLS-1$
109
110
110
111
fVariableKind = variableKind ;
112
+ fParamNames = null ;
111
113
fNodesToAssign = new ArrayList <>();
112
114
fNodesToAssign .add (node );
113
115
@@ -128,7 +130,7 @@ public AssignToVariableAssistProposal(ICompilationUnit cu, SingleVariableDeclara
128
130
fNodesToAssign .add (parameter );
129
131
fTypeBinding = typeBinding ;
130
132
fExistingFragment = existingFragment ;
131
-
133
+ fParamNames = null ;
132
134
if (existingFragment == null ) {
133
135
setDisplayName (CorrectionMessages .AssignToVariableAssistProposal_assignparamtofield_description );
134
136
} else {
@@ -143,6 +145,8 @@ public AssignToVariableAssistProposal(ICompilationUnit cu, List<SingleVariableDe
143
145
fNodesToAssign = new ArrayList <>();
144
146
fNodesToAssign .addAll (parameters );
145
147
fTypeBinding = null ;
148
+ fParamNames = new ArrayList <>();
149
+ populateNames (parameters );
146
150
147
151
setDisplayName (CorrectionMessages .AssignToVariableAssistProposal_assignallparamstofields_description );
148
152
}
@@ -161,6 +165,16 @@ protected ASTRewrite getRewrite() throws CoreException {
161
165
}
162
166
}
163
167
168
+ private void populateNames (List <SingleVariableDeclaration > parameters ) {
169
+ if (parameters != null && parameters .size () > 0 ) {
170
+ for (SingleVariableDeclaration param : parameters ) {
171
+ if (param .getName () != null ) {
172
+ fParamNames .add (param .getName ().getIdentifier ());
173
+ }
174
+ }
175
+ }
176
+ }
177
+
164
178
private ASTRewrite doAddLocal () {
165
179
ASTNode nodeToAssign = fNodesToAssign .get (0 );
166
180
Expression expression = ((ExpressionStatement ) nodeToAssign ).getExpression ();
@@ -373,7 +387,28 @@ private String[] suggestFieldNames(ITypeBinding binding, Expression expression,
373
387
}
374
388
375
389
private Collection <String > getUsedVariableNames (ASTNode nodeToAssign ) {
376
- return Arrays .asList (ASTResolving .getUsedVariableNames (nodeToAssign ));
390
+ Collection <String > usedVarNames = Arrays .asList (ASTResolving .getUsedVariableNames (nodeToAssign ));
391
+ Collection <String > additionalVarNames = getRemainingParamNamed (nodeToAssign );
392
+ if (additionalVarNames != null ) {
393
+ usedVarNames = new ArrayList <>(Arrays .asList (ASTResolving .getUsedVariableNames (nodeToAssign )));
394
+ usedVarNames .addAll (additionalVarNames );
395
+ }
396
+ return usedVarNames ;
397
+ }
398
+
399
+ private ArrayList <String > getRemainingParamNamed (ASTNode nodeToAssign ) {
400
+ ArrayList <String > paramNames = null ;
401
+ if (fParamNames != null ) {
402
+ paramNames = new ArrayList <>();
403
+ paramNames .addAll (fParamNames );
404
+ if (nodeToAssign instanceof SingleVariableDeclaration && ((SingleVariableDeclaration ) nodeToAssign ).getName () != null ) {
405
+ int index = fNodesToAssign .indexOf (nodeToAssign );
406
+ if (index >= 0 && index < paramNames .size ()) {
407
+ paramNames .remove (index );
408
+ }
409
+ }
410
+ }
411
+ return paramNames ;
377
412
}
378
413
379
414
private int findAssignmentInsertIndex (List <Statement > statements , ASTNode nodeToAssign ) {
0 commit comments