Closed shwahnim closed 1 year ago
local lsp = require "mks.lsp" local jdtls = require "jdtls" local home = os.getenv "HOME" local jdtls_binary = home .. "/.local/share/nvim/mason/bin/jdtls" local jdtls_installation = home .. "/.local/share/nvim/mason/packages/jdtls/" local lombok = jdtls_installation .. "lombok.jar" local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ":p:h:t") local java_test_path = home .. "/.local/share/nvim/mason/packages/java-test/extension/server/" local java_dap_path = home .. "/.local/share/nvim/mason/packages/java-debug-adapter/extension/server/" local workspace_dir = jdtls_installation .. "workspace" .. project_name local settings = { java = { forma = { settings = { url = home .. "/.config/nvim/language-servers/java-google-formatter.xml", profile = "GoogleStyle", }, }, eclipse = { downloadSources = true, }, maven = { downloadSources = true, }, implementationsCodeLens = { enabled = true, }, referencesCodeLens = { enabled = true, }, signatureHelp = { enabled = true }, contentProvider = { preferred = "fernflower" }, completion = { favoriteStaticMembers = { "org.hamcrest.MatcherAssert.assertThat", "org.hamcrest.Matchers.*", "org.hamcrest.CoreMatchers.*", "org.junit.jupiter.api.Assertions.*", "java.util.Objects.requireNonNull", "java.util.Objects.requireNonNullElse", "org.mockito.Mockito.*", }, importOrder = { "java", "javax", "com", "org", }, filteredTypes = { "com.sun.*", "io.micrometer.shaded.*", "java.awt.*", "jdk.*", "sun.*", }, }, sources = { organizeImports = { starThreshold = 9999, staticStarThreshold = 9999, }, }, codeGeneration = { toString = { template = "${object.className}{${member.name()}=${member.value}, ${otherMembers}}", }, hashCodeEquals = { useJava7Objects = true, }, useBlocks = true, }, lintOptions = {}, configuration = { runtimes = { -- { -- name = "JavaSE-21", -- path = home .. "/.sdkman/candidates/java/21.ea.25-open/", -- }, { name = "JavaSE-17", path = home .. "/.sdkman/candidates/java/17.0.7-amzn/", default = true, }, { name = "JavaSE-11", path = home .. "/.sdkman/candidates/java/11.0.12-open/", }, -- { -- name = "JavaSE-1.8", -- path = home .. "/.sdkman/candidates/java/8.0.302-open/", -- }, }, }, }, } local extendedClientCapabilities = require("jdtls").extendedClientCapabilities extendedClientCapabilities.resolveAdditionalTextEditsSupport = true local bundles = vim.fn.extend( vim.fn.split(vim.fn.glob(java_test_path .. "*.jar"), "\n"), vim.fn.split(vim.fn.glob(java_dap_path .. "*.jar"), "\n") ) -- This is the new part local config = { cmd = { -- "/home/mohammad/.sdkman/candidates/java/21.ea.25-open", jdtls_binary, "-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", -- "--jvm-arg=-javaagent:" .. lombok .. " --jvm-arg=-Xbootclasspath/a:" .. lombok, "--jvm-arg=-javaagent:" .. lombok, "--add-modules=ALL-SYSTEM", "--add-opens", "java.base/java.util=ALL-UNNAMED", "--add-opens", "java.base/java.lang=ALL-UNNAMED", "-jar", vim.fn.glob(jdtls_installation .. "plugins/org.eclipse.equinox.launcher_*.jar"), "-configuration", jdtls_installation .. "config_linux", "-data", workspace_dir, }, root_dir = require("jdtls.setup").find_root { ".git", "mvnw", "gradlew" }, on_attach = function(client, bufno) lsp.on_attach(client, bufno) local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufno, ...) end local function buf_set_option(...) vim.api.nvim_buf_set_option(bufno, ...) end buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc") -- Mappings. local opts = { noremap = true, silent = true } -- Java specific buf_set_keymap("n", "<leader>oi", "<Cmd>lua require'jdtls'.organize_imports()<CR>", opts) buf_set_keymap("n", "<leader>tc", "<Cmd>lua require'jdtls'.test_class()<CR>", opts) buf_set_keymap("n", "<leader>tm", "<Cmd>lua require'jdtls'.test_nearest_method()<CR>", opts) buf_set_keymap("v", "<leader>ev", "<Esc><Cmd>lua require('jdtls').extract_variable(true)<CR>", opts) buf_set_keymap("n", "<leader>ev", "<Cmd>lua require('jdtls').extract_variable()<CR>", opts) buf_set_keymap("n", "<leader>ec", "<Cmd>lua require('jdtls').extract_constant()<CR>", opts) buf_set_keymap("v", "<leader>em", "<Esc><Cmd>lua require('jdtls').extract_method(true)<CR>", opts) buf_set_keymap("n", "<leader>cf", "<Cmd>lua require('jdtls').compile('full')<CR>", opts) buf_set_keymap("n", "<leader>ci", "<Cmd>lua require('jdtls').compile('incremental')<CR>", opts) buf_set_keymap("n", "<leader>b", "<Cmd>lua require('jdtls').build_projects()<CR>", opts) buf_set_keymap("n", "<leader>rl", "<Cmd>lua require('jdtls').update_project_config()<CR>", opts) buf_set_keymap("n", "<leader>gI", "<Cmd>lua require('jdtls').super_implementation()<CR>", opts) vim.keymap.del("n", "<leader>t") -- -- vim.api.nvim_exec( -- [[ -- hi LspReferenceRead cterm=bold ctermbg=red guibg=LightYellow -- hi LspReferenceText cterm=bold ctermbg=red guibg=LightYellow -- hi LspReferenceWrite cterm=bold ctermbg=red guibg=LightYellow -- augroup lsp_document_highlight -- autocmd! -- autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight() -- autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references() -- augroup END -- ]], -- false -- ) -- vim.api.nvim_create_autocmd({ "BufWritePost" }, { -- pattern = { "*.java" }, -- callback = function() -- local _, _ = pcall(vim.lsp.codelens.refresh) -- end, -- }) jdtls.setup_dap { hotcodereplace = "auto" } jdtls.setup.add_commands() require("jdtls.dap").setup_dap_main_class_configs() end, on_init = function(client, bufnr) lsp.on_init(client) client.notify("workspace/didChangeConfiguration", { settings = settings }) end, settings = settings, init_options = { extendedClientCapabilities = extendedClientCapabilities, bundles = bundles, }, flags = { allow_incremental_sync = true, }, } require("jdtls").start_or_attach(config)
1.24.0
In a project with multi maven modules
Jdt commands to appear
Jdt commands not available
Please read Troubleshooting
LSP client configuration
Eclipse.jdt.ls version
1.24.0
Steps to Reproduce
In a project with multi maven modules
Expected Result
Jdt commands to appear
Actual Result
Jdt commands not available