feat: auto refresh the mason registory when pkgs are not available by s1n7ax · Pull Request #41 · nvim-java/nvim-java · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions lua/java.lua
88 changes: 33 additions & 55 deletions lua/java/startup/mason-dep.lua
Original file line number Diff line number Diff line change
@@ -1,76 +1,54 @@
local log = require('java.utils.log')
local mason_reg = require('mason-registry')
local mason_ui = require('mason.ui')
local mason_util = require('java.utils.mason')
local notify = require('java-core.utils.notify')
local async = require('java-core.utils.async')
local sync = async.sync

local M = {}

local dependecies = {
{ name = 'jdtls', version = 'v1.29.0' },
{ name = 'java-test', version = '0.40.1' },
{ name = 'java-debug-adapter', version = '0.52.0' },
}

---Install mason package dependencies for nvim-java
---@param config java.Config
function M.install(config)
log.info('check mason dependecies')

local is_installing = false

if config.jdk.auto_install then
table.insert(dependecies, { name = 'openjdk-17', version = '17.0.2' })
end

for _, dep in ipairs(dependecies) do
if not M.is_installed(dep.name, dep.version) then
log.info('installing mason pkg: ' .. tostring(dep.name))

is_installing = true

local pkg = mason_reg.get_package(dep.name)

pkg:install({
version = dep.version,
force = true,
})
end
local packages = M.get_pkg_list(config)
local is_outdated = mason_util.is_outdated(packages)

if is_outdated then
sync(function()
M.refresh_and_install(packages)
end)
.catch(function(err)
notify.error('Failed to setup nvim-java ' .. tostring(err))
log.error('failed to setup nvim-java ' .. tostring(err))
end)
.run()
end

if is_installing then
mason_ui.open()
notify.warn(
'Please restart the editor after dependency installation is done'
)
end
return is_outdated
end

---Returns true if the package and its expected version is already installed
---@private
---@param pkg_name string name of the package
---@param expc_version string expected version of the package
---@return boolean true if the package and its version is already installed
function M.is_installed(pkg_name, expc_version)
local pkg = mason_reg.get_package(pkg_name)

if not pkg:is_installed() then
return false
end
function M.refresh_and_install(packages)
vim.schedule(function()
mason_ui.open()
notify.warn('Please close and re-open after dependecies are installed')
end)

---@type string | nil
local installed_version
mason_util.refresh_registry()
mason_util.install_pkgs(packages)
end

pkg:get_installed_version(function(ok, version)
if ok then
installed_version = version
end
end)
function M.get_pkg_list(config)
local dependecies = {
{ name = 'jdtls', version = 'v1.29.0' },
{ name = 'java-test', version = '0.40.1' },
{ name = 'java-debug-adapter', version = '0.52.0' },
}

if installed_version == expc_version then
return true
if config.jdk.auto_install then
table.insert(dependecies, { name = 'openjdk-17', version = '17.0.2' })
end

return false
return dependecies
end

return M
80 changes: 80 additions & 0 deletions lua/java/utils/mason.lua