Skip to content

Commit 1125d6b

Browse files
committed
loadData
1 parent 979855d commit 1125d6b

15 files changed

Lines changed: 816 additions & 837 deletions

lua/java-deps.lua

Lines changed: 7 additions & 414 deletions
Large diffs are not rendered by default.

lua/java-deps/context.lua

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
local INodeData = require("java-deps.java.nodeData").INodeData
2+
local M = {}
3+
4+
---@enum ContainerEntryKind
5+
M.ContainerEntryKind = {
6+
CPE_LIBRARY = 1,
7+
CPE_PROJECT = 2,
8+
CPE_SOURCE = 3,
9+
CPE_VARIABLE = 4,
10+
CPE_CONTAINER = 5,
11+
}
12+
---@class IContainerNodeData: INodeData
13+
---@field entryKind ContainerEntryKind
14+
local IContainerNodeData = INodeData:new()
15+
IContainerNodeData.__index = IContainerNodeData
16+
17+
function IContainerNodeData:new()
18+
return setmetatable(INodeData:new(), self)
19+
end
20+
M.IContainerNodeData = IContainerNodeData
21+
22+
return M
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
local INodeData = require("java-deps.java.nodeData").INodeData
2+
local M = {}
3+
---@enum PackageRootKind
4+
M.PackageRootKind = {
5+
K_SOURCE = 1,
6+
K_BINARY = 2,
7+
}
8+
9+
---@class IPackageRootNodeData:INodeData
10+
---@field entryKind PackageRootKind
11+
---@field attributes table<string, string>
12+
local IPackageRootNodeData = INodeData:new()
13+
IPackageRootNodeData.__index = IPackageRootNodeData
14+
function IPackageRootNodeData:new()
15+
return setmetatable(INodeData:new(), self)
16+
end
17+
18+
M.IPackageRootNodeData = IPackageRootNodeData
19+
20+
return M
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
local nodeData = require("java-deps.java.nodeData")
2+
local NodeKind = nodeData.NodeKind
3+
local INodeData = nodeData.INodeData
4+
5+
---@class HierarchicalPackageNodeData: INodeData
6+
---@field displayName string
7+
---@field name string
8+
---@field nodeData? INodeData
9+
---@field children HierarchicalPackageNodeData[]
10+
local HieararchicalPackageNodeData = nodeData.INodeData:new()
11+
HieararchicalPackageNodeData.__index = HieararchicalPackageNodeData
12+
13+
---@param displayName string
14+
---@param parentName? string
15+
function HieararchicalPackageNodeData:new(displayName, parentName)
16+
local name = (parentName == nil or parentName == "") and displayName or parentName .. "." .. displayName
17+
local base = INodeData:new()
18+
base.displayName = displayName
19+
base.name = name
20+
base.children = {}
21+
return setmetatable(base, self)
22+
end
23+
24+
function HieararchicalPackageNodeData:compressTree()
25+
while self.name ~= "" and #self.children == 1 and not self:isPackage() do
26+
local child = self.children[1]
27+
self.name = self.name .. "." .. child.displayName
28+
self.displayName = self.displayName .. "." .. child.displayName
29+
self.children = self.children
30+
self.nodeData = self.nodeData
31+
end
32+
for _, child in ipairs(self.children) do
33+
child:compressTree()
34+
end
35+
end
36+
---@param packages string[]
37+
---@param _nodeData INodeData
38+
function HieararchicalPackageNodeData:addSubPackage(packages, _nodeData)
39+
if #packages == 0 then
40+
self.nodeData = _nodeData
41+
return
42+
end
43+
local subPackageDisplayName = table.remove(packages, 1)
44+
local childNode = nil
45+
for _, child in ipairs(self.children) do
46+
if child.displayName == subPackageDisplayName then
47+
childNode = child
48+
break
49+
end
50+
end
51+
if childNode then
52+
childNode:addSubPackage(packages, _nodeData)
53+
else
54+
local newNode = HieararchicalPackageNodeData:new(subPackageDisplayName, self.name)
55+
newNode:addSubPackage(packages, _nodeData)
56+
table.insert(self.children, newNode)
57+
end
58+
end
59+
function HieararchicalPackageNodeData:getUri()
60+
return self.nodeData and self.nodeData.uri
61+
end
62+
function HieararchicalPackageNodeData:moduleName()
63+
return self.nodeData and self.nodeData.moduleName
64+
end
65+
66+
function HieararchicalPackageNodeData:path()
67+
return self.nodeData and self.nodeData.path
68+
end
69+
70+
function HieararchicalPackageNodeData:kind()
71+
return self.nodeData and self.nodeData.kind or NodeKind.Package
72+
end
73+
74+
function HieararchicalPackageNodeData:isPackage()
75+
return self.nodeData ~= nil
76+
end
77+
78+
function HieararchicalPackageNodeData:handlerIdentifier()
79+
return self.nodeData and self.nodeData.handlerIdentifier
80+
end
81+
82+
return HieararchicalPackageNodeData

lua/java-deps/java/jdtls.lua

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
local lsp_command = require("java-deps.lsp-command")
2+
local node_data = require("java-deps.java.nodeData")
3+
local NodeKind = node_data.NodeKind
4+
local M = {}
5+
6+
---@param params string
7+
---@return INodeData[]
8+
M.getProjects = function(params)
9+
local err, resp = lsp_command.execute_command({
10+
command = "java.project.list",
11+
arguments = params,
12+
}, nil, 0)
13+
if err then
14+
vim.notify(err.message or vim.inspect(err), vim.log.levels.WARN)
15+
return {}
16+
end
17+
return resp and resp.reslut or {}
18+
end
19+
M.root_dir = function()
20+
return lsp_command.get_client().root_dir
21+
end
22+
23+
M.getProjectUris = function()
24+
local err, resp = lsp_command.execute_command({
25+
command = lsp_command.GET_ALL_PROJECTS,
26+
})
27+
if err then
28+
vim.notify(err.message or vim.inspect(err), vim.log.levels.WARN)
29+
return {}
30+
end
31+
return resp and resp.reslut or {}
32+
end
33+
34+
-- interface IPackageDataParam {
35+
-- projectUri: string | undefined;
36+
-- [key: string]: any;
37+
-- }
38+
39+
---@return INodeData[]
40+
M.getPackageData = function(params)
41+
local excludePatterns = {}
42+
local err, resp = lsp_command.execute_command(lsp_command.JAVA_GETPACKAGEDATA, params)
43+
if err then
44+
vim.notify(err.message or vim.inspect(err), vim.log.levels.WARN)
45+
return {}
46+
end
47+
---@type INodeData[]
48+
local nodeData = resp and resp.reslut or {}
49+
-- Filter out non java resources
50+
if true then
51+
nodeData = vim.tbl_filter(function(data)
52+
return data.kind ~= NodeKind.Folder and data.kind ~= NodeKind.File
53+
end, nodeData)
54+
end
55+
56+
if excludePatterns and #nodeData > 0 then
57+
local uriOfChildren = vim.tbl_map(function(node)
58+
return node.uri
59+
end, nodeData)
60+
61+
local urisToExclude = {}
62+
for _, pattern in pairs(excludePatterns) do
63+
if excludePatterns[pattern] then
64+
local toExclude = vim.tbl_filter(function(urio)
65+
return string.match(urio, pattern)
66+
end, uriOfChildren)
67+
for _, uriToExclude in ipairs(toExclude) do
68+
table.insert(urisToExclude, uriToExclude)
69+
end
70+
end
71+
end
72+
if #urisToExclude > 0 then
73+
nodeData = vim.tbl_filter(function(node)
74+
if not node.uri then
75+
return true
76+
end
77+
return not vim.tbl_contains(urisToExclude, node.uri)
78+
end, nodeData)
79+
end
80+
end
81+
return nodeData
82+
end
83+
84+
return M

lua/java-deps/java/nodeData.lua

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
local M = {}
2+
---@enum NodeKind
3+
M.NodeKind = {
4+
Workspace = 1,
5+
Project = 2,
6+
PackageRoot = 3,
7+
Package = 4,
8+
PrimaryType = 5,
9+
CompilationUnit = 6,
10+
ClassFile = 7,
11+
Container = 8,
12+
Folder = 9,
13+
File = 10,
14+
}
15+
16+
---@enum TypeKind
17+
M.TypeKind = {
18+
Class = 1,
19+
Interface = 2,
20+
Enum = 3,
21+
}
22+
23+
---@class INodeData
24+
---@field displayName? string
25+
---@field name string
26+
---@field moduleName? string
27+
---@field path? string
28+
---@field handlerIdentifier? string
29+
---@field uri? string
30+
---@field kind NodeKind
31+
---@field children? any[]
32+
---@field metaData? table<string, any>
33+
local INodeData = {}
34+
INodeData.__index = INodeData
35+
function INodeData:new()
36+
return setmetatable({}, self)
37+
end
38+
39+
M.INodeData = INodeData
40+
41+
return M

0 commit comments

Comments
 (0)