diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/ChangeMethodParametersRefactoring.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/ChangeMethodParametersRefactoring.java index 11c5bce7ef47..849b4b6804b5 100644 --- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/ChangeMethodParametersRefactoring.java +++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/ChangeMethodParametersRefactoring.java @@ -48,6 +48,7 @@ import org.netbeans.api.java.source.CompilationInfo; 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.java.source.TreeUtilities; import org.netbeans.modules.editor.java.Utilities; @@ -87,31 +88,27 @@ public List getCodeActions(ResultIterator resultIterator, CodeAction } info.toPhase(JavaSource.Phase.ELEMENTS_RESOLVED); int offset = getOffset(info, params.getRange().getStart()); - String uri = Utils.toUri(info.getFileObject()); Trees trees = info.getTrees(); TreePath path = info.getTreeUtilities().pathFor(offset); Tree.Kind kind = null; while (path != null && (kind = path.getLeaf().getKind()) != Tree.Kind.METHOD && kind != Tree.Kind.METHOD_INVOCATION && kind != Tree.Kind.NEW_CLASS && kind != Tree.Kind.MEMBER_REFERENCE) { path = path.getParentPath(); } + Element element = null; + FileObject elementSource = null; if (kind == Tree.Kind.METHOD_INVOCATION || kind == Tree.Kind.NEW_CLASS || kind == Tree.Kind.MEMBER_REFERENCE) { - Element element = trees.getElement(path); + element = trees.getElement(path); if (element == null || element.asType().getKind() == TypeKind.ERROR) { return Collections.emptyList(); } - ExecutableElement method = (ExecutableElement) element; - path = info.getTrees().getPath(method); + elementSource = SourceUtils.getFile(ElementHandle.create(element), info.getClasspathInfo()); } - if (path == null) { - return Collections.emptyList(); - } - Element element = trees.getElement(path); - if (!(element instanceof ExecutableElement)) { + if (elementSource == null) { return Collections.emptyList(); } QuickPickItem elementItem = new QuickPickItem(createLabel(info, element, true)); elementItem.setUserData(new ElementData(element)); - return Collections.singletonList(createCodeAction(Bundle.DN_ChangeMethodParams(), CHANGE_METHOD_PARAMS_REFACTORING_KIND, CHANGE_METHOD_PARAMS_REFACTORING_COMMAND, uri, elementItem)); + return Collections.singletonList(createCodeAction(Bundle.DN_ChangeMethodParams(), CHANGE_METHOD_PARAMS_REFACTORING_KIND, CHANGE_METHOD_PARAMS_REFACTORING_COMMAND, Utils.toUri(elementSource), elementItem)); } @Override diff --git a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java index 4dadd8eaa308..d510457b09e5 100644 --- a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java +++ b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java @@ -1380,7 +1380,7 @@ public void logMessage(MessageParams arg0) { Either, CompletionList> completion = server.getTextDocumentService().completion(new CompletionParams(new TextDocumentIdentifier(toURI(src)), new Position(2, 8 + "s.".length()))).get(); assertTrue(completion.isRight()); Optional lengthItem = completion.getRight().getItems().stream().filter(ci -> "length() : int".equals(ci.getLabel())).findAny(); - assertTrue(lengthItem.isPresent()); + assertTrue("Expecting length field: " + completion.getRight().getItems(), lengthItem.isPresent()); assertEquals(InsertTextFormat.PlainText, lengthItem.get().getInsertTextFormat()); assertEquals("length()", lengthItem.get().getInsertText()); Optional substringItem = completion.getRight().getItems().stream().filter(ci -> ci.getLabel().startsWith("substring(") && ci.getLabel().contains(",")).findAny();