1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
local home = vim.env.HOME
local jdtls = require("jdtls")
local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ":p:h:t")
local workspace_dir = home .. "/jdtls-workspace/" .. project_name
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",
"-javaagent:" .. home .. "/.local/share/nvim/mason/share/jdtls/lombok.jar",
"-Xmx4g",
"--add-modules=ALL-SYSTEM",
"--add-opens", "java.base/java.util=ALL-UNNAMED",
"--add-opens", "java.base/java.lang=ALL-UNNAMED",
"-jar",
home .. "/.local/share/nvim/mason/share/jdtls/plugins/org.eclipse.equinox.launcher.jar",
"-configuration",
home .. "/.local/share/nvim/mason/packages/jdtls/config_linux",
"-data",
workspace_dir,
},
root_dir = require("jdtls.setup").find_root({ ".git", "mvnw", "pom.xml", "build.gradle" }),
settings = {
java = {
home = "/usr/lib/jvm/java-21-openjdk",
eclipse = {
downloadSources = true,
},
configuration = {
updateBuildConfiguration = "interactive",
runtimes = {
{
name = "JavaSE-17",
path = "/usr/lib/jvm/java-17-openjdk",
},
{
name = "JavaSE-21",
path = "/usr/lib/jvm/java-21-openjdk",
},
},
},
maven = {
downloadSources = true,
},
implementationsCodeLens = {
enabled = true,
},
referencesCodeLens = {
enabled = true,
},
references = {
includeDecompiledSources = true,
},
signatureHelp = { enabled = true },
format = {
enabled = true,
settings = {
url = "https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml",
profile = "GoogleStyle",
},
},
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",
},
},
sources = {
organizeImports = {
starThreshold = 9999,
staticStarThreshold = 9999,
},
},
codeGeneration = {
toString = {
template = "${object.className}{${member.name()}=${member.value}, ${otherMembers}}",
},
useBlocks = true,
},
},
},
capabilities = require("cmp_nvim_lsp").default_capabilities(),
flags = {
allow_incremental_sync = true,
},
init_options = {
extendedClientCapabilities = jdtls.extendedClientCapabilities,
},
}
jdtls.start_or_attach(config)
|