This is an automated email from the ASF dual-hosted git repository.
dbalek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 3262aaac52 NBLS: Refactorings bug fixes. (#3926)
3262aaac52 is described below
commit 3262aaac52ecb7f5590f8a531b5babbd0a0d7003
Author: Dusan Balek <[email protected]>
AuthorDate: Thu Apr 7 11:39:12 2022 +0200
NBLS: Refactorings bug fixes. (#3926)
* Inconsistence between marking name method and invoking actions fixed.
* Created files should be indexed before returned to client.
* The name of method should be changed by Change Method Parameters
refactoring if requested.
* Rename Symbol renames wrong file - fixed.
* Extract Supperclass refactoring imports not available class - fixed.
---
.../java/lsp/server/protocol/LspTemplateUI.java | 11 ++++++++++-
.../lsp/server/protocol/TextDocumentServiceImpl.java | 19 ++++++++++++++++---
.../lsp/server/protocol/WorkspaceServiceImpl.java | 1 -
.../ChangeMethodParametersRefactoring.java | 9 +++++++++
.../ExtractSuperclassOrInterfaceRefactoring.java | 7 +++++++
.../java/lsp/server/refactoring/MoveRefactoring.java | 7 +++++++
.../lsp/server/refactoring/PullUpRefactoring.java | 7 +++++++
.../lsp/server/refactoring/PushDownRefactoring.java | 7 +++++++
.../plugins/ExtractSuperclassRefactoringPlugin.java | 8 ++++++--
9 files changed, 69 insertions(+), 7 deletions(-)
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/LspTemplateUI.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/LspTemplateUI.java
index e29fa9451c..b0845195b4 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/LspTemplateUI.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/LspTemplateUI.java
@@ -29,6 +29,7 @@ import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -49,6 +50,7 @@ import org.netbeans.api.project.SourceGroup;
import org.netbeans.api.project.SourceGroupModifier;
import org.netbeans.api.templates.CreateDescriptor;
import org.netbeans.api.templates.FileBuilder;
+import org.netbeans.modules.parsing.api.indexing.IndexingManager;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.filesystems.URLMapper;
@@ -109,7 +111,14 @@ final class LspTemplateUI {
try {
if (builder != null) {
List<FileObject> created = builder.build();
- return created != null ? (Object) created.stream().map(fo
-> fo.toURI().toString()).collect(Collectors.toList()) : null;
+ if (created == null) {
+ return null;
+ } else if (created.isEmpty()) {
+ return Collections.emptyList();
+ }
+ // Make sure the newly created files are indexed before
returned to client
+ IndexingManager.getDefault().refreshAllIndices(false,
true, created.toArray(new FileObject[0]));
+ return (Object) created.stream().map(fo ->
fo.toURI().toString()).collect(Collectors.toList());
}
return null;
} catch (IOException ex) {
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
index 74161b3f78..7cd46bbe1b 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java
@@ -218,6 +218,7 @@ import
org.netbeans.modules.refactoring.api.RenameRefactoring;
import org.netbeans.modules.refactoring.api.WhereUsedQuery;
import org.netbeans.modules.refactoring.api.impl.APIAccessor;
import org.netbeans.modules.refactoring.api.impl.SPIAccessor;
+import org.netbeans.modules.refactoring.java.api.JavaRefactoringUtils;
import org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants;
import org.netbeans.modules.refactoring.java.spi.hooks.JavaModificationResult;
import org.netbeans.modules.refactoring.plugins.FileRenamePlugin;
@@ -1208,8 +1209,14 @@ public class TextDocumentServiceImpl implements
TextDocumentService, LanguageCli
result.complete(null);
}
int pos = Utils.getOffset((LineDocument) doc,
params.getPosition());
+ TokenSequence<JavaTokenId> ts =
cc.getTokenHierarchy().tokenSequence(JavaTokenId.language());
+ ts.move(pos);
+ if (ts.moveNext() && ts.token().id() != JavaTokenId.WHITESPACE
&& ts.offset() == pos) {
+ pos += 1;
+ }
TreePath path = cc.getTreeUtilities().pathFor(pos);
RenameRefactoring ref = new
RenameRefactoring(Lookups.singleton(TreePathHandle.create(path, cc)));
+
ref.getContext().add(JavaRefactoringUtils.getClasspathInfoFor(cc.getFileObject()));
ref.setNewName("any");
Problem p = ref.fastCheckParameters();
boolean hasFatalProblem = false;
@@ -1221,7 +1228,6 @@ public class TextDocumentServiceImpl implements
TextDocumentService, LanguageCli
result.complete(null);
} else {
//XXX: better range computation
- TokenSequence<JavaTokenId> ts =
cc.getTokenHierarchy().tokenSequence(JavaTokenId.language());
int d = ts.move(pos);
if (ts.moveNext()) {
if (d == 0 && ts.token().id() !=
JavaTokenId.IDENTIFIER) {
@@ -1272,7 +1278,13 @@ public class TextDocumentServiceImpl implements
TextDocumentService, LanguageCli
if (cancel.get()) return ;
Document doc =
cc.getSnapshot().getSource().getDocument(true);
if (doc instanceof LineDocument) {
- TreePath path =
cc.getTreeUtilities().pathFor(Utils.getOffset((LineDocument) doc,
params.getPosition()));
+ int pos = Utils.getOffset((LineDocument) doc,
params.getPosition());
+ TokenSequence<JavaTokenId> ts =
cc.getTokenHierarchy().tokenSequence(JavaTokenId.language());
+ ts.move(pos);
+ if (ts.moveNext() && ts.token().id() !=
JavaTokenId.WHITESPACE && ts.offset() == pos) {
+ pos += 1;
+ }
+ TreePath path = cc.getTreeUtilities().pathFor(pos);
List<Object> lookupContent = new ArrayList<>();
lookupContent.add(TreePathHandle.create(path, cc));
@@ -1288,6 +1300,7 @@ public class TextDocumentServiceImpl implements
TextDocumentService, LanguageCli
}
refactoring[0] = new
RenameRefactoring(Lookups.fixed(lookupContent.toArray(new Object[0])));
+
refactoring[0].getContext().add(JavaRefactoringUtils.getClasspathInfoFor(cc.getFileObject()));
refactoring[0].setNewName(params.getNewName());
refactoring[0].setSearchInComments(true); //TODO?
}
@@ -1339,7 +1352,7 @@ public class TextDocumentServiceImpl implements
TextDocumentService, LanguageCli
List<RefactoringElementImplementation> fileChanges =
APIAccessor.DEFAULT.getFileChanges(session);
for (RefactoringElementImplementation rei : fileChanges) {
if (rei instanceof FileRenamePlugin.RenameFile) {
- String oldURI = params.getTextDocument().getUri();
+ String oldURI = Utils.toUri(rei.getParentFile());
int dot = oldURI.lastIndexOf('.');
int slash = oldURI.lastIndexOf('/');
String newURI = oldURI.substring(0, slash + 1) +
params.getNewName() + oldURI.substring(dot);
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
index c2ccd5b056..11f576e576 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
@@ -101,7 +101,6 @@ import
org.netbeans.modules.gsf.testrunner.ui.api.TestMethodController;
import org.netbeans.modules.gsf.testrunner.ui.api.TestMethodFinder;
import org.netbeans.modules.java.lsp.server.LspServerState;
import org.netbeans.modules.java.lsp.server.Utils;
-import org.netbeans.modules.java.lsp.server.db.DBAddConnection;
import
org.netbeans.modules.java.lsp.server.debugging.attach.AttachConfigurations;
import
org.netbeans.modules.java.lsp.server.debugging.attach.AttachNativeConfigurations;
import org.netbeans.modules.java.source.ElementHandleAccessor;
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
index 0e5edc8bb9..2250f7061b 100644
---
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
@@ -47,12 +47,14 @@ import org.eclipse.lsp4j.CodeActionParams;
import org.eclipse.lsp4j.MessageParams;
import org.eclipse.lsp4j.MessageType;
import org.netbeans.api.htmlui.HTMLDialog;
+import org.netbeans.api.java.lexer.JavaTokenId;
import org.netbeans.api.java.source.ClasspathInfo;
import org.netbeans.api.java.source.CompilationController;
import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.SourceUtils;
import org.netbeans.api.java.source.TreePathHandle;
+import org.netbeans.api.lexer.TokenSequence;
import org.netbeans.modules.editor.java.Utilities;
import org.netbeans.modules.java.lsp.server.Utils;
import org.netbeans.modules.java.lsp.server.protocol.CodeActionsProvider;
@@ -95,6 +97,11 @@ public final class ChangeMethodParametersRefactoring extends
CodeRefactoring {
}
info.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
int offset = getOffset(info, params.getRange().getStart());
+ TokenSequence<JavaTokenId> ts =
info.getTokenHierarchy().tokenSequence(JavaTokenId.language());
+ ts.move(offset);
+ if (ts.moveNext() && ts.token().id() != JavaTokenId.WHITESPACE &&
ts.offset() == offset) {
+ offset += 1;
+ }
Trees trees = info.getTrees();
TreePath path = info.getTreeUtilities().pathFor(offset);
Tree.Kind kind = null;
@@ -259,6 +266,8 @@ public final class ChangeMethodParametersRefactoring
extends CodeRefactoring {
}
String returnType = ui.getReturnType();
refactoring.setReturnType(returnType.length() > 0 ? returnType
: null);
+ String name = ui.getName();
+ refactoring.setMethodName(name.length() > 0 ? name : null);
List<ParameterUI> parameters = ui.getParameters();
ChangeParametersRefactoring.ParameterInfo[] params = new
ChangeParametersRefactoring.ParameterInfo[parameters.size()];
for (int i = 0; i < parameters.size(); i++) {
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/ExtractSuperclassOrInterfaceRefactoring.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/ExtractSuperclassOrInterfaceRefactoring.java
index 2bbf351876..ff53dc5c15 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/ExtractSuperclassOrInterfaceRefactoring.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/ExtractSuperclassOrInterfaceRefactoring.java
@@ -47,12 +47,14 @@ import org.eclipse.lsp4j.CodeActionParams;
import org.eclipse.lsp4j.MessageParams;
import org.eclipse.lsp4j.MessageType;
import org.netbeans.api.java.classpath.ClassPath;
+import org.netbeans.api.java.lexer.JavaTokenId;
import org.netbeans.api.java.source.ClasspathInfo;
import org.netbeans.api.java.source.CompilationController;
import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.TreePathHandle;
import org.netbeans.api.java.source.TreeUtilities;
+import org.netbeans.api.lexer.TokenSequence;
import org.netbeans.modules.java.lsp.server.Utils;
import org.netbeans.modules.java.lsp.server.protocol.CodeActionsProvider;
import org.netbeans.modules.java.lsp.server.protocol.NbCodeLanguageClient;
@@ -100,6 +102,11 @@ public final class ExtractSuperclassOrInterfaceRefactoring
extends CodeRefactori
}
info.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
int offset = getOffset(info, params.getRange().getStart());
+ TokenSequence<JavaTokenId> ts =
info.getTokenHierarchy().tokenSequence(JavaTokenId.language());
+ ts.move(offset);
+ if (ts.moveNext() && ts.token().id() != JavaTokenId.WHITESPACE &&
ts.offset() == offset) {
+ offset += 1;
+ }
String uri = Utils.toUri(info.getFileObject());
Trees trees = info.getTrees();
TreeUtilities treeUtilities = info.getTreeUtilities();
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/MoveRefactoring.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/MoveRefactoring.java
index 466f92b7c3..5187f8468d 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/MoveRefactoring.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/MoveRefactoring.java
@@ -55,6 +55,7 @@ import org.eclipse.lsp4j.MessageParams;
import org.eclipse.lsp4j.MessageType;
import org.netbeans.api.htmlui.HTMLDialog;
import org.netbeans.api.java.classpath.ClassPath;
+import org.netbeans.api.java.lexer.JavaTokenId;
import org.netbeans.api.java.project.JavaProjectConstants;
import org.netbeans.api.java.source.ClassIndex;
import org.netbeans.api.java.source.ClasspathInfo;
@@ -64,6 +65,7 @@ import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.ElementUtilities;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.TreePathHandle;
+import org.netbeans.api.lexer.TokenSequence;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectUtils;
@@ -118,6 +120,11 @@ public final class MoveRefactoring extends CodeRefactoring
{
}
info.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
int offset = getOffset(info, params.getRange().getStart());
+ TokenSequence<JavaTokenId> ts =
info.getTokenHierarchy().tokenSequence(JavaTokenId.language());
+ ts.move(offset);
+ if (ts.moveNext() && ts.token().id() != JavaTokenId.WHITESPACE &&
ts.offset() == offset) {
+ offset += 1;
+ }
String uri = Utils.toUri(info.getFileObject());
Element element = elementForOffset(info, offset);
if (element != null) {
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/PullUpRefactoring.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/PullUpRefactoring.java
index 86ea3e774c..4f8af76ea5 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/PullUpRefactoring.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/PullUpRefactoring.java
@@ -46,6 +46,7 @@ import org.eclipse.lsp4j.CodeActionKind;
import org.eclipse.lsp4j.CodeActionParams;
import org.eclipse.lsp4j.MessageParams;
import org.eclipse.lsp4j.MessageType;
+import org.netbeans.api.java.lexer.JavaTokenId;
import org.netbeans.api.java.source.ClasspathInfo;
import org.netbeans.api.java.source.CompilationController;
import org.netbeans.api.java.source.CompilationInfo;
@@ -54,6 +55,7 @@ import org.netbeans.api.java.source.ElementUtilities;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.TreePathHandle;
import org.netbeans.api.java.source.TreeUtilities;
+import org.netbeans.api.lexer.TokenSequence;
import org.netbeans.modules.java.lsp.server.Utils;
import org.netbeans.modules.java.lsp.server.protocol.CodeActionsProvider;
import org.netbeans.modules.java.lsp.server.protocol.NbCodeLanguageClient;
@@ -94,6 +96,11 @@ public final class PullUpRefactoring extends CodeRefactoring
{
}
info.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
int offset = getOffset(info, params.getRange().getStart());
+ TokenSequence<JavaTokenId> ts =
info.getTokenHierarchy().tokenSequence(JavaTokenId.language());
+ ts.move(offset);
+ if (ts.moveNext() && ts.token().id() != JavaTokenId.WHITESPACE &&
ts.offset() == offset) {
+ offset += 1;
+ }
String uri = Utils.toUri(info.getFileObject());
Trees trees = info.getTrees();
TreeUtilities treeUtilities = info.getTreeUtilities();
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/PushDownRefactoring.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/PushDownRefactoring.java
index 8291d658a9..2c839e97cf 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/PushDownRefactoring.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/refactoring/PushDownRefactoring.java
@@ -42,6 +42,7 @@ import org.eclipse.lsp4j.CodeActionKind;
import org.eclipse.lsp4j.CodeActionParams;
import org.eclipse.lsp4j.MessageParams;
import org.eclipse.lsp4j.MessageType;
+import org.netbeans.api.java.lexer.JavaTokenId;
import org.netbeans.api.java.source.ClassIndex;
import org.netbeans.api.java.source.ClasspathInfo;
import org.netbeans.api.java.source.CompilationController;
@@ -50,6 +51,7 @@ import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.JavaSource;
import org.netbeans.api.java.source.TreePathHandle;
import org.netbeans.api.java.source.TreeUtilities;
+import org.netbeans.api.lexer.TokenSequence;
import org.netbeans.modules.java.lsp.server.Utils;
import org.netbeans.modules.java.lsp.server.protocol.CodeActionsProvider;
import org.netbeans.modules.java.lsp.server.protocol.NbCodeLanguageClient;
@@ -90,6 +92,11 @@ public final class PushDownRefactoring extends
CodeRefactoring {
}
info.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED);
int offset = getOffset(info, params.getRange().getStart());
+ TokenSequence<JavaTokenId> ts =
info.getTokenHierarchy().tokenSequence(JavaTokenId.language());
+ ts.move(offset);
+ if (ts.moveNext() && ts.token().id() != JavaTokenId.WHITESPACE &&
ts.offset() == offset) {
+ offset += 1;
+ }
String uri = Utils.toUri(info.getFileObject());
Trees trees = info.getTrees();
SourcePositions sourcePositions = trees.getSourcePositions();
diff --git
a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/ExtractSuperclassRefactoringPlugin.java
b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/ExtractSuperclassRefactoringPlugin.java
index b2e1417c39..7a0dfcb868 100644
---
a/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/ExtractSuperclassRefactoringPlugin.java
+++
b/java/refactoring.java/src/org/netbeans/modules/refactoring/java/plugins/ExtractSuperclassRefactoringPlugin.java
@@ -20,7 +20,6 @@ package org.netbeans.modules.refactoring.java.plugins;
import com.sun.source.tree.*;
import com.sun.source.util.TreePath;
-import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
import com.sun.source.util.Trees;
import java.io.IOException;
import java.util.*;
@@ -611,7 +610,7 @@ public final class ExtractSuperclassRefactoringPlugin
extends JavaRefactoringPlu
))), false);
// create constructor
MethodTree newConstr =
make.Method(superclassConstr, block);
-
+ newConstr = removeAnnotations(make, newConstr);
newConstr =
removeRuntimeExceptions(workingCopy, superclassConstr, make, newConstr);
newConstr = genUtils.importFQNs(newConstr);
@@ -626,6 +625,11 @@ public final class ExtractSuperclassRefactoringPlugin
extends JavaRefactoringPlu
}
}
+ private static MethodTree removeAnnotations(final TreeMaker make,
MethodTree newConstr) {
+ return
make.Method(make.Modifiers(newConstr.getModifiers().getFlags(),
Collections.emptyList()), newConstr.getName(), newConstr.getReturnType(),
+ newConstr.getTypeParameters(), newConstr.getParameters(),
newConstr.getThrows(), newConstr.getBody(), (ExpressionTree)
newConstr.getDefaultValue());
+ }
+
private static MethodTree removeRuntimeExceptions(final WorkingCopy
javac, ExecutableElement superclassConstr, final TreeMaker make, MethodTree
newConstr) {
int i = 0;
TypeMirror rte =
javac.getElements().getTypeElement("java.lang.RuntimeException").asType();
//NOI18N
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists