@@ -156,4 +156,83 @@ function M.generate_hash_code_and_equals(params)
156156.run ()
157157end
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+
159238return M