Skip to content

Commit c0141d9

Browse files
committed
Support for advanced refactor
1 parent 2ed4cd3 commit c0141d9

File tree

1 file changed

+36
-2
lines changed

1 file changed

+36
-2
lines changed

lsp-java.el

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,6 +1167,37 @@ PROJECT-URI uri of the item."
11671167
:constructors (apply #'vector to-generate)
11681168
:context context))))))
11691169

1170+
(defun lsp-java--apply-refactoring-command (action)
1171+
(lsp-java-with-jdtls
1172+
(-let* (((command context command-info) (append (gethash "arguments" action) nil))
1173+
(arguments (when (or (string= command "extractField")
1174+
(string= command "convertVariableToField"))
1175+
(when-let (scope (pcase (append (gethash "initializedScopes" command-info) nil)
1176+
(`nil nil)
1177+
(`(,scope) scope)
1178+
(scopes (or (completing-read "Initialize the field in: " scopes nil t)
1179+
(user-error "Cancelled...")))))
1180+
(vector scope))))
1181+
((&hash "edit" "command") (lsp-request
1182+
"java/getRefactorEdit"
1183+
(list :command command
1184+
:context context
1185+
:options (plist-get (lsp--make-document-formatting-params) :options)
1186+
:commandArguments arguments))))
1187+
(lsp--apply-workspace-edit edit)
1188+
(lsp-execute-code-action command))))
1189+
1190+
1191+
(defun lsp-java--action-rename (action)
1192+
(-let* (([(&hash "uri" "offset" "length")] (gethash "arguments" action)))
1193+
(with-current-buffer (find-file (lsp--uri-to-path uri))
1194+
(deactivate-mark)
1195+
(goto-char (1+ offset))
1196+
(set-mark (point))
1197+
(goto-char (+ (point) length))
1198+
(call-interactively 'lsp-rename)
1199+
(deactivate-mark))))
1200+
11701201
(lsp-register-client
11711202
(make-lsp--client
11721203
:new-connection (lsp-stdio-connection 'lsp-java--ls-command)
@@ -1184,7 +1215,9 @@ PROJECT-URI uri of the item."
11841215
("java.action.organizeImports" #'lsp-java--action-organize-imports)
11851216
("java.action.overrideMethodsPrompt" #'lsp-java--override-methods-prompt)
11861217
("java.action.generateAccessorsPrompt" #'lsp-java--generate-accessors-prompt)
1187-
("java.action.generateConstructorsPrompt" #'lsp-java--generate-constructors-prompt))
1218+
("java.action.generateConstructorsPrompt" #'lsp-java--generate-constructors-prompt)
1219+
("java.action.applyRefactoringCommand" #'lsp-java--apply-refactoring-command)
1220+
("java.action.rename" 'lsp-java--action-rename))
11881221
:uri-handlers (ht ("jdt" #'lsp-java--resolve-uri)
11891222
("chelib" #'lsp-java--resolve-uri))
11901223
:initialization-options (lambda ()
@@ -1198,7 +1231,8 @@ PROJECT-URI uri of the item."
11981231
:advancedOrganizeImportsSupport t
11991232
:generateConstructorsPromptSupport t
12001233
:generateToStringPromptSupport t
1201-
:advancedGenerateAccessorsSupport t)
1234+
:advancedGenerateAccessorsSupport t
1235+
:advancedExtractRefactoringSupport t)
12021236
:bundles (lsp-java--bundles)
12031237
:workspaceFolders (->> (lsp-session)
12041238
lsp-session-server-id->folders

0 commit comments

Comments
 (0)