feat: add Javap command to decompile classpath files
This commit is contained in:
parent
2cfb946326
commit
b14cf6bcfb
1 changed files with 46 additions and 2 deletions
|
@ -4,3 +4,47 @@ nvim_jdtls.start_or_attach({
|
|||
root_dir = vim.fs.dirname(vim.fs.find({'.gradlew', '.git', 'mvnw'}, {upward = true})[1]),
|
||||
})
|
||||
require('keybinds'):set_lsp_keys({buffer = 0})
|
||||
|
||||
-- Allow decompiling classes coming from the language server too
|
||||
vim.api.nvim_create_user_command(
|
||||
'Javap',
|
||||
function(args)
|
||||
local fname = vim.api.nvim_buf_get_name(0)
|
||||
if vim.startswith(fname, "jdt://") then
|
||||
local _, _, classpath_raw, classname_raw = string.find(fname, "jdt://.+?=%a+/(.+).jar=/.+,test=/(.+)%.class.*")
|
||||
local classpath = classpath_raw:gsub("%%5C", "") .. '.jar'
|
||||
local classname = classname_raw:gsub("%%3C", ""):gsub("%(", ".")
|
||||
vim.fn.jobstart(
|
||||
{'javap', '-c', '--class-path', classpath, classname},
|
||||
{
|
||||
width = 1024,
|
||||
stdout_buffered = true,
|
||||
on_stdout = function(_, data, _)
|
||||
local buf = vim.api.nvim_create_buf(false, true)
|
||||
vim.api.nvim_buf_set_text(buf, 0, 0, 0, 0, data)
|
||||
vim.api.nvim_buf_set_option(buf, 'ft', 'asm')
|
||||
if args.bang then
|
||||
local width = vim.fn.winwidth(0)
|
||||
local height = vim.fn.winheight(0)
|
||||
vim.api.nvim_open_win(buf, true, {
|
||||
relative='win',
|
||||
row = 5,
|
||||
col = 10,
|
||||
width=width - 20,
|
||||
height=height - 10,
|
||||
border="single",
|
||||
zindex=100, -- TODO hardcoded?
|
||||
})
|
||||
else
|
||||
vim.api.nvim_win_set_buf(0, buf)
|
||||
vim.api.nvim_win_set_cursor(buf, { 1, 0 })
|
||||
end
|
||||
end
|
||||
}
|
||||
)
|
||||
else
|
||||
require('jdtls').javap()
|
||||
end
|
||||
end,
|
||||
{ bang=true }
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue