summaryrefslogtreecommitdiffstats
path: root/lua/conf/plugins/jdtls.lua
diff options
context:
space:
mode:
authorSquibid <me@zacharyscheiman.com>2025-05-08 18:18:34 -0500
committerSquibid <me@zacharyscheiman.com>2025-05-08 18:18:34 -0500
commit7430ebed8eab0364452a6cdcaa209f8a7288e44d (patch)
treecd80b99c41c4af92c7a130fe52ca462062697d22 /lua/conf/plugins/jdtls.lua
parent7c3289fded1f75f6e060f56bd06edc2a327744d9 (diff)
downloadnvim-3.0.tar.gz
nvim-3.0.tar.bz2
nvim-3.0.zip
kitchen sink now don't support any version lower than 0.11.0 for lspv3.0
- dap now works for java and c
Diffstat (limited to 'lua/conf/plugins/jdtls.lua')
-rw-r--r--lua/conf/plugins/jdtls.lua148
1 files changed, 1 insertions, 147 deletions
diff --git a/lua/conf/plugins/jdtls.lua b/lua/conf/plugins/jdtls.lua
index 463fb23..691e552 100644
--- a/lua/conf/plugins/jdtls.lua
+++ b/lua/conf/plugins/jdtls.lua
@@ -1,150 +1,4 @@
-local misc = require("core.misc")
-local lsp = require("core.lsp.functions")
-local map, auto = misc.map, misc.auto
-
return { "mfussenegger/nvim-jdtls",
disable = not vim.fn.has("nvim-0.6.0"),
- requires = "mfussenegger/nvim-dap",
- function()
- auto("FileType", {
- pattern = "java",
- callback = function()
- local jdtls = require("jdtls")
- local jdtls_install = require("mason-registry").get_package("jdtls"):get_install_path()
-
- -- make sure to check if things with 💀 need updating
- local config = {
- cmd = {
- "/usr/lib/jvm/openjdk21/bin/java", -- 💀
- "-jar", vim.fn.glob(jdtls_install.."/plugins/org.eclipse.equinox.launcher_*.jar"), -- 💀
- "-configuration", jdtls_install.."/config_linux",
- "-data", vim.fn.stdpath("cache").."/nvim-jdtls",
-
- "--add-modules=ALL-SYSTEM",
- "--add-opens", "java.base/java.lang=ALL-UNNAMED",
- "--add-opens", "java.base/java.util=ALL-UNNAMED",
- "-Declipse.application=org.eclipse.jdt.ls.core.id1",
- "-Declipse.product=org.eclipse.jdt.ls.core.product",
- "-Dlog.level=ALL",
- "-Dlog.protocol=true",
- "-Dosgi.bundles.defaultStartLevel=4",
- "-Xmx1G",
- },
- root_dir = vim.fs.dirname(vim.fs.find({
- "gradlew",
- ".git",
- "mvnw",
- "settings.gradle", -- Gradle (multi-project)
- "settings.gradle.kts", -- Gradle (multi-project)
- "build.xml", -- Ant
- "pom.xml", -- Maven
- }, { upward = true })[1]),
-
- -- don"t print out status messages
- handlers = {
- ["language/status"] = function() end
- },
-
- on_attach = function(_, bufnr)
- -- add some jdtls specific mappings
- local opts = { buffer = bufnr }
- map("n", "cri", jdtls.organize_imports, opts)
- map("n", "crv", jdtls.extract_variable, opts)
- map("n", "crc", jdtls.extract_constant, opts)
- map("x", "crv", function() jdtls.extract_variable(true) end, opts)
- map("x", "crc", function() jdtls.extract_constant(true) end, opts)
- map("x", "crm", function() jdtls.extract_method(true) end, opts)
-
- pcall(vim.lsp.codelens.refresh)
- auto("BufWritePost", {
- buffer = bufnr,
- desc = "refresh codelens",
- callback = function()
- pcall(vim.lsp.codelens.refresh)
- end
- })
- end,
- capabilities = lsp.capabilities
- }
-
- -- generate the path to the java file(s)
- ---@type string|nil
- local cache_path = vim.fs.joinpath(vim.fn.stdpath("cache"), "/JavaVersion.class")
- ---@type string|nil
- local src_path = vim.fs.joinpath(vim.fn.stdpath("config"), "/extras/JavaVersion.java")
-
- -- if either path is invalid
- if not cache_path or not src_path then
- return
- end
-
- --- build a cache of the JavaVersion code
- local function build_cache()
- -- check if we have javac
- vim.system({ "javac" }, {}, function(out)
- if out.code == 127 then
- cache_path = nil
- return
- end
-
- -- compile our code
- vim.system({ "javac", src_path, "-d", vim.fn.stdpath("cache") }, {}, function(out)
- if out.code ~= 0 then
- cache_path = nil
- end
- end)
- end)
- end
-
- -- check if we have a compiled version of JavaVersion
- local f, _ = io.open(cache_path, "r")
- if not f then -- if we don"t have a cache
- build_cache()
- else
- io.close(f)
- end
-
- -- check the java version
- local buffer = {}
- vim.fn.jobstart({
- config.cmd[1],
- (cache_path and "JavaVersion") or src_path
- }, {
- cwd = vim.fn.stdpath("cache"),
- stdin = nil,
- on_stdout = function(_, data, _)
- table.insert(buffer, table.concat(data))
- end,
- on_exit = function(_, exit_code, _)
- local v = vim.version.parse(table.concat(buffer))
-
- -- if there"s an error, no version info, or the java version is
- -- less than 17 stop the lsp from starting
- if exit_code ~= 0 then
- vim.notify(string.format(
- "java version check failed: exit code %s", exit_code),
- vim.log.levels.ERROR, { title = misc.appid })
- vim.notify(string.format(
- "%s", vim.inspect(buffer)),
- vim.log.levels.ERROR, { title = misc.appid })
- return
- elseif not v then
- vim.notify("no java version info found", vim.log.levels.ERROR,
- { title = misc.appid })
- return
- elseif v.major < 17 then
- vim.notify(string.format(
- "java version %s < 17.0.0 Cannot run jdtls, bailing out",
- v[1].."."..v[2].."."..v[3]),
- vim.log.levels.ERROR, { title = misc.appid })
- return
- end
-
- -- start lsp
- jdtls.start_or_attach(config)
- end
- })
- end
- })
- end
+ requires = "mfussenegger/nvim-dap"
}