Skip to content

Commit 9462546

Browse files
committed
feat: adding delegate method generate code action
1 parent 22ae084 commit 9462546

2 files changed

Lines changed: 83 additions & 0 deletions

File tree

lua/java/api/generate.lua

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,4 +156,83 @@ function M.generate_hash_code_and_equals(params)
156156
.run()
157157
end
158158

159+
---@param params nvim.CodeActionParamsResponse
160+
function M.generate_delegate_mothods_prompt(params)
161+
local instance = require('java.utils.instance_factory')
162+
local get_error_handler = require('java.handlers.error')
163+
local ui = require('java.utils.ui')
164+
local List = require('java-core.utils.list')
165+
166+
runner(function()
167+
local jdtls = instance.jdtls_client()
168+
local status = jdtls:java_check_delegate_methods_status(params.params)
169+
170+
if
171+
not status
172+
or not status.delegateFields
173+
or #status.delegateFields < 1
174+
then
175+
require('notify').warn(
176+
'All delegatable methods are already implemented.'
177+
)
178+
return
179+
end
180+
181+
local selected_delegate_field = ui.select(
182+
'Select target to generate delegates for.',
183+
status.delegateFields,
184+
function(field)
185+
return field.field.name .. ': ' .. field.field.type
186+
end
187+
)
188+
189+
if not selected_delegate_field then
190+
return
191+
end
192+
193+
if #selected_delegate_field.delegateMethods < 1 then
194+
require('notify').warn(
195+
'All delegatable methods are already implemented.'
196+
)
197+
return
198+
end
199+
200+
local selected_delegate_methods = ui.multi_select(
201+
'Select methods to generate delegates for.',
202+
selected_delegate_field.delegateMethods,
203+
function(method)
204+
return string.format(
205+
'%s.%s(%s)',
206+
selected_delegate_field.field.name,
207+
method.name,
208+
table.concat(method.parameters, ', ')
209+
)
210+
end
211+
)
212+
213+
if not selected_delegate_methods or #selected_delegate_methods < 1 then
214+
return
215+
end
216+
217+
local delegate_entries = List:new(selected_delegate_methods):map(
218+
---@param method jdtls.MethodBinding
219+
function(method)
220+
return {
221+
field = selected_delegate_field.field,
222+
delegateMethod = method,
223+
}
224+
end
225+
)
226+
227+
local edit = jdtls:java_generate_delegate_methods({
228+
context = params.params,
229+
delegateEntries = delegate_entries,
230+
})
231+
232+
vim.lsp.util.apply_workspace_edit(edit, 'utf-8')
233+
end)
234+
.catch(get_error_handler('Generating delegate mothods failed'))
235+
.run()
236+
end
237+
159238
return M

lua/java/commands/init.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ M.handlers = {
129129
require('java.api.generate').generate_hash_code_and_equals(params)
130130
end,
131131

132+
[M.commands.GENERATE_DELEGATE_METHODS_PROMPT] = function(_, params)
133+
require('java.api.generate').generate_delegate_mothods_prompt(params)
134+
end,
135+
132136
---@param is_full_build boolean
133137
[M.commands.COMPILE_WORKSPACE] = function(is_full_build)
134138
require('java.api.build').full_build_workspace(is_full_build)

0 commit comments

Comments
 (0)