local home = os.getenv 'HOME' local share = '/AppData/Local/nvim-data' local workspace_path = home .. share .. '/jdtls-workspace/' local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t') local workspace_dir = workspace_path .. project_name local status, jdtls = pcall(require, 'jdtls') if not status then return end local extendedClientCapabilities = jdtls.extendedClientCapabilities local config = { cmd = { 'java', '-Declipse.application=org.eclipse.jdt.ls.core.id1', '-Dosgi.bundles.defaultStartLevel=4', '-Declipse.product=org.eclipse.jdt.ls.core.product', '-Dlog.protocol=true', '-Dlog.level=ALL', '-Xmx1g', '--add-modules=ALL-SYSTEM', '--add-opens', 'java.base/java.util=ALL-UNNAMED', '--add-opens', 'java.base/java.lang=ALL-UNNAMED', '-javaagent:' .. home .. share .. '/mason/packages/jdtls/lombok.jar', '-jar', vim.fn.glob(home .. share .. '/mason/packages/jdtls/plugins/org.eclipse.equinox.launcher_*.jar'), '-configuration', home .. share .. '/mason/packages/jdtls/config_win', '-data', workspace_dir, }, root_dir = require('jdtls.setup').find_root { '.git', 'mvnw', 'gradlew', 'pom.xml', 'build.gradle' }, settings = { java = { home = 'c:/Program Files/Java/jdk-17', signatureHelp = { enabled = true }, extendedClientCapabilities = extendedClientCapabilities, maven = { downloadSources = true, }, referencesCodeLens = { enabled = true, }, references = { includeDecompiledSources = true, }, inlayHints = { parameterNames = { enabled = 'all', -- literals, all, none }, }, format = { enabled = false, }, }, }, init_options = { bundles = {}, }, } require('jdtls').start_or_attach(config) vim.keymap.set('n', 'co', "lua require'jdtls'.organize_imports()", { desc = 'Organize Imports' }) vim.keymap.set('n', 'crv', "lua require('jdtls').extract_variable()", { desc = 'Extract Variable' }) vim.keymap.set('v', 'crv', "lua require('jdtls').extract_variable(true)", { desc = 'Extract Variable' }) vim.keymap.set('n', 'crc', "lua require('jdtls').extract_constant()", { desc = 'Extract Constant' }) vim.keymap.set('v', 'crc', "lua require('jdtls').extract_constant(true)", { desc = 'Extract Constant' }) vim.keymap.set('v', 'crm', "lua require('jdtls').extract_method(true)", { desc = 'Extract Method' })