Skip to content

Commit fbedce3

Browse files
authored
refactor!: go from promises to co-routines (#23)
1 parent 45132d7 commit fbedce3

File tree

9 files changed

+231
-571
lines changed

9 files changed

+231
-571
lines changed

lua/java-core/adapters/init.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ end
3737

3838
---Ruterns the launch argument parameters for given test or tests
3939
---@param tests JavaCoreTestDetails | JavaCoreTestDetails[]
40-
---@return JavaCoreTestResolveJUnitLaunchArgumentsParams
40+
---@return JavaCoreTestResolveJUnitLaunchArgumentsParams # junit launch arguments
4141
function M.get_junit_launch_argument_params(tests)
4242
if not vim.tbl_islist(tests) then
4343
return {

lua/java-core/api/test.lua

Lines changed: 24 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
local log = require('java-core.utils.log')
22
local data_adapters = require('java-core.adapters')
33

4-
local Promise = require('java-core.utils.promise')
54
local TestReport = require('java-core.dap.test-report')
65
local JavaDapRunner = require('java-core.dap.runner')
76
local JavaDebug = require('java-core.ls.clients.java-debug-client')
@@ -43,74 +42,47 @@ end
4342
---Runs the test class in the given buffer
4443
---@param buffer integer
4544
---@param config JavaCoreDapLauncherConfigOverridable
46-
---@return Promise
4745
function M:run_class_by_buffer(buffer, config)
48-
return self:get_test_class_by_buffer(buffer):thenCall(function(tests)
49-
return self:run_test(tests, config)
50-
end)
46+
local tests = self:get_test_class_by_buffer(buffer)
47+
self:run_test(tests, config)
5148
end
5249

5350
---Returns test classes in the given buffer
5451
---@priate
5552
---@param buffer integer
56-
---@return Promise # Promise<JavaCoreTestDetailsWithChildrenAndRange>
53+
---@return JavaCoreTestDetailsWithChildrenAndRange # get test class details
5754
function M:get_test_class_by_buffer(buffer)
5855
log.debug('finding test class by buffer')
5956

60-
return Promise.resolve():thenCall(function()
61-
if not vim.api.nvim_buf_is_valid(buffer) then
62-
local msg = 'passed buffer' .. tostring(buffer) .. ' is not valid'
63-
log.error(msg)
64-
error(msg)
65-
end
66-
67-
local uri = vim.uri_from_bufnr(buffer)
68-
return self.test_client:find_test_types_and_methods(uri)
69-
end)
57+
local uri = vim.uri_from_bufnr(buffer)
58+
return self.test_client:find_test_types_and_methods(uri)
7059
end
7160

7261
---Run the given test
7362
---@private
7463
---@param tests JavaCoreTestDetails[]
7564
---@param config? JavaCoreDapLauncherConfigOverridable config to override the default values in test launcher config
76-
---@return Promise #
7765
function M:run_test(tests, config)
7866
---@type JavaCoreTestJunitLaunchArguments
79-
local launch_args
80-
81-
return self.test_client
82-
:resolve_junit_launch_arguments(
83-
data_adapters.get_junit_launch_argument_params(tests)
84-
)
85-
:thenCall(
86-
---@param _launch_args JavaCoreTestJunitLaunchArguments
87-
function(_launch_args)
88-
launch_args = _launch_args
89-
90-
return self.debug_client:resolve_java_executable(
91-
launch_args.mainClass,
92-
launch_args.projectName
93-
)
94-
end
95-
)
96-
:thenCall(
97-
---@param java_exec string
98-
function(java_exec)
99-
local dap_launcher_config =
100-
--@TODO I don't know why the hell debug is hard coded here
101-
data_adapters.get_dap_launcher_config(launch_args, java_exec, {
102-
debug = true,
103-
label = 'Launch All Java Tests',
104-
})
105-
106-
log.debug('dap launcher config is: ', dap_launcher_config)
107-
108-
dap_launcher_config =
109-
vim.tbl_deep_extend('force', dap_launcher_config, config or {})
110-
111-
return self.runner:run_by_config(dap_launcher_config)
112-
end
113-
)
67+
local launch_args = self.test_client:resolve_junit_launch_arguments(
68+
data_adapters.get_junit_launch_argument_params(tests)
69+
)
70+
71+
local java_exec = self.debug_client:resolve_java_executable(
72+
launch_args.mainClass,
73+
launch_args.projectName
74+
)
75+
76+
local dap_launcher_config =
77+
data_adapters.get_dap_launcher_config(launch_args, java_exec, {
78+
debug = true,
79+
label = 'Launch All Java Tests',
80+
})
81+
82+
dap_launcher_config =
83+
vim.tbl_deep_extend('force', dap_launcher_config, config or {})
84+
85+
self.runner:run_by_config(dap_launcher_config)
11486
end
11587

11688
return M

lua/java-core/dap/init.lua

Lines changed: 26 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
local log = require('java-core.utils.log')
22
local adapters = require('java-core.dap.adapters')
3-
local List = require('java-core.utils.list')
43
local JavaDebug = require('java-core.ls.clients.java-debug-client')
5-
local Promise = require('java-core.utils.promise')
64

75
---@class JavaCoreDap
86
---@field client LspClient
@@ -32,55 +30,45 @@ end
3230
---@field port integer
3331

3432
---Returns the dap adapter config
35-
---@return Promise # Promise<JavaCoreDapAdapter>
33+
---@return JavaCoreDapAdapter # dap adapter details
3634
function M:get_dap_adapter()
37-
log.info('creating dap adapter for java')
38-
39-
return self.java_debug:start_debug_session():thenCall(
40-
---@param port integer
41-
function(port)
42-
return {
43-
type = 'server',
44-
host = '127.0.0.1',
45-
port = port,
46-
}
47-
end
48-
)
35+
log.debug('creating dap adapter for java')
36+
37+
local port = self.java_debug:start_debug_session()
38+
39+
return {
40+
type = 'server',
41+
host = '127.0.0.1',
42+
port = port,
43+
}
4944
end
5045

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

56-
return self.java_debug:resolve_main_class():thenCall(
57-
---@param mains JavaDebugResolveMainClassRecord[]
58-
function(mains)
59-
local config_promises = List:new(mains):map(function(main)
60-
return self:get_dap_config_record(main)
61-
end)
51+
local mains = self.java_debug:resolve_main_class()
52+
local config = {}
6253

63-
return Promise.all(config_promises)
64-
end
65-
)
54+
for _, main in ipairs(mains) do
55+
table.insert(config, self:get_dap_config_record(main))
56+
end
57+
58+
return config
6659
end
6760

6861
---Returns the dap config for the given main class
6962
---@param main JavaDebugResolveMainClassRecord
70-
---@return Promise # Promise<JavaCoreDapLauncherConfig>
63+
---@return JavaCoreDapLauncherConfig # dap launch configuration record
7164
function M:get_dap_config_record(main)
72-
return Promise.all({
73-
self.java_debug:resolve_classpath(main.mainClass, main.projectName),
74-
self.java_debug:resolve_java_executable(main.mainClass, main.projectName),
75-
}):thenCall(function(res)
76-
---@type string[][]
77-
local classpaths = res[1]
78-
79-
---@type string
80-
local java_exec = res[2]
81-
82-
return adapters.get_dap_config(main, classpaths, java_exec)
83-
end)
65+
local classpaths =
66+
self.java_debug:resolve_classpath(main.mainClass, main.projectName)
67+
68+
local java_exec =
69+
self.java_debug:resolve_java_executable(main.mainClass, main.projectName)
70+
71+
return adapters.get_dap_config(main, classpaths, java_exec)
8472
end
8573

8674
return M

lua/java-core/ls/clients/java-debug-client.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ local M = JdtlsClient:new()
99
---@field fileName string
1010

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

1717
---Returns module paths and class paths of a given main class
1818
---@param project_name string
1919
---@param main_class string
20-
---@return Promise # Promise<string[][]>
20+
---@return string[][] # resolved class and module paths
2121
function M:resolve_classpath(main_class, project_name)
2222
return self:execute_command(
2323
'vscode.java.resolveClasspath',
@@ -28,7 +28,7 @@ end
2828
---Returns the path to java executable for a given main class
2929
---@param project_name string
3030
---@param main_class string
31-
---@return Promise # Promise<string>
31+
---@return string # path to java executable
3232
function M:resolve_java_executable(main_class, project_name)
3333
return self:execute_command('vscode.java.resolveJavaExecutable', {
3434
main_class,
@@ -41,7 +41,7 @@ end
4141
---@param main_class string
4242
---@param inheritedOptions boolean
4343
---@param expectedOptions { [string]: any }
44-
---@return Promise # Promise<boolean>
44+
---@return boolean # true if the setting is the expected setting
4545
function M:check_project_settings(
4646
main_class,
4747
project_name,
@@ -60,7 +60,7 @@ function M:check_project_settings(
6060
end
6161

6262
---Starts a debug session and returns the port number
63-
---@return Promise # Promise<integer>
63+
---@return integer # port number of the debug session
6464
function M:start_debug_session()
6565
return self:execute_command('vscode.java.startDebugSession')
6666
end
@@ -78,7 +78,7 @@ M.CompileWorkspaceStatus = {
7878
---@param project_name? string
7979
---@param file_path? string
8080
---@param is_full_build boolean
81-
---@return Promise # Promise<CompileWorkspaceStatus>
81+
---@return CompileWorkspaceStatus # compiled status
8282
function M:build_workspace(main_class, project_name, file_path, is_full_build)
8383
return self:execute_command(
8484
'vscode.java.buildWorkspace',

lua/java-core/ls/clients/java-test-client.lua

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ local JdtlsClient = require('java-core.ls.clients.jdtls-client')
3333
local M = JdtlsClient:new()
3434

3535
---Returns a list of project details in the current root
36-
---@return Promise # Promise<JavaCoreTestDetails[]>
36+
---@return JavaCoreTestDetails[] # test details of the projects
3737
function M:find_java_projects()
3838
return self:execute_command(
3939
'vscode.java.test.findJavaProjects',
@@ -44,7 +44,7 @@ end
4444
---Returns a list of test package details
4545
---@param handler string
4646
---@param token? string
47-
---@return Promise # Promise<JavaCoreTestDetailsWithChildren[]>
47+
---@return JavaCoreTestDetailsWithChildren[] # test package details
4848
function M:find_test_packages_and_types(handler, token)
4949
return self:execute_command(
5050
'vscode.java.test.findTestPackagesAndTypes',
@@ -55,7 +55,7 @@ end
5555
---Returns test informations in a given file
5656
---@param file_uri string
5757
---@param token? string
58-
---@return Promise # Promise<JavaCoreTestDetailsWithChildrenAndRange[]>
58+
---@return JavaCoreTestDetailsWithChildrenAndRange[] # test details
5959
function M:find_test_types_and_methods(file_uri, token)
6060
return self:execute_command(
6161
'vscode.java.test.findTestTypesAndMethods',
@@ -80,31 +80,21 @@ end
8080

8181
---Returns junit launch arguments
8282
---@param args JavaCoreTestResolveJUnitLaunchArgumentsParams
83-
---@return Promise # Promise<JavaTestJunitLaunchArguments>
83+
---@return JavaCoreTestJunitLaunchArguments # junit launch arguments
8484
function M:resolve_junit_launch_arguments(args)
85-
return self
86-
:execute_command(
87-
'vscode.java.test.junit.argument',
88-
vim.fn.json_encode(args)
89-
)
90-
:thenCall(
91-
92-
---@class JavaCoreTestJunitLaunchArgumentsResponse
93-
---@field body JavaCoreTestJunitLaunchArguments
94-
---@field status integer
95-
96-
---@param res JavaCoreTestJunitLaunchArgumentsResponse
97-
function(res)
98-
if not res.body then
99-
local msg = 'Failed to retrive JUnit launch arguments'
100-
101-
log.error(msg, res)
102-
error(msg)
103-
end
104-
105-
return res.body
106-
end
107-
)
85+
local launch_args = self:execute_command(
86+
'vscode.java.test.junit.argument',
87+
vim.fn.json_encode(args)
88+
)
89+
90+
if not launch_args.body then
91+
local msg = 'Failed to retrive JUnit launch arguments'
92+
93+
log.error(msg, launch_args)
94+
error(msg)
95+
end
96+
97+
return launch_args.body
10898
end
10999

110100
---@enum JavaCoreTestKind

0 commit comments

Comments
 (0)