Skip to content

Commit af9c8ff

Browse files
authored
feat: add command to change the runtime (#244)
1 parent 81f849d commit af9c8ff

File tree

12 files changed

+341
-16
lines changed

12 files changed

+341
-16
lines changed

.luacheckrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ globals = {
44
'vim.wo',
55
'vim.bo',
66
'vim.opt',
7+
'vim.lsp',
78
}
89
read_globals = {
910
'vim',

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ Yep! That's all :)
121121

122122
- `JavaRefactorExtractVariable` - Create a variable from returned value at cursor
123123

124+
### Settings
125+
126+
- `JavaSettingsChangeRuntime` - Change the JDK version to another
127+
124128
</details>
125129

126130
## :computer: APIs
@@ -214,6 +218,14 @@ require('java').profile.ui()
214218
require('java').refactor.extract_variable()
215219
```
216220

221+
### Settings
222+
223+
- `change_runtime` - Change the JDK version to another
224+
225+
```lua
226+
require('java').settings.change_runtime()
227+
```
228+
217229
</details>
218230

219231
## :clamp: How to Use JDK X.X Version?

lua/java.lua

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require('java.commands')
2+
13
local decomple_watch = require('java.startup.decompile-watcher')
24
local mason_dep = require('java.startup.mason-dep')
35
local setup_wrap = require('java.startup.lspconfig-setup-wrap')
@@ -9,17 +11,25 @@ local runner = require('java.api.runner')
911
local profile_ui = require('java.ui.profile')
1012
local refactor = require('java.api.refactor')
1113
local build_api = require('java.api.build')
14+
local settings_api = require('java.api.settings')
1215

1316
local global_config = require('java.config')
1417

1518
local M = {}
1619

1720
function M.setup(custom_config)
21+
vim.api.nvim_exec_autocmds('User', { pattern = 'JavaPreSetup' })
22+
1823
local config =
1924
vim.tbl_deep_extend('force', global_config, custom_config or {})
2025

2126
vim.g.nvim_java_config = config
2227

28+
vim.api.nvim_exec_autocmds(
29+
'User',
30+
{ pattern = 'JavaSetup', data = { config = config } }
31+
)
32+
2333
if not startup_check() then
2434
return
2535
end
@@ -31,6 +41,11 @@ function M.setup(custom_config)
3141
decomple_watch.setup()
3242
dap.setup_dap_on_lsp_attach()
3343
end
44+
45+
vim.api.nvim_exec_autocmds(
46+
'User',
47+
{ pattern = 'JavaPostSetup', data = { config = config } }
48+
)
3449
end
3550

3651
----------------------------------------------------------------------
@@ -86,6 +101,12 @@ M.runner.built_in.switch_app = runner.built_in.switch_app
86101
M.profile = {}
87102
M.profile.ui = profile_ui.ui
88103

104+
----------------------------------------------------------------------
105+
-- Settings --
106+
----------------------------------------------------------------------
107+
M.settings = {}
108+
M.settings.change_runtime = settings_api.change_runtime
109+
89110
function M.__run()
90111
test.debug_current_method()
91112
end

lua/java/api/build.lua

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,22 @@ local get_error_handler = require('java.handlers.error')
33

44
local M = {}
55

6-
function M.full_build_workspace()
7-
return async(function()
8-
local JavaCoreJdtlsClient = require('java-core.ls.clients.jdtls-client')
9-
local jdtls = require('java.utils.jdtls')
10-
local buf_util = require('java.utils.buffer')
11-
local notify = require('java-core.utils.notify')
6+
---Do a workspace build
7+
---@param is_full_build? boolean
8+
---@return number
9+
function M.full_build_workspace(is_full_build)
10+
local JavaCoreJdtlsClient = require('java-core.ls.clients.jdtls-client')
11+
local jdtls = require('java.utils.jdtls2')
12+
local buf_util = require('java.utils.buffer')
13+
local notify = require('java-core.utils.notify')
14+
15+
is_full_build = type(is_full_build) == 'boolean' and is_full_build or true
1216

13-
JavaCoreJdtlsClient:new(jdtls())
14-
:java_build_workspace(true, buf_util.get_curr_buf())
17+
return async(function()
18+
JavaCoreJdtlsClient(jdtls()):java_build_workspace(
19+
is_full_build,
20+
buf_util.get_curr_buf()
21+
)
1522

1623
notify.info('Workspace build successful!')
1724
end)

lua/java/api/settings.lua

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
local get_jdtls = require('java.utils.jdtls2')
2+
local JdtlsClient = require('java-core.ls.clients.jdtls-client')
3+
local conf_utils = require('java.utils.config')
4+
local notify = require('java-core.utils.notify')
5+
local ui = require('java.utils.ui')
6+
local async = require('java-core.utils.async').sync
7+
local get_error_handler = require('java.handlers.error')
8+
9+
local M = {}
10+
11+
function M.change_runtime()
12+
local client = get_jdtls()
13+
14+
---@type RuntimeOption[]
15+
local runtimes = conf_utils.get_property_from_conf(
16+
client.config,
17+
'settings.java.configuration.runtimes',
18+
{}
19+
)
20+
21+
if #runtimes < 1 then
22+
notify.error(
23+
'No configured runtimes available'
24+
.. '\nRefer following link for instructions define available runtimes'
25+
.. '\nhttps://github.com/nvim-java/nvim-java?tab=readme-ov-file#clamp-how-to-use-jdk-xx-version'
26+
)
27+
return
28+
end
29+
30+
local jdtls = JdtlsClient(client)
31+
32+
async(function()
33+
local sel_runtime = ui.select(
34+
'Select Runtime',
35+
runtimes,
36+
function(runtime)
37+
return runtime.name .. '::' .. runtime.path
38+
end
39+
)
40+
41+
for _, runtime in
42+
ipairs(client.config.settings.java.configuration.runtimes)
43+
do
44+
if sel_runtime.path == runtime.path then
45+
runtime.default = true
46+
else
47+
runtime.default = nil
48+
end
49+
end
50+
51+
jdtls:workspace_did_change_configuration(client.config.settings)
52+
end)
53+
.catch(get_error_handler('Changing runtime failed'))
54+
.run()
55+
end
56+
57+
return M

lua/java/commands/init.lua

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
local log = require('java.utils.log')
2+
3+
local M = {}
4+
5+
local id
6+
7+
id = vim.api.nvim_create_autocmd('LspAttach', {
8+
callback = function(args)
9+
local client = vim.lsp.get_client_by_id(args.data.client_id)
10+
11+
if client and client.name == 'jdtls' then
12+
log.debug('adding vim.lsp.commands for java')
13+
14+
for key, handler in pairs(M.handlers) do
15+
vim.lsp.commands[key] = handler
16+
end
17+
18+
vim.api.nvim_del_autocmd(id)
19+
end
20+
end,
21+
22+
group = vim.api.nvim_create_augroup('JavaCommandReg', {}),
23+
})
24+
25+
M.commands = {
26+
27+
OPEN_BROWSER = 'vscode.open',
28+
29+
OPEN_OUTPUT = 'java.open.output',
30+
31+
SHOW_JAVA_REFERENCES = 'java.show.references',
32+
33+
SHOW_JAVA_IMPLEMENTATIONS = 'java.show.implementations',
34+
35+
SHOW_REFERENCES = 'editor.action.showReferences',
36+
37+
GOTO_LOCATION = 'editor.action.goToLocations',
38+
39+
MARKDOWN_API_RENDER = 'markdown.api.render',
40+
41+
CONFIGURATION_UPDATE = 'java.projectConfiguration.update',
42+
43+
IGNORE_INCOMPLETE_CLASSPATH = 'java.ignoreIncompleteClasspath',
44+
45+
IGNORE_INCOMPLETE_CLASSPATH_HELP = 'java.ignoreIncompleteClasspath.help',
46+
47+
RELOAD_WINDOW = 'workbench.action.reloadWindow',
48+
49+
PROJECT_CONFIGURATION_STATUS = 'java.projectConfiguration.status',
50+
51+
NULL_ANALYSIS_SET_MODE = 'java.compile.nullAnalysis.setMode',
52+
53+
APPLY_WORKSPACE_EDIT = 'java.apply.workspaceEdit',
54+
55+
EXECUTE_WORKSPACE_COMMAND = 'java.execute.workspaceCommand',
56+
57+
COMPILE_WORKSPACE = 'java.workspace.compile',
58+
59+
BUILD_PROJECT = 'java.project.build',
60+
61+
OPEN_SERVER_LOG = 'java.open.serverLog',
62+
63+
OPEN_SERVER_STDOUT_LOG = 'java.open.serverStdoutLog',
64+
65+
OPEN_SERVER_STDERR_LOG = 'java.open.serverStderrLog',
66+
67+
OPEN_CLIENT_LOG = 'java.open.clientLog',
68+
69+
OPEN_LOGS = 'java.open.logs',
70+
71+
OPEN_FORMATTER = 'java.open.formatter.settings',
72+
73+
OPEN_FILE = 'java.open.file',
74+
75+
CLEAN_WORKSPACE = 'java.clean.workspace',
76+
77+
UPDATE_SOURCE_ATTACHMENT_CMD = 'java.project.updateSourceAttachment.command',
78+
UPDATE_SOURCE_ATTACHMENT = 'java.project.updateSourceAttachment',
79+
80+
RESOLVE_SOURCE_ATTACHMENT = 'java.project.resolveSourceAttachment',
81+
82+
ADD_TO_SOURCEPATH_CMD = 'java.project.addToSourcePath.command',
83+
ADD_TO_SOURCEPATH = 'java.project.addToSourcePath',
84+
85+
REMOVE_FROM_SOURCEPATH_CMD = 'java.project.removeFromSourcePath.command',
86+
REMOVE_FROM_SOURCEPATH = 'java.project.removeFromSourcePath',
87+
88+
LIST_SOURCEPATHS_CMD = 'java.project.listSourcePaths.command',
89+
LIST_SOURCEPATHS = 'java.project.listSourcePaths',
90+
91+
IMPORT_PROJECTS_CMD = 'java.project.import.command',
92+
IMPORT_PROJECTS = 'java.project.import',
93+
CHANGE_IMPORTED_PROJECTS = 'java.project.changeImportedProjects',
94+
95+
OVERRIDE_METHODS_PROMPT = 'java.action.overrideMethodsPrompt',
96+
97+
HASHCODE_EQUALS_PROMPT = 'java.action.hashCodeEqualsPrompt',
98+
99+
OPEN_JSON_SETTINGS = 'workbench.action.openSettingsJson',
100+
101+
ORGANIZE_IMPORTS = 'java.action.organizeImports',
102+
103+
ORGANIZE_IMPORTS_SILENTLY = 'java.edit.organizeImports',
104+
MANUAL_CLEANUP = 'java.action.doCleanup',
105+
106+
HANDLE_PASTE_EVENT = 'java.edit.handlePasteEvent',
107+
108+
CLIPBOARD_ONPASTE = 'java.action.clipboardPasteAction',
109+
110+
FILESEXPLORER_ONPASTE = 'java.action.filesExplorerPasteAction',
111+
112+
CHOOSE_IMPORTS = 'java.action.organizeImports.chooseImports',
113+
114+
GENERATE_TOSTRING_PROMPT = 'java.action.generateToStringPrompt',
115+
116+
GENERATE_ACCESSORS_PROMPT = 'java.action.generateAccessorsPrompt',
117+
118+
GENERATE_CONSTRUCTORS_PROMPT = 'java.action.generateConstructorsPrompt',
119+
120+
GENERATE_DELEGATE_METHODS_PROMPT = 'java.action.generateDelegateMethodsPrompt',
121+
122+
APPLY_REFACTORING_COMMAND = 'java.action.applyRefactoringCommand',
123+
124+
RENAME_COMMAND = 'java.action.rename',
125+
126+
NAVIGATE_TO_SUPER_IMPLEMENTATION_COMMAND = 'java.action.navigateToSuperImplementation',
127+
128+
SHOW_TYPE_HIERARCHY = 'java.action.showTypeHierarchy',
129+
130+
SHOW_SUPERTYPE_HIERARCHY = 'java.action.showSupertypeHierarchy',
131+
132+
SHOW_SUBTYPE_HIERARCHY = 'java.action.showSubtypeHierarchy',
133+
134+
SHOW_CLASS_HIERARCHY = 'java.action.showClassHierarchy',
135+
136+
CHANGE_BASE_TYPE = 'java.action.changeBaseType',
137+
138+
OPEN_TYPE_HIERARCHY = 'java.navigate.openTypeHierarchy',
139+
140+
RESOLVE_TYPE_HIERARCHY = 'java.navigate.resolveTypeHierarchy',
141+
142+
SHOW_SERVER_TASK_STATUS = 'java.show.server.task.status',
143+
144+
GET_PROJECT_SETTINGS = 'java.project.getSettings',
145+
146+
GET_CLASSPATHS = 'java.project.getClasspaths',
147+
148+
IS_TEST_FILE = 'java.project.isTestFile',
149+
150+
GET_ALL_JAVA_PROJECTS = 'java.project.getAll',
151+
152+
SWITCH_SERVER_MODE = 'java.server.mode.switch',
153+
154+
RESTART_LANGUAGE_SERVER = 'java.server.restart',
155+
156+
LEARN_MORE_ABOUT_REFACTORING = '_java.learnMoreAboutRefactorings',
157+
158+
LEARN_MORE_ABOUT_CLEAN_UPS = '_java.learnMoreAboutCleanUps',
159+
160+
TEMPLATE_VARIABLES = '_java.templateVariables',
161+
162+
NOT_COVERED_EXECUTION = '_java.notCoveredExecution',
163+
164+
METADATA_FILES_GENERATION = '_java.metadataFilesGeneration',
165+
166+
RUNTIME_VALIDATION_OPEN = 'java.runtimeValidation.open',
167+
168+
RESOLVE_WORKSPACE_SYMBOL = 'java.project.resolveWorkspaceSymbol',
169+
170+
GET_WORKSPACE_PATH = '_java.workspace.path',
171+
172+
UPGRADE_GRADLE_WRAPPER_CMD = 'java.project.upgradeGradle.command',
173+
UPGRADE_GRADLE_WRAPPER = 'java.project.upgradeGradle',
174+
175+
LOMBOK_CONFIGURE = 'java.lombokConfigure',
176+
177+
CREATE_MODULE_INFO = 'java.project.createModuleInfo',
178+
179+
CREATE_MODULE_INFO_COMMAND = 'java.project.createModuleInfo.command',
180+
181+
REFRESH_BUNDLES = 'java.reloadBundles',
182+
183+
REFRESH_BUNDLES_COMMAND = '_java.reloadBundles.command',
184+
185+
CLEAN_SHARED_INDEXES = 'java.clean.sharedIndexes',
186+
187+
GET_DECOMPILED_SOURCE = 'java.decompile',
188+
189+
SMARTSEMICOLON_DETECTION = 'java.edit.smartSemicolonDetection',
190+
191+
RESOLVE_PASTED_TEXT = 'java.project.resolveText',
192+
193+
OPEN_STATUS_SHORTCUT = '_java.openShortcuts',
194+
}
195+
196+
M.handlers = {
197+
[M.commands.COMPILE_WORKSPACE] = function(is_full_build)
198+
require('java.api.build').full_build_workspace(is_full_build)
199+
end,
200+
}

0 commit comments

Comments
 (0)