diff --git a/lazy-lock.json b/lazy-lock.json index 2035390..5eaf777 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -6,7 +6,7 @@ "alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" }, "auto-bufferline.nvim": { "branch": "main", "commit": "f5835a4b62bfb6f6c829f8f050e5102ccf230b3e" }, "auto-conform.nvim": { "branch": "main", "commit": "5f0897235e84bf2f8ff9d634e81678d5bfa63ab8" }, - "auto-java-project.nvim": { "branch": "main", "commit": "b685ad4fbda1a28cb61dd941d54fb0dd3c22d8f4" }, + "auto-java-project.nvim": { "branch": "main", "commit": "796bbee285c5eaed8784b8d91edd0ea5d25a3856" }, "auto-jdtls.nvim": { "branch": "main", "commit": "050da8d68c51a6e02a08d91329b7a848887927e7" }, "auto-lint.nvim": { "branch": "main", "commit": "aff13cb8eaa055e66e940d43b7d83166397e5413" }, "auto-lsp.nvim": { "branch": "main", "commit": "1f3ef04741972c107187a07be5615ff210888184" }, @@ -28,7 +28,6 @@ "inc-rename.nvim": { "branch": "main", "commit": "8ba77017ca468f3029bf88ef409c2d20476ea66b" }, "indent-blankline.nvim": { "branch": "master", "commit": "7871a88056f7144defca9c931e311a3134c5d509" }, "lazy.nvim": { "branch": "main", "commit": "7967abe55752aa90532e6bb4bd4663fe27a264cb" }, - "lsp_signature.nvim": { "branch": "master", "commit": "fc38521ea4d9ec8dbd4c2819ba8126cea743943b" }, "lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "cab00668464d2914d0752b86168b4a431cc93eb2" }, "mason-nvim-dap.nvim": { "branch": "main", "commit": "8b9363d83b5d779813cdd2819b8308651cec2a09" }, @@ -40,7 +39,7 @@ "neotest-java": { "branch": "main", "commit": "320f31c71b183f2c584198f33f93542fd0e5a768" }, "noice.nvim": { "branch": "main", "commit": "221ffbc499d322699ea079fcd878a2399529e775" }, "nui.nvim": { "branch": "main", "commit": "b58e2bfda5cea347c9d58b7f11cf3012c7b3953f" }, - "nvim-autopairs": { "branch": "master", "commit": "ee297f215e95a60b01fde33275cc3c820eddeebe" }, + "nvim-autopairs": { "branch": "master", "commit": "b464658e9b880f463b9f7e6ccddd93fb0013f559" }, "nvim-cmp": { "branch": "main", "commit": "f17d9b4394027ff4442b298398dfcaab97e40c4f" }, "nvim-colorizer.lua": { "branch": "master", "commit": "f134063618a65cad4d7415fddbd96ff7e0c5b4ae" }, "nvim-dap": { "branch": "master", "commit": "29d1f8814fa4fcc194ec574de998a42a22ebbe4a" }, diff --git a/lua/auto-jdtls2/generate_java_class.lua b/lua/auto-jdtls2/generate_java_class.lua new file mode 100644 index 0000000..0a57941 --- /dev/null +++ b/lua/auto-jdtls2/generate_java_class.lua @@ -0,0 +1,115 @@ +local function create_java_class() + local is_maven_project = function() + if vim.fn.findfile("pom.xml", vim.fn.getcwd()) == "pom.xml" then + return true + else + return false + end + end + + local function create_notif(message, level) + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify(message, level) + else + print(message) + end + end + + -- Fungsi untuk meminta input dari pengguna dengan opsi untuk membatalkan + local function get_user_input(prompt, default_value) + vim.fn.inputsave() + local result = vim.fn.input(prompt, default_value) + vim.fn.inputrestore() + + -- Cek apakah pengguna menekan Esc untuk membatalkan input + if result == "" then + create_notif("Input canceled.", "info") + return nil, true + end + + return result, false + end + + -- Fungsi untuk mendapatkan nama package default berdasarkan buffer aktif + local function get_default_package() + local path = vim.fn.expand("%:p:h") + local project_root = vim.fn.getcwd() + local relative_path = path:sub(#project_root + 1) + relative_path = relative_path:gsub("app\\src\\main\\java\\", "") + relative_path = relative_path:gsub("src\\main\\java\\", "") + relative_path = relative_path:gsub("app/src/main/java/", "") + relative_path = relative_path:gsub("src/main/java/", "") + relative_path = relative_path:gsub("\\", ".") + relative_path = relative_path:gsub("/", ".") + return relative_path:sub(2) + end + + -- Ambil input dari pengguna untuk nama package dan nama kelas + local package_name, canceled_package = get_user_input("Enter package name: ", get_default_package()) + if canceled_package then + return + end + + local class_name, canceled_class = get_user_input("Enter class name: ", "MyClass") + if canceled_class then + return + end + + -- Format direktori dan path file berdasarkan input pengguna + local package_dir = nil + if package_name then + if is_maven_project() then + package_dir = string.format("src/main/java/%s", package_name:gsub("%.", "/")) + else + package_dir = string.format("app/src/main/java/%s", package_name:gsub("%.", "/")) + end + if vim.fn.isdirectory(package_dir) == 0 then + vim.fn.mkdir(package_dir, "p") + end + else + create_notif("Invalid package name: " .. package_name, "error") + return + end + + local file_path = string.format("%s/%s.java", package_dir, class_name) + if vim.fn.filereadable(file_path) == 1 then + create_notif("Class already exists: " .. file_path, "error") + return + end + + -- Tulis konten kelas Java ke dalam file + local class_content = string.format( + [[ +/* + * This Java source file. + */ +package %s; + +public class %s { + /** + * + */ + public %s() { + + } + // Other methods and fields +} +]], + package_name, + class_name, + class_name + ) + + local file = io.open(file_path, "w") + if file then + file:write(class_content) + file:close() + end + + -- Buka file Java yang baru dibuat di Neovim + vim.cmd(":edit " .. file_path) + create_notif("Java class created: " .. file_path, "info") +end + +vim.api.nvim_create_user_command("CreateJavaClass", create_java_class, {}) diff --git a/lua/auto-jdtls2/generate_java_interface.lua b/lua/auto-jdtls2/generate_java_interface.lua new file mode 100644 index 0000000..2e567d0 --- /dev/null +++ b/lua/auto-jdtls2/generate_java_interface.lua @@ -0,0 +1,109 @@ +local function create_java_class() + local function create_notif(message, level) + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify(message, level) + else + print(message) + end + end + + local is_maven_project = function() + if vim.fn.findfile("pom.xml", vim.fn.getcwd()) == "pom.xml" then + return true + else + return false + end + end + + -- Fungsi untuk meminta input dari pengguna dengan opsi untuk membatalkan + local function get_user_input(prompt, default_value) + vim.fn.inputsave() + local result = vim.fn.input(prompt, default_value) + vim.fn.inputrestore() + + -- Cek apakah pengguna menekan Esc untuk membatalkan input + if result == "" then + create_notif("Input canceled.", "info") + return nil, true + end + + return result, false + end + + -- Fungsi untuk mendapatkan nama package default berdasarkan buffer aktif + local function get_default_package() + local path = vim.fn.expand("%:p:h") + local project_root = vim.fn.getcwd() + local relative_path = path:sub(#project_root + 1) + relative_path = relative_path:gsub("app\\src\\main\\java\\", "") + relative_path = relative_path:gsub("src\\main\\java\\", "") + relative_path = relative_path:gsub("app/src/main/java/", "") + relative_path = relative_path:gsub("src/main/java/", "") + relative_path = relative_path:gsub("\\", ".") + relative_path = relative_path:gsub("/", ".") + return relative_path:sub(2) + end + + -- Ambil input dari pengguna untuk nama package dan nama kelas + local package_name, canceled_package = get_user_input("Enter package name: ", get_default_package()) + if canceled_package then + return + end + + local class_name, canceled_class = get_user_input("Enter interface name: ", "MyInterface") + if canceled_class then + return + end + + -- Format direktori dan path file berdasarkan input pengguna + local package_dir = nil + if package_name then + if is_maven_project() then + package_dir = string.format("src/main/java/%s", package_name:gsub("%.", "/")) + else + package_dir = string.format("app/src/main/java/%s", package_name:gsub("%.", "/")) + end + if vim.fn.isdirectory(package_dir) == 0 then + vim.fn.mkdir(package_dir, "p") + end + else + create_notif("Invalid package name: " .. package_name, "error") + return + end + + local file_path = string.format("%s/%s.java", package_dir, class_name) + if vim.fn.filereadable(file_path) == 1 then + create_notif("Class already exists: " .. file_path, "error") + return + end + + -- Tulis konten kelas Java ke dalam file + local class_content = string.format( + [[ +/* + * This Java source file. + */ +package %s; + +public interface %s { + // Other methods and fields +} +]], + package_name, + class_name, + class_name + ) + + local file = io.open(file_path, "w") + if file then + file:write(class_content) + file:close() + end + + -- Buka file Java yang baru dibuat di Neovim + vim.cmd(":edit " .. file_path) + create_notif("Java interface created: " .. file_path, "info") +end + +vim.api.nvim_create_user_command("CreateJavaInterface", create_java_class, {}) diff --git a/lua/auto-jdtls2/generate_java_main_class.lua b/lua/auto-jdtls2/generate_java_main_class.lua new file mode 100644 index 0000000..cd8878a --- /dev/null +++ b/lua/auto-jdtls2/generate_java_main_class.lua @@ -0,0 +1,115 @@ +local function create_java_main_class() + local function create_notif(message, level) + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify(message, level) + else + print(message) + end + end + + local is_maven_project = function() + if vim.fn.findfile("pom.xml", vim.fn.getcwd()) == "pom.xml" then + return true + else + return false + end + end + + -- Fungsi untuk meminta input dari pengguna dengan opsi untuk membatalkan + local function get_user_input(prompt, default_value) + vim.fn.inputsave() + local result = vim.fn.input(prompt, default_value) + vim.fn.inputrestore() + + -- Cek apakah pengguna menekan Esc untuk membatalkan input + if result == "" then + create_notif("Input canceled.", "info") + return nil, true + end + + return result, false + end + + -- Fungsi untuk mendapatkan nama package default berdasarkan buffer aktif + local function get_default_package() + local path = vim.fn.expand("%:p:h") + local project_root = vim.fn.getcwd() + local relative_path = path:sub(#project_root + 1) + relative_path = relative_path:gsub("app\\src\\main\\java\\", "") + relative_path = relative_path:gsub("src\\main\\java\\", "") + relative_path = relative_path:gsub("app/src/main/java/", "") + relative_path = relative_path:gsub("src/main/java/", "") + relative_path = relative_path:gsub("\\", ".") + relative_path = relative_path:gsub("/", ".") + return relative_path:sub(2) + end + + -- Ambil input dari pengguna untuk nama package dan nama kelas + local package_name, canceled_package = get_user_input("Enter package name: ", get_default_package()) + if canceled_package then + return + end + + local class_name, canceled_class = get_user_input("Enter class name: ", "MyMainClass") + if canceled_class then + return + end + + -- Format direktori dan path file berdasarkan input pengguna + local package_dir = nil + if package_name then + if is_maven_project() then + package_dir = string.format("src/main/java/%s", package_name:gsub("%.", "/")) + else + package_dir = string.format("app/src/main/java/%s", package_name:gsub("%.", "/")) + end + if vim.fn.isdirectory(package_dir) == 0 then + vim.fn.mkdir(package_dir, "p") + end + else + create_notif("Invalid package name: " .. package_name, "error") + return + end + + local file_path = string.format("%s/%s.java", package_dir, class_name) + if vim.fn.filereadable(file_path) == 1 then + create_notif("Class already exists: " .. file_path, "error") + return + end + + -- Tulis konten kelas Java ke dalam file + local class_content = string.format( + [[ +/* + * This Java source file. + */ +package %s; + +public class %s { + /** + * + */ + public static void main(String[] args) { + System.out.println("Hello World"); + } + +} +]], + package_name, + class_name, + class_name + ) + + local file = io.open(file_path, "w") + if file then + file:write(class_content) + file:close() + end + + -- Buka file Java yang baru dibuat di Neovim + vim.cmd(":edit " .. file_path) + create_notif("Java class created: " .. file_path, "info") +end + +vim.api.nvim_create_user_command("CreateJavaMainClass", create_java_main_class, {}) diff --git a/lua/auto-jdtls2/init.lua b/lua/auto-jdtls2/init.lua index 6afe333..83cc941 100644 --- a/lua/auto-jdtls2/init.lua +++ b/lua/auto-jdtls2/init.lua @@ -6,6 +6,9 @@ M.setup = function(opt) require("auto-jdtls.create_gradle_project") require("auto-jdtls.create_maven_project") require("auto-jdtls.create_springboot_project") + require("auto-jdtls.generate_java_class") + require("auto-jdtls.generate_java_interface") + require("auto-jdtls.generate_java_main_class") require("auto-jdtls.utils").attach_jdtls(opt) end diff --git a/lua/pcode/plugins/lang/java.lua b/lua/pcode/plugins/lang/java.lua index 50daaf7..aaba41c 100644 --- a/lua/pcode/plugins/lang/java.lua +++ b/lua/pcode/plugins/lang/java.lua @@ -12,6 +12,9 @@ M = { event = "VeryLazy", config = function() require("auto-java-project").setup() + vim.keymap.set("n", "Jc", ":CreateJavaClass", { desc = "Create Java Class" }) + vim.keymap.set("n", "Jm", ":CreateJavaMainClass", { desc = "Create Java Main Class" }) + vim.keymap.set("n", "Ji", ":CreateJavaInterface", { desc = "Create Java Interface" }) end, }, { diff --git a/lua/pcode/user/default.lua b/lua/pcode/user/default.lua index efd2f8a..ada123c 100644 --- a/lua/pcode/user/default.lua +++ b/lua/pcode/user/default.lua @@ -45,7 +45,7 @@ pcode.extras = { visualmulti = true, yanky = true, zenmode = true, - lspsignatur = true, + lspsignatur = false, telescopetreesiterinfo = true, } -- activate config themes