Skip to content

Commit 4b1e1bd

Browse files
committed
feat: add toString code action
1 parent 8a1171c commit 4b1e1bd

File tree

3 files changed

+79
-8
lines changed

3 files changed

+79
-8
lines changed

lua/java/api/generate.lua

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1+
local runner = require('async.runner')
2+
13
local M = {}
24

35
---@param params nvim.CodeActionParamsResponse
46
function M.generate_constructor(params)
5-
local JdtlsClient = require('java-core.ls.clients.jdtls-client')
6-
local async = require('java-core.utils.async').sync
7-
local get_client = require('java.utils.jdtls2')
7+
local instance = require('java.utils.instance_factory')
88
local get_error_handler = require('java.handlers.error')
99
local ui = require('java.utils.ui')
1010

11-
return async(function()
12-
local jdtls = JdtlsClient(get_client())
11+
return runner(function()
12+
local jdtls = instance.jdtls_client()
1313
local status = jdtls:java_check_constructors_status(params.params)
1414

1515
if not status or not status.constructors then
@@ -52,4 +52,49 @@ function M.generate_constructor(params)
5252
.run()
5353
end
5454

55+
---@param params nvim.CodeActionParamsResponse
56+
function M.generate_to_string(params)
57+
local instance = require('java.utils.instance_factory')
58+
local get_error_handler = require('java.handlers.error')
59+
local ui = require('java.utils.ui')
60+
61+
runner(function()
62+
local jdtls = instance.jdtls_client()
63+
local status = jdtls:java_check_to_string_status(params.params)
64+
65+
if status.exists then
66+
local prompt = string.format(
67+
'Method "toString()" already exists in the Class %s. Do you want to replace the implementation?',
68+
status.type
69+
)
70+
local choice = ui.select(prompt, { 'Replace', 'Cancel' })
71+
72+
if choice ~= 'Replace' then
73+
return
74+
end
75+
end
76+
77+
local fields = ui.multi_select(
78+
'Select the fields to include in the toString() method.',
79+
status.fields,
80+
function(field)
81+
return field.name
82+
end
83+
)
84+
85+
if not fields then
86+
return
87+
end
88+
89+
local edit = jdtls:java_generate_to_string({
90+
context = params.params,
91+
fields = fields,
92+
})
93+
94+
vim.lsp.util.apply_workspace_edit(edit, 'utf-8')
95+
end)
96+
.catch(get_error_handler('Generating to string failed'))
97+
.run()
98+
end
99+
55100
return M

lua/java/commands/init.lua

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
local log = require('java.utils.log')
22
local notify = require('java-core.utils.notify')
3-
local ui = require('java.utils.ui')
4-
local get_error_handler = require('java.handlers.error')
5-
local runner = require('async.runner')
63

74
local M = {}
85

@@ -124,6 +121,10 @@ M.handlers = {
124121
require('java.api.generate').generate_constructor(params)
125122
end,
126123

124+
[M.commands.GENERATE_TOSTRING_PROMPT] = function(_, params)
125+
require('java.api.generate').generate_to_string(params)
126+
end,
127+
127128
---@param is_full_build boolean
128129
[M.commands.COMPILE_WORKSPACE] = function(is_full_build)
129130
require('java.api.build').full_build_workspace(is_full_build)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
local class = require('java-core.utils.class')
2+
3+
local M = class()
4+
5+
---@private
6+
---@return vim.lsp.Client
7+
local function get_client()
8+
local clients = vim.lsp.get_clients({ name = 'jdtls' })
9+
10+
if #clients < 1 then
11+
local message = string.format('No jdtls client found to instantiate class')
12+
require('java-core.utils.notify').error(message)
13+
require('java.utils.log').error(message)
14+
error(message)
15+
end
16+
17+
return clients[1]
18+
end
19+
20+
---@return java-core.JdtlsClient
21+
function M.jdtls_client()
22+
return require('java-core.ls.clients.jdtls-client')(get_client())
23+
end
24+
25+
return M

0 commit comments

Comments
 (0)