Skip to content

Commit 757022e

Browse files
authored
Merge pull request #408 from shivam71/change_method_parameter_fix
Patch for the type name issue in change method parameter refactoring code action.
2 parents 1b1cd7a + 2afe582 commit 757022e

File tree

2 files changed

+141
-0
lines changed

2 files changed

+141
-0
lines changed

build.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
patches/nbjavac-not-required.diff
6767
patches/l10n-licence.diff
6868
patches/dev-dependency-licenses.diff
69+
patches/change-method-parameters-refactoring-qualified-names.diff
6970
</string>
7071
<filterchain>
7172
<tokenfilter delimoutput=" ">
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/ChangeMethodParametersRefactoring.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/ChangeMethodParametersRefactoring.java
2+
index ecba2107a2..f5239a57b7 100644
3+
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/ChangeMethodParametersRefactoring.java
4+
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/ChangeMethodParametersRefactoring.java
5+
@@ -19,6 +19,7 @@
6+
package org.netbeans.modules.java.lsp.server.refactoring;
7+
8+
import com.google.gson.Gson;
9+
+import com.sun.source.tree.MethodTree;
10+
import com.sun.source.tree.Tree;
11+
import com.sun.source.util.TreePath;
12+
import com.sun.source.util.Trees;
13+
@@ -197,10 +198,11 @@ public final class ChangeMethodParametersRefactoring extends CodeRefactoring {
14+
ParameterUI[] params = new ParameterUI[method.getParameters().size()];
15+
for (int i = 0; i < method.getParameters().size(); i++) {
16+
VariableElement param = method.getParameters().get(i);
17+
- ChangeParametersRefactoring.ParameterInfo info = new ChangeParametersRefactoring.ParameterInfo(i, param.getSimpleName().toString(), Utilities.getTypeName(ci, param.asType(), true).toString(), null);
18+
+ ChangeParametersRefactoring.ParameterInfo info = ChangeParametersRefactoring.ParameterInfo.create(ci, param);
19+
params[i] = new ParameterUI(info.getType(), info.getName());
20+
params[i].assignInfo(info);
21+
}
22+
+ MethodTree methodTree = ci.getTrees().getTree(method);
23+
Modifier mod;
24+
if (method.getModifiers().contains(javax.lang.model.element.Modifier.PUBLIC)) {
25+
mod = Modifier.PUBLIC;
26+
@@ -213,7 +215,7 @@ public final class ChangeMethodParametersRefactoring extends CodeRefactoring {
27+
}
28+
ChangeMethodParameterUI model = new ChangeMethodParameterUI();
29+
model.withName(method.getSimpleName().toString())
30+
- .withReturnType(Utilities.getTypeName(ci, method.getReturnType(), true).toString())
31+
+ .withReturnType(methodTree.getReturnType().toString())
32+
.withSelectedModifier(mod)
33+
.withIsStatic(method.getModifiers().contains(javax.lang.model.element.Modifier.STATIC))
34+
.withParameters(params)
35+
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/api/ChangeParametersRefactoring.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/api/ChangeParametersRefactoring.java
36+
index a09c737efe..840203c4dd 100644
37+
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/api/ChangeParametersRefactoring.java
38+
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/api/ChangeParametersRefactoring.java
39+
@@ -18,10 +18,14 @@
40+
*/
41+
package org.netbeans.modules.refactoring.java.api;
42+
43+
+import com.sun.source.tree.VariableTree;
44+
import java.util.Set;
45+
+import javax.lang.model.element.ExecutableElement;
46+
import javax.lang.model.element.Modifier;
47+
+import javax.lang.model.element.VariableElement;
48+
import org.netbeans.api.annotations.common.CheckForNull;
49+
import org.netbeans.api.annotations.common.NullAllowed;
50+
+import org.netbeans.api.java.source.CompilationInfo;
51+
import org.netbeans.api.java.source.TreePathHandle;
52+
import org.netbeans.modules.refactoring.api.AbstractRefactoring;
53+
import org.openide.util.lookup.Lookups;
54+
@@ -199,6 +203,19 @@ public final class ChangeParametersRefactoring extends AbstractRefactoring {
55+
* Parameter can be added, changed or moved to another position.
56+
*/
57+
public static final class ParameterInfo {
58+
+ public static ParameterInfo create(CompilationInfo info, VariableElement parameter) {
59+
+ VariableTree parTree = (VariableTree) info.getTrees().getTree(parameter);
60+
+ ExecutableElement method = (ExecutableElement) parameter.getEnclosingElement();
61+
+ String typeRepresentation;
62+
+ int index = method.getParameters().indexOf(parameter);
63+
+ if (method.isVarArgs() && index == method.getParameters().size() - 1) {
64+
+ typeRepresentation = parTree.getType().toString().replace("[]", "..."); // NOI18N
65+
+ } else {
66+
+ typeRepresentation = parTree.getType().toString();
67+
+ }
68+
+ return new ChangeParametersRefactoring.ParameterInfo(index, parameter.getSimpleName().toString(), typeRepresentation, null);
69+
+ }
70+
+
71+
int origIndex;
72+
String name;
73+
String type;
74+
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/IntroduceParameterPlugin.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/IntroduceParameterPlugin.java
75+
index 140b029030..01dd960595 100644
76+
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/IntroduceParameterPlugin.java
77+
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/IntroduceParameterPlugin.java
78+
@@ -497,14 +497,8 @@ public class IntroduceParameterPlugin extends JavaRefactoringPlugin {
79+
paramTable = new ChangeParametersRefactoring.ParameterInfo[parameters.size() + 1];
80+
for (int originalIndex = 0; originalIndex < parameters.size(); originalIndex++) {
81+
VariableElement param = parameters.get(originalIndex);
82+
- VariableTree parTree = (VariableTree) info.getTrees().getTree(param);
83+
- String typeRepresentation;
84+
- if (method.isVarArgs() && originalIndex == parameters.size()-1) {
85+
- typeRepresentation = parTree.getType().toString().replace("[]", "..."); // NOI18N
86+
- } else {
87+
- typeRepresentation = parTree.getType().toString();
88+
- }
89+
- paramTable[originalIndex] = new ChangeParametersRefactoring.ParameterInfo(originalIndex, param.getSimpleName().toString(), typeRepresentation, null);
90+
+
91+
+ paramTable[originalIndex] = ChangeParametersRefactoring.ParameterInfo.create(info, param);
92+
}
93+
index = paramTable.length - 1;
94+
if (method.isVarArgs()) {
95+
diff --git a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/ChangeParametersPanel.java b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/ChangeParametersPanel.java
96+
index 2669bc1240..935097f9b9 100644
97+
--- a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/ChangeParametersPanel.java
98+
+++ b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/ui/ChangeParametersPanel.java
99+
@@ -179,6 +179,7 @@ public class ChangeParametersPanel extends JPanel implements CustomRefactoringPa
100+
try {
101+
info.toPhase(org.netbeans.api.java.source.JavaSource.Phase.RESOLVED);
102+
ExecutableElement e = (ExecutableElement) refactoredObj.resolveElement(info);
103+
+ MethodTree methodTree = (MethodTree) refactoredObj.resolve(info).getLeaf();
104+
isConstructor = e.getKind() == ElementKind.CONSTRUCTOR;
105+
TreePath enclosingClass = JavaRefactoringUtils.findEnclosingClass(info, refactoredObj.resolve(info), true, true, true, true, true);
106+
TreePathHandle tph = TreePathHandle.create(enclosingClass, info);
107+
@@ -187,10 +188,9 @@ public class ChangeParametersPanel extends JPanel implements CustomRefactoringPa
108+
enclosingElement.getSimpleName().toString() :
109+
e.getSimpleName().toString());
110+
final FileObject fileObject = refactoredObj.getFileObject();
111+
- final String returnType = e.getReturnType().toString();
112+
+ final String returnType = methodTree.getReturnType().toString();
113+
final long[] returnSpan = {-1, -1};
114+
if(!isConstructor) {
115+
- MethodTree methodTree = (MethodTree) refactoredObj.resolve(info).getLeaf();
116+
final long methodStart = info.getTreeUtilities().findNameSpan(methodTree)[0];
117+
Tree tree = methodTree.getReturnType();
118+
returnSpan[0] = tree == null ? methodStart -1 : info.getTrees().getSourcePositions().getStartPosition(info.getCompilationUnit(), tree);
119+
@@ -764,19 +764,13 @@ public class ChangeParametersPanel extends JPanel implements CustomRefactoringPa
120+
List<? extends VariableElement> pars = method.getParameters();
121+
int originalIndex = 0;
122+
for (VariableElement par : pars) {
123+
- VariableTree parTree = (VariableTree) info.getTrees().getTree(par);
124+
- String typeRepresentation;
125+
- if (method.isVarArgs() && originalIndex == pars.size() - 1) {
126+
- typeRepresentation = getTypeStringRepresentation(parTree).replace("[]", "..."); // NOI18N
127+
- } else {
128+
- typeRepresentation = getTypeStringRepresentation(parTree);
129+
- }
130+
+ ParameterInfo paramInfo = ParameterInfo.create(info, par);
131+
LocalVarScanner scan = new LocalVarScanner(info, null);
132+
scan.scan(path, par);
133+
Boolean removable = !scan.hasRefernces();
134+
// Used to check if var was user in overridden/overriding methods
135+
// if (model.getRowCount()<=originalIndex) {
136+
- newModel.add(new Object[]{typeRepresentation, par.toString(), "", originalIndex, removable});
137+
+ newModel.add(new Object[]{paramInfo.getType(), paramInfo.getName(), "", originalIndex, removable});
138+
// } else {
139+
// removable = Boolean.valueOf(model.isRemovable(originalIndex) && removable.booleanValue());
140+
// ((Vector) model.getDataVector().get(originalIndex)).set(4, removable);

0 commit comments

Comments
 (0)