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
2 changes: 1 addition & 1 deletion lua/java-core/adapters/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ end

---Ruterns the launch argument parameters for given test or tests
---@param tests JavaCoreTestDetails | JavaCoreTestDetails[]
---@return JavaCoreTestResolveJUnitLaunchArgumentsParams
---@return JavaCoreTestResolveJUnitLaunchArgumentsParams # junit launch arguments
function M.get_junit_launch_argument_params(tests)
if not vim.tbl_islist(tests) then
return {
Expand Down
76 changes: 24 additions & 52 deletions lua/java-core/api/test.lua
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
local log = require('java-core.utils.log')
local data_adapters = require('java-core.adapters')

local Promise = require('java-core.utils.promise')
local TestReport = require('java-core.dap.test-report')
local JavaDapRunner = require('java-core.dap.runner')
local JavaDebug = require('java-core.ls.clients.java-debug-client')
Expand Down Expand Up @@ -43,74 +42,47 @@ end
---Runs the test class in the given buffer
---@param buffer integer
---@param config JavaCoreDapLauncherConfigOverridable
---@return Promise
function M:run_class_by_buffer(buffer, config)
return self:get_test_class_by_buffer(buffer):thenCall(function(tests)
return self:run_test(tests, config)
end)
local tests = self:get_test_class_by_buffer(buffer)
self:run_test(tests, config)
end

---Returns test classes in the given buffer
---@priate
---@param buffer integer
---@return Promise # Promise<JavaCoreTestDetailsWithChildrenAndRange>
---@return JavaCoreTestDetailsWithChildrenAndRange # get test class details
function M:get_test_class_by_buffer(buffer)
log.debug('finding test class by buffer')

return Promise.resolve():thenCall(function()
if not vim.api.nvim_buf_is_valid(buffer) then
local msg = 'passed buffer' .. tostring(buffer) .. ' is not valid'
log.error(msg)
error(msg)
end

local uri = vim.uri_from_bufnr(buffer)
return self.test_client:find_test_types_and_methods(uri)
end)
local uri = vim.uri_from_bufnr(buffer)
return self.test_client:find_test_types_and_methods(uri)
end

---Run the given test
---@private
---@param tests JavaCoreTestDetails[]
---@param config? JavaCoreDapLauncherConfigOverridable config to override the default values in test launcher config
---@return Promise #
function M:run_test(tests, config)
---@type JavaCoreTestJunitLaunchArguments
local launch_args

return self.test_client
:resolve_junit_launch_arguments(
data_adapters.get_junit_launch_argument_params(tests)
)
:thenCall(
---@param _launch_args JavaCoreTestJunitLaunchArguments
function(_launch_args)
launch_args = _launch_args

return self.debug_client:resolve_java_executable(
launch_args.mainClass,
launch_args.projectName
)
end
)
:thenCall(
---@param java_exec string
function(java_exec)
local dap_launcher_config =
--@TODO I don't know why the hell debug is hard coded here
data_adapters.get_dap_launcher_config(launch_args, java_exec, {
debug = true,
label = 'Launch All Java Tests',
})

log.debug('dap launcher config is: ', dap_launcher_config)

dap_launcher_config =
vim.tbl_deep_extend('force', dap_launcher_config, config or {})

return self.runner:run_by_config(dap_launcher_config)
end
)
local launch_args = self.test_client:resolve_junit_launch_arguments(
data_adapters.get_junit_launch_argument_params(tests)
)

local java_exec = self.debug_client:resolve_java_executable(
launch_args.mainClass,
launch_args.projectName
)

local dap_launcher_config =
data_adapters.get_dap_launcher_config(launch_args, java_exec, {
debug = true,
label = 'Launch All Java Tests',
})

dap_launcher_config =
vim.tbl_deep_extend('force', dap_launcher_config, config or {})

self.runner:run_by_config(dap_launcher_config)
end

return M
64 changes: 26 additions & 38 deletions lua/java-core/dap/init.lua
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
local log = require('java-core.utils.log')
local adapters = require('java-core.dap.adapters')
local List = require('java-core.utils.list')
local JavaDebug = require('java-core.ls.clients.java-debug-client')
local Promise = require('java-core.utils.promise')

---@class JavaCoreDap
---@field client LspClient
Expand Down Expand Up @@ -32,55 +30,45 @@ end
---@field port integer

---Returns the dap adapter config
---@return Promise # Promise<JavaCoreDapAdapter>
---@return JavaCoreDapAdapter # dap adapter details
function M:get_dap_adapter()
log.info('creating dap adapter for java')

return self.java_debug:start_debug_session():thenCall(
---@param port integer
function(port)
return {
type = 'server',
host = '127.0.0.1',
port = port,
}
end
)
log.debug('creating dap adapter for java')

local port = self.java_debug:start_debug_session()

return {
type = 'server',
host = '127.0.0.1',
port = port,
}
end

---Returns the dap configuration for the current project
---@return Promise # Promise<JavaDapConfiguration[]>
---@return JavaCoreDapLauncherConfig[] # dap configuration details
function M:get_dap_config()
log.info('creating dap configuration for java')

return self.java_debug:resolve_main_class():thenCall(
---@param mains JavaDebugResolveMainClassRecord[]
function(mains)
local config_promises = List:new(mains):map(function(main)
return self:get_dap_config_record(main)
end)
local mains = self.java_debug:resolve_main_class()
local config = {}

return Promise.all(config_promises)
end
)
for _, main in ipairs(mains) do
table.insert(config, self:get_dap_config_record(main))
end

return config
end

---Returns the dap config for the given main class
---@param main JavaDebugResolveMainClassRecord
---@return Promise # Promise<JavaCoreDapLauncherConfig>
---@return JavaCoreDapLauncherConfig # dap launch configuration record
function M:get_dap_config_record(main)
return Promise.all({
self.java_debug:resolve_classpath(main.mainClass, main.projectName),
self.java_debug:resolve_java_executable(main.mainClass, main.projectName),
}):thenCall(function(res)
---@type string[][]
local classpaths = res[1]

---@type string
local java_exec = res[2]

return adapters.get_dap_config(main, classpaths, java_exec)
end)
local classpaths =
self.java_debug:resolve_classpath(main.mainClass, main.projectName)

local java_exec =
self.java_debug:resolve_java_executable(main.mainClass, main.projectName)

return adapters.get_dap_config(main, classpaths, java_exec)
end

return M
Expand Down
12 changes: 6 additions & 6 deletions lua/java-core/ls/clients/java-debug-client.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ local M = JdtlsClient:new()
---@field fileName string

---Returns a list of main classes in the current workspace
---@return Promise # Promise<JavaDebugResolveMainClassRecord[]>
---@return JavaDebugResolveMainClassRecord[] # resolved main class
function M:resolve_main_class()
return self:execute_command('vscode.java.resolveMainClass')
end

---Returns module paths and class paths of a given main class
---@param project_name string
---@param main_class string
---@return Promise # Promise<string[][]>
---@return string[][] # resolved class and module paths
function M:resolve_classpath(main_class, project_name)
return self:execute_command(
'vscode.java.resolveClasspath',
Expand All @@ -28,7 +28,7 @@ end
---Returns the path to java executable for a given main class
---@param project_name string
---@param main_class string
---@return Promise # Promise<string>
---@return string # path to java executable
function M:resolve_java_executable(main_class, project_name)
return self:execute_command('vscode.java.resolveJavaExecutable', {
main_class,
Expand All @@ -41,7 +41,7 @@ end
---@param main_class string
---@param inheritedOptions boolean
---@param expectedOptions { [string]: any }
---@return Promise # Promise<boolean>
---@return boolean # true if the setting is the expected setting
function M:check_project_settings(
main_class,
project_name,
Expand All @@ -60,7 +60,7 @@ function M:check_project_settings(
end

---Starts a debug session and returns the port number
---@return Promise # Promise<integer>
---@return integer # port number of the debug session
function M:start_debug_session()
return self:execute_command('vscode.java.startDebugSession')
end
Expand All @@ -78,7 +78,7 @@ M.CompileWorkspaceStatus = {
---@param project_name? string
---@param file_path? string
---@param is_full_build boolean
---@return Promise # Promise<CompileWorkspaceStatus>
---@return CompileWorkspaceStatus # compiled status
function M:build_workspace(main_class, project_name, file_path, is_full_build)
return self:execute_command(
'vscode.java.buildWorkspace',
Expand Down
44 changes: 17 additions & 27 deletions lua/java-core/ls/clients/java-test-client.lua
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ local JdtlsClient = require('java-core.ls.clients.jdtls-client')
local M = JdtlsClient:new()

---Returns a list of project details in the current root
---@return Promise # Promise<JavaCoreTestDetails[]>
---@return JavaCoreTestDetails[] # test details of the projects
function M:find_java_projects()
return self:execute_command(
'vscode.java.test.findJavaProjects',
Expand All @@ -44,7 +44,7 @@ end
---Returns a list of test package details
---@param handler string
---@param token? string
---@return Promise # Promise<JavaCoreTestDetailsWithChildren[]>
---@return JavaCoreTestDetailsWithChildren[] # test package details
function M:find_test_packages_and_types(handler, token)
return self:execute_command(
'vscode.java.test.findTestPackagesAndTypes',
Expand All @@ -55,7 +55,7 @@ end
---Returns test informations in a given file
---@param file_uri string
---@param token? string
---@return Promise # Promise<JavaCoreTestDetailsWithChildrenAndRange[]>
---@return JavaCoreTestDetailsWithChildrenAndRange[] # test details
function M:find_test_types_and_methods(file_uri, token)
return self:execute_command(
'vscode.java.test.findTestTypesAndMethods',
Expand All @@ -80,31 +80,21 @@ end

---Returns junit launch arguments
---@param args JavaCoreTestResolveJUnitLaunchArgumentsParams
---@return Promise # Promise<JavaTestJunitLaunchArguments>
---@return JavaCoreTestJunitLaunchArguments # junit launch arguments
function M:resolve_junit_launch_arguments(args)
return self
:execute_command(
'vscode.java.test.junit.argument',
vim.fn.json_encode(args)
)
:thenCall(

---@class JavaCoreTestJunitLaunchArgumentsResponse
---@field body JavaCoreTestJunitLaunchArguments
---@field status integer

---@param res JavaCoreTestJunitLaunchArgumentsResponse
function(res)
if not res.body then
local msg = 'Failed to retrive JUnit launch arguments'

log.error(msg, res)
error(msg)
end

return res.body
end
)
local launch_args = self:execute_command(
'vscode.java.test.junit.argument',
vim.fn.json_encode(args)
)

if not launch_args.body then
local msg = 'Failed to retrive JUnit launch arguments'

log.error(msg, launch_args)
error(msg)
end

return launch_args.body
end

---@enum JavaCoreTestKind
Expand Down
Loading