From 420b30df3d6322b843af59cacfd5c58577cf0ff9 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 2 Aug 2025 11:31:50 -0400 Subject: [PATCH] feat: refactoring --- lua/cargdev/plugins/intellij.lua | 504 --------------------------- lua/cargdev/plugins/intellij.lua.bak | 504 +++++++++++++++++++++++++++ 2 files changed, 504 insertions(+), 504 deletions(-) delete mode 100644 lua/cargdev/plugins/intellij.lua create mode 100644 lua/cargdev/plugins/intellij.lua.bak diff --git a/lua/cargdev/plugins/intellij.lua b/lua/cargdev/plugins/intellij.lua deleted file mode 100644 index c6d5671..0000000 --- a/lua/cargdev/plugins/intellij.lua +++ /dev/null @@ -1,504 +0,0 @@ -return { - dir = "/Users/carlos/Documents/SSD_Documents/projects/intellij.nvim", - dependencies = { - "mfussenegger/nvim-jdtls", -- Java Language Server Protocol - "mfussenegger/nvim-dap", -- Debug Adapter Protocol - "rcarriga/nvim-dap-ui", -- DAP UI components - "akinsho/toggleterm.nvim", -- Terminal integration - "nvim-telescope/telescope.nvim", -- For command palette search - }, - config = function() - require("intellij").setup({ - -- Theme configuration - theme = "inherit", -- or "light", "dark" - - -- Enable verbose logging for debugging - verbose_logging = false, - - -- Automatically toggle auto-open main file on start - auto_open_main_on_start = true, - - -- Custom actions for your workflow - custom_actions = { - { - name = "Open Project in IntelliJ IDEA", - action = function() - vim.fn.system("idea .") - vim.notify("Opening project in IntelliJ IDEA...") - end - }, - { - name = "Open in VS Code", - action = function() - vim.fn.system("code .") - vim.notify("Opening project in VS Code...") - end - }, - { - name = "Git Status", - action = function() - require("toggleterm").exec("git status", 1, 12, "float") - end - }, - { - name = "Git Log", - action = function() - require("toggleterm").exec("git log --oneline -10", 1, 12, "float") - end - } - }, - - -- Keymaps for quick access - keymaps = { - n = { - ["jp"] = function() require('intellij').show_palette() end, - ["jd"] = function() require('intellij').show_startup_diagnostics() end, - ["jr"] = function() require('intellij').reload() end, - ["jv"] = function() require('intellij').toggle_verbose_logging() end, - }, - v = { - ["jt"] = function() - local start_line = vim.fn.line("'<") - local end_line = vim.fn.line("'>") - require("toggleterm").exec("mvn test -Dtest=*#" .. start_line .. "_" .. end_line, 1, 12, "float") - end - } - }, - - -- Project-specific commands based on project type - project_commands = function(project_type) - local commands = {} - - if project_type == "spring-boot" then - table.insert(commands, { - name = "Spring Boot DevTools", - action = function() - require("toggleterm").exec("mvn spring-boot:run -Dspring-boot.run.profiles=dev", 1, 12, "float") - end - }) - table.insert(commands, { - name = "Spring Boot Actuator Health", - action = function() - require("toggleterm").exec("curl -s http://localhost:8080/actuator/health | jq", 1, 12, "float") - end - }) - end - - if project_type == "maven" then - table.insert(commands, { - name = "Maven Dependency Tree", - action = function() - require("toggleterm").exec("mvn dependency:tree", 1, 12, "float") - end - }) - table.insert(commands, { - name = "Maven Clean Install", - action = function() - require("toggleterm").exec("mvn clean install", 1, 12, "float") - end - }) - end - - if project_type == "gradle" then - table.insert(commands, { - name = "Gradle Dependencies", - action = function() - require("toggleterm").exec("./gradlew dependencies", 1, 12, "float") - end - }) - table.insert(commands, { - name = "Gradle Clean Build", - action = function() - require("toggleterm").exec("./gradlew clean build", 1, 12, "float") - end - }) - end - - return commands - end - }) - - -- Register hooks for additional functionality - require("intellij").register_hook("actions", function(project_type) - local hooks = {} - - -- Add recent files action - table.insert(hooks, { - name = "Recent Java Files", - action = function() - local recent_files = require("intellij").get_recent_java_files() - if #recent_files > 0 then - vim.ui.select(recent_files, { prompt = "Recent Java Files:" }, function(choice) - if choice then - local ok, _ = pcall(vim.cmd, "edit " .. choice) - if not ok then - vim.notify("Could not open file: " .. choice, vim.log.levels.WARN, { title = "intellij.nvim" }) - end - end - end) - else - vim.notify("No recent Java files found") - end - end - }) - - return hooks - end) - - -- AUTOMATIC JAVA PROJECT DETECTION AND STARTUP - local function find_main_java_files() - local actions = require("intellij.actions") - local configs = actions.get_run_configs() - return configs and configs.mains or {} - end - - local function is_main_file_open() - local current_file = vim.api.nvim_buf_get_name(0) - local main_files = find_main_java_files() - - for _, main_file in ipairs(main_files) do - if current_file:match(main_file:gsub("%.", "/") .. "%.java$") then - return true - end - end - return false - end - - local function open_first_main_file() - local main_files = find_main_java_files() - - if #main_files > 0 then - -- Try to find the main file in the project - local project_root = vim.loop.cwd() - local found_file = nil - - -- Debug: show what we're looking for - vim.notify("Looking for main files: " .. table.concat(main_files, ", "), vim.log.levels.INFO, { title = "intellij.nvim" }) - - for _, main_class in ipairs(main_files) do - local file_path - if main_class:match("%.java$") then - file_path = main_class:gsub("^%./", "") - else - file_path = main_class:gsub("%.", "/") .. ".java" - end - - local possible_paths = { - project_root .. "/" .. file_path, - project_root .. "/src/main/java/" .. file_path, - project_root .. "/src/java/" .. file_path, - project_root .. "/src/" .. file_path, - project_root .. "/app/src/main/java/" .. file_path, - project_root .. "/main/java/" .. file_path, - } - - for _, full_path in ipairs(possible_paths) do - if vim.fn.filereadable(full_path) == 1 then - found_file = full_path - vim.notify("Found main file at: " .. full_path, vim.log.levels.INFO, { title = "intellij.nvim" }) - break - end - end - - if found_file then - break - end - end - - if found_file then - local ok, _ = pcall(vim.cmd, "edit " .. found_file) - if ok then - vim.notify("Opened main file: " .. found_file, vim.log.levels.INFO, { title = "intellij.nvim" }) - else - vim.notify("Could not open main file: " .. found_file, vim.log.levels.WARN, { title = "intellij.nvim" }) - end - return true - else - -- Use telescope for better selection if available - local function select_with_telescope(items, prompt, cb) - local ok, telescope = pcall(require, 'telescope.builtin') - if ok then - telescope.find_files({ - prompt_title = prompt, - find_command = { 'echo', table.concat(items, '\n') }, - attach_mappings = function(_, map) - require('telescope.actions').select_default:replace(function() - local entry = require('telescope.actions.state').get_selected_entry() - cb(entry.value) - require('telescope.actions').close(_) - end) - return true - end, - }) - else - vim.ui.select(items, { prompt = prompt }, cb) - end - end - - vim.notify("Could not automatically find main files. Showing selection dialog.", vim.log.levels.WARN, { title = "intellij.nvim" }) - select_with_telescope(main_files, "Select main class to open:", function(choice) - if choice then - local file_path - if choice:match("%.java$") then - file_path = choice:gsub("^%./", "") - else - file_path = choice:gsub("%.", "/") .. ".java" - end - - local possible_paths = { - project_root .. "/" .. file_path, - project_root .. "/src/main/java/" .. file_path, - project_root .. "/src/java/" .. file_path, - project_root .. "/src/" .. file_path, - project_root .. "/app/src/main/java/" .. file_path, - project_root .. "/main/java/" .. file_path, - } - - local found = false - for _, full_path in ipairs(possible_paths) do - if vim.fn.filereadable(full_path) == 1 then - local ok, _ = pcall(vim.cmd, "edit " .. full_path) - if ok then - vim.notify("Opened main file: " .. full_path, vim.log.levels.INFO, { title = "intellij.nvim" }) - else - vim.notify("Could not open main file: " .. full_path, vim.log.levels.WARN, { title = "intellij.nvim" }) - end - found = true - break - end - end - - if not found then - vim.notify("Could not find main file for: " .. choice .. "\nTried paths:\n" .. table.concat(possible_paths, "\n"), vim.log.levels.WARN, { title = "intellij.nvim" }) - end - end - end) - return true - end - else - vim.notify("No main files found in project", vim.log.levels.WARN, { title = "intellij.nvim" }) - end - return false - end - - local function detect_and_start_java_project() - -- Prevent duplicate detection - if vim.b.java_project_detected then - return true - end - - local actions = require("intellij.actions") - local project_type = actions.detect_project_type() - - if project_type then - -- Store project info in buffer variables - vim.b.java_project_type = project_type - vim.b.java_project_detected = true - - -- Get JDK and environment info - local jdk_info = actions.get_jdk_info() - local env_info = actions.get_env_info() - - -- Show project detection notification (only once) - local jdk_version = jdk_info and jdk_info.jdk_version or "unknown" - vim.notify( - string.format("Java project detected: %s (JDK: %s)", project_type, jdk_version), - vim.log.levels.INFO, - { title = "intellij.nvim", timeout = 3000 } - ) - - -- Auto-start Java LSP if available (only if not already started) - if pcall(require, 'jdtls') and not vim.lsp.get_active_clients({ name = 'jdtls' })[1] then - vim.defer_fn(function() - -- Try to start LSP safely with error handling - local ok, result = pcall(vim.cmd, "LspStart jdtls") - if ok then - vim.notify("Java LSP started", vim.log.levels.INFO, { title = "intellij.nvim" }) - - -- Add error handler for LSP semantic tokens issues - vim.api.nvim_create_autocmd("LspAttach", { - callback = function(args) - local client = vim.lsp.get_client_by_id(args.data.client_id) - if client and client.name == "jdtls" then - -- Disable semantic tokens if they cause issues - client.server_capabilities.semanticTokensProvider = nil - end - end, - }) - else - vim.notify("Java LSP could not be started automatically", vim.log.levels.WARN, { title = "intellij.nvim" }) - end - end, 1000) - end - - -- Auto-compile project on detection (optional) - if vim.g.auto_compile_java_projects then - vim.defer_fn(function() - if project_type == "maven" then - require("toggleterm").exec("mvn compile", 1, 12, "float") - elseif project_type == "gradle" then - require("toggleterm").exec("./gradlew compileJava", 1, 12, "float") - end - end, 2000) - end - - -- Auto-open main file if not already open - if vim.g.auto_open_main_file and not is_main_file_open() then - vim.defer_fn(function() - open_first_main_file() - end, 1500) - end - - return true - end - return false - end - - -- Set up autocommands for automatic detection (with debouncing) - local detection_timer = nil - - local function debounced_detection() - if detection_timer then - vim.loop.timer_stop(detection_timer) - end - detection_timer = vim.defer_fn(detect_and_start_java_project, 100) - end - - vim.api.nvim_create_autocmd("FileType", { - pattern = { "java" }, - callback = function() - -- Auto-detect project type when opening Java files - debounced_detection() - end - }) - - -- Auto-detect when entering directories with Java project files - vim.api.nvim_create_autocmd("DirChanged", { - pattern = "*", - callback = function() - -- Check if we're in a Java project directory - if vim.fn.filereadable("pom.xml") == 1 or - vim.fn.filereadable("build.gradle") == 1 or - vim.fn.filereadable("build.gradle.kts") == 1 then - debounced_detection() - end - end - }) - - -- Auto-detect when opening files in Java project directories - vim.api.nvim_create_autocmd("BufRead", { - pattern = "*", - callback = function() - local cwd = vim.loop.cwd() - if cwd and (vim.fn.filereadable(cwd .. "/pom.xml") == 1 or - vim.fn.filereadable(cwd .. "/build.gradle") == 1 or - vim.fn.filereadable(cwd .. "/build.gradle.kts") == 1) then - debounced_detection() - end - end - }) - - -- Auto-detect when VimEnter (when Neovim starts) - vim.api.nvim_create_autocmd("VimEnter", { - pattern = "*", - callback = function() - -- Check if we started in a Java project directory - local cwd = vim.loop.cwd() - if cwd and (vim.fn.filereadable(cwd .. "/pom.xml") == 1 or - vim.fn.filereadable(cwd .. "/build.gradle") == 1 or - vim.fn.filereadable(cwd .. "/build.gradle.kts") == 1) then - vim.defer_fn(detect_and_start_java_project, 500) - end - end - }) - - -- Global variable to control auto-compilation - vim.g.auto_compile_java_projects = true - - -- Global variable to control auto-opening main files - vim.g.auto_open_main_file = true - - -- Add command to toggle auto-compilation - vim.api.nvim_create_user_command("ToggleJavaAutoCompile", function() - vim.g.auto_compile_java_projects = not vim.g.auto_compile_java_projects - vim.notify( - "Java auto-compilation " .. (vim.g.auto_compile_java_projects and "enabled" or "disabled"), - vim.log.levels.INFO, - { title = "intellij.nvim" } - ) - end, {}) - - -- Add command to clean up cache and temporary files - vim.api.nvim_create_user_command("IntelliJCleanup", function() - require("intellij").cleanup() - end, {}) - - -- Add command to toggle auto-opening main files - vim.api.nvim_create_user_command("ToggleJavaAutoOpenMain", function() - vim.g.auto_open_main_file = not vim.g.auto_open_main_file - vim.notify( - "Java auto-open main file " .. (vim.g.auto_open_main_file and "enabled" or "disabled"), - vim.log.levels.INFO, - { title = "intellij.nvim" } - ) - end, {}) - - -- Add command to manually open main file - vim.api.nvim_create_user_command("OpenJavaMainFile", function() - if open_first_main_file() then - vim.notify("Main file opened", vim.log.levels.INFO, { title = "intellij.nvim" }) - else - vim.notify("No main file found in current project", vim.log.levels.WARN, { title = "intellij.nvim" }) - end - end, {}) - - -- Add command to debug file search - vim.api.nvim_create_user_command("DebugJavaFileSearch", function() - local actions = require("intellij.actions") - local configs = actions.get_run_configs() - - vim.notify("=== Java File Search Debug ===", vim.log.levels.INFO, { title = "intellij.nvim" }) - vim.notify("Project root: " .. vim.loop.cwd(), vim.log.levels.INFO, { title = "intellij.nvim" }) - - if configs and configs.mains then - vim.notify("Found main classes: " .. table.concat(configs.mains, ", "), vim.log.levels.INFO, { title = "intellij.nvim" }) - - for _, main_class in ipairs(configs.mains) do - local file_path = main_class:gsub("%.", "/") .. ".java" - local project_root = vim.loop.cwd() - - local possible_paths = { - project_root .. "/src/main/java/" .. file_path, - project_root .. "/src/java/" .. file_path, - project_root .. "/src/" .. file_path, - project_root .. "/" .. file_path, - project_root .. "/app/src/main/java/" .. file_path, - project_root .. "/main/java/" .. file_path, - } - - vim.notify("Searching for: " .. main_class, vim.log.levels.INFO, { title = "intellij.nvim" }) - for _, path in ipairs(possible_paths) do - local exists = vim.fn.filereadable(path) == 1 - vim.notify(" " .. path .. " -> " .. (exists and "EXISTS" or "NOT FOUND"), vim.log.levels.INFO, { title = "intellij.nvim" }) - end - end - else - vim.notify("No main classes found", vim.log.levels.WARN, { title = "intellij.nvim" }) - end - end, {}) - - -- Add command to manually detect Java project - vim.api.nvim_create_user_command("DetectJavaProject", function() - if detect_and_start_java_project() then - vim.notify("Java project detection completed", vim.log.levels.INFO, { title = "intellij.nvim" }) - else - vim.notify("No Java project detected in current directory", vim.log.levels.WARN, { title = "intellij.nvim" }) - end - end, {}) - - -- Check for config flag to auto-toggle main file opening - if type(require("intellij").opts) == "table" and require("intellij").opts.auto_open_main_on_start then - vim.g.auto_open_main_file = true - end - end -} diff --git a/lua/cargdev/plugins/intellij.lua.bak b/lua/cargdev/plugins/intellij.lua.bak new file mode 100644 index 0000000..1804a0f --- /dev/null +++ b/lua/cargdev/plugins/intellij.lua.bak @@ -0,0 +1,504 @@ +-- return { +-- dir = "/Users/carlos/Documents/SSD_Documents/projects/intellij.nvim", +-- dependencies = { +-- "mfussenegger/nvim-jdtls", -- Java Language Server Protocol +-- "mfussenegger/nvim-dap", -- Debug Adapter Protocol +-- "rcarriga/nvim-dap-ui", -- DAP UI components +-- "akinsho/toggleterm.nvim", -- Terminal integration +-- "nvim-telescope/telescope.nvim", -- For command palette search +-- }, +-- config = function() +-- require("intellij").setup({ +-- -- Theme configuration +-- theme = "inherit", -- or "light", "dark" +-- +-- -- Enable verbose logging for debugging +-- verbose_logging = false, +-- +-- -- Automatically toggle auto-open main file on start +-- auto_open_main_on_start = true, +-- +-- -- Custom actions for your workflow +-- custom_actions = { +-- { +-- name = "Open Project in IntelliJ IDEA", +-- action = function() +-- vim.fn.system("idea .") +-- vim.notify("Opening project in IntelliJ IDEA...") +-- end +-- }, +-- { +-- name = "Open in VS Code", +-- action = function() +-- vim.fn.system("code .") +-- vim.notify("Opening project in VS Code...") +-- end +-- }, +-- { +-- name = "Git Status", +-- action = function() +-- require("toggleterm").exec("git status", 1, 12, "float") +-- end +-- }, +-- { +-- name = "Git Log", +-- action = function() +-- require("toggleterm").exec("git log --oneline -10", 1, 12, "float") +-- end +-- } +-- }, +-- +-- -- Keymaps for quick access +-- keymaps = { +-- n = { +-- ["jp"] = function() require('intellij').show_palette() end, +-- ["jd"] = function() require('intellij').show_startup_diagnostics() end, +-- ["jr"] = function() require('intellij').reload() end, +-- ["jv"] = function() require('intellij').toggle_verbose_logging() end, +-- }, +-- v = { +-- ["jt"] = function() +-- local start_line = vim.fn.line("'<") +-- local end_line = vim.fn.line("'>") +-- require("toggleterm").exec("mvn test -Dtest=*#" .. start_line .. "_" .. end_line, 1, 12, "float") +-- end +-- } +-- }, +-- +-- -- Project-specific commands based on project type +-- project_commands = function(project_type) +-- local commands = {} +-- +-- if project_type == "spring-boot" then +-- table.insert(commands, { +-- name = "Spring Boot DevTools", +-- action = function() +-- require("toggleterm").exec("mvn spring-boot:run -Dspring-boot.run.profiles=dev", 1, 12, "float") +-- end +-- }) +-- table.insert(commands, { +-- name = "Spring Boot Actuator Health", +-- action = function() +-- require("toggleterm").exec("curl -s http://localhost:8080/actuator/health | jq", 1, 12, "float") +-- end +-- }) +-- end +-- +-- if project_type == "maven" then +-- table.insert(commands, { +-- name = "Maven Dependency Tree", +-- action = function() +-- require("toggleterm").exec("mvn dependency:tree", 1, 12, "float") +-- end +-- }) +-- table.insert(commands, { +-- name = "Maven Clean Install", +-- action = function() +-- require("toggleterm").exec("mvn clean install", 1, 12, "float") +-- end +-- }) +-- end +-- +-- if project_type == "gradle" then +-- table.insert(commands, { +-- name = "Gradle Dependencies", +-- action = function() +-- require("toggleterm").exec("./gradlew dependencies", 1, 12, "float") +-- end +-- }) +-- table.insert(commands, { +-- name = "Gradle Clean Build", +-- action = function() +-- require("toggleterm").exec("./gradlew clean build", 1, 12, "float") +-- end +-- }) +-- end +-- +-- return commands +-- end +-- }) +-- +-- -- Register hooks for additional functionality +-- require("intellij").register_hook("actions", function(project_type) +-- local hooks = {} +-- +-- -- Add recent files action +-- table.insert(hooks, { +-- name = "Recent Java Files", +-- action = function() +-- local recent_files = require("intellij").get_recent_java_files() +-- if #recent_files > 0 then +-- vim.ui.select(recent_files, { prompt = "Recent Java Files:" }, function(choice) +-- if choice then +-- local ok, _ = pcall(vim.cmd, "edit " .. choice) +-- if not ok then +-- vim.notify("Could not open file: " .. choice, vim.log.levels.WARN, { title = "intellij.nvim" }) +-- end +-- end +-- end) +-- else +-- vim.notify("No recent Java files found") +-- end +-- end +-- }) +-- +-- return hooks +-- end) +-- +-- -- AUTOMATIC JAVA PROJECT DETECTION AND STARTUP +-- local function find_main_java_files() +-- local actions = require("intellij.actions") +-- local configs = actions.get_run_configs() +-- return configs and configs.mains or {} +-- end +-- +-- local function is_main_file_open() +-- local current_file = vim.api.nvim_buf_get_name(0) +-- local main_files = find_main_java_files() +-- +-- for _, main_file in ipairs(main_files) do +-- if current_file:match(main_file:gsub("%.", "/") .. "%.java$") then +-- return true +-- end +-- end +-- return false +-- end +-- +-- local function open_first_main_file() +-- local main_files = find_main_java_files() +-- +-- if #main_files > 0 then +-- -- Try to find the main file in the project +-- local project_root = vim.loop.cwd() +-- local found_file = nil +-- +-- -- Debug: show what we're looking for +-- vim.notify("Looking for main files: " .. table.concat(main_files, ", "), vim.log.levels.INFO, { title = "intellij.nvim" }) +-- +-- for _, main_class in ipairs(main_files) do +-- local file_path +-- if main_class:match("%.java$") then +-- file_path = main_class:gsub("^%./", "") +-- else +-- file_path = main_class:gsub("%.", "/") .. ".java" +-- end +-- +-- local possible_paths = { +-- project_root .. "/" .. file_path, +-- project_root .. "/src/main/java/" .. file_path, +-- project_root .. "/src/java/" .. file_path, +-- project_root .. "/src/" .. file_path, +-- project_root .. "/app/src/main/java/" .. file_path, +-- project_root .. "/main/java/" .. file_path, +-- } +-- +-- for _, full_path in ipairs(possible_paths) do +-- if vim.fn.filereadable(full_path) == 1 then +-- found_file = full_path +-- vim.notify("Found main file at: " .. full_path, vim.log.levels.INFO, { title = "intellij.nvim" }) +-- break +-- end +-- end +-- +-- if found_file then +-- break +-- end +-- end +-- +-- if found_file then +-- local ok, _ = pcall(vim.cmd, "edit " .. found_file) +-- if ok then +-- vim.notify("Opened main file: " .. found_file, vim.log.levels.INFO, { title = "intellij.nvim" }) +-- else +-- vim.notify("Could not open main file: " .. found_file, vim.log.levels.WARN, { title = "intellij.nvim" }) +-- end +-- return true +-- else +-- -- Use telescope for better selection if available +-- local function select_with_telescope(items, prompt, cb) +-- local ok, telescope = pcall(require, 'telescope.builtin') +-- if ok then +-- telescope.find_files({ +-- prompt_title = prompt, +-- find_command = { 'echo', table.concat(items, '\n') }, +-- attach_mappings = function(_, map) +-- require('telescope.actions').select_default:replace(function() +-- local entry = require('telescope.actions.state').get_selected_entry() +-- cb(entry.value) +-- require('telescope.actions').close(_) +-- end) +-- return true +-- end, +-- }) +-- else +-- vim.ui.select(items, { prompt = prompt }, cb) +-- end +-- end +-- +-- vim.notify("Could not automatically find main files. Showing selection dialog.", vim.log.levels.WARN, { title = "intellij.nvim" }) +-- select_with_telescope(main_files, "Select main class to open:", function(choice) +-- if choice then +-- local file_path +-- if choice:match("%.java$") then +-- file_path = choice:gsub("^%./", "") +-- else +-- file_path = choice:gsub("%.", "/") .. ".java" +-- end +-- +-- local possible_paths = { +-- project_root .. "/" .. file_path, +-- project_root .. "/src/main/java/" .. file_path, +-- project_root .. "/src/java/" .. file_path, +-- project_root .. "/src/" .. file_path, +-- project_root .. "/app/src/main/java/" .. file_path, +-- project_root .. "/main/java/" .. file_path, +-- } +-- +-- local found = false +-- for _, full_path in ipairs(possible_paths) do +-- if vim.fn.filereadable(full_path) == 1 then +-- local ok, _ = pcall(vim.cmd, "edit " .. full_path) +-- if ok then +-- vim.notify("Opened main file: " .. full_path, vim.log.levels.INFO, { title = "intellij.nvim" }) +-- else +-- vim.notify("Could not open main file: " .. full_path, vim.log.levels.WARN, { title = "intellij.nvim" }) +-- end +-- found = true +-- break +-- end +-- end +-- +-- if not found then +-- vim.notify("Could not find main file for: " .. choice .. "\nTried paths:\n" .. table.concat(possible_paths, "\n"), vim.log.levels.WARN, { title = "intellij.nvim" }) +-- end +-- end +-- end) +-- return true +-- end +-- else +-- vim.notify("No main files found in project", vim.log.levels.WARN, { title = "intellij.nvim" }) +-- end +-- return false +-- end +-- +-- local function detect_and_start_java_project() +-- -- Prevent duplicate detection +-- if vim.b.java_project_detected then +-- return true +-- end +-- +-- local actions = require("intellij.actions") +-- local project_type = actions.detect_project_type() +-- +-- if project_type then +-- -- Store project info in buffer variables +-- vim.b.java_project_type = project_type +-- vim.b.java_project_detected = true +-- +-- -- Get JDK and environment info +-- local jdk_info = actions.get_jdk_info() +-- local env_info = actions.get_env_info() +-- +-- -- Show project detection notification (only once) +-- local jdk_version = jdk_info and jdk_info.jdk_version or "unknown" +-- vim.notify( +-- string.format("Java project detected: %s (JDK: %s)", project_type, jdk_version), +-- vim.log.levels.INFO, +-- { title = "intellij.nvim", timeout = 3000 } +-- ) +-- +-- -- Auto-start Java LSP if available (only if not already started) +-- if pcall(require, 'jdtls') and not vim.lsp.get_active_clients({ name = 'jdtls' })[1] then +-- vim.defer_fn(function() +-- -- Try to start LSP safely with error handling +-- local ok, result = pcall(vim.cmd, "LspStart jdtls") +-- if ok then +-- vim.notify("Java LSP started", vim.log.levels.INFO, { title = "intellij.nvim" }) +-- +-- -- Add error handler for LSP semantic tokens issues +-- vim.api.nvim_create_autocmd("LspAttach", { +-- callback = function(args) +-- local client = vim.lsp.get_client_by_id(args.data.client_id) +-- if client and client.name == "jdtls" then +-- -- Disable semantic tokens if they cause issues +-- client.server_capabilities.semanticTokensProvider = nil +-- end +-- end, +-- }) +-- else +-- vim.notify("Java LSP could not be started automatically", vim.log.levels.WARN, { title = "intellij.nvim" }) +-- end +-- end, 1000) +-- end +-- +-- -- Auto-compile project on detection (optional) +-- if vim.g.auto_compile_java_projects then +-- vim.defer_fn(function() +-- if project_type == "maven" then +-- require("toggleterm").exec("mvn compile", 1, 12, "float") +-- elseif project_type == "gradle" then +-- require("toggleterm").exec("./gradlew compileJava", 1, 12, "float") +-- end +-- end, 2000) +-- end +-- +-- -- Auto-open main file if not already open +-- if vim.g.auto_open_main_file and not is_main_file_open() then +-- vim.defer_fn(function() +-- open_first_main_file() +-- end, 1500) +-- end +-- +-- return true +-- end +-- return false +-- end +-- +-- -- Set up autocommands for automatic detection (with debouncing) +-- local detection_timer = nil +-- +-- local function debounced_detection() +-- if detection_timer then +-- vim.loop.timer_stop(detection_timer) +-- end +-- detection_timer = vim.defer_fn(detect_and_start_java_project, 100) +-- end +-- +-- vim.api.nvim_create_autocmd("FileType", { +-- pattern = { "java" }, +-- callback = function() +-- -- Auto-detect project type when opening Java files +-- debounced_detection() +-- end +-- }) +-- +-- -- Auto-detect when entering directories with Java project files +-- vim.api.nvim_create_autocmd("DirChanged", { +-- pattern = "*", +-- callback = function() +-- -- Check if we're in a Java project directory +-- if vim.fn.filereadable("pom.xml") == 1 or +-- vim.fn.filereadable("build.gradle") == 1 or +-- vim.fn.filereadable("build.gradle.kts") == 1 then +-- debounced_detection() +-- end +-- end +-- }) +-- +-- -- Auto-detect when opening files in Java project directories +-- vim.api.nvim_create_autocmd("BufRead", { +-- pattern = "*", +-- callback = function() +-- local cwd = vim.loop.cwd() +-- if cwd and (vim.fn.filereadable(cwd .. "/pom.xml") == 1 or +-- vim.fn.filereadable(cwd .. "/build.gradle") == 1 or +-- vim.fn.filereadable(cwd .. "/build.gradle.kts") == 1) then +-- debounced_detection() +-- end +-- end +-- }) +-- +-- -- Auto-detect when VimEnter (when Neovim starts) +-- vim.api.nvim_create_autocmd("VimEnter", { +-- pattern = "*", +-- callback = function() +-- -- Check if we started in a Java project directory +-- local cwd = vim.loop.cwd() +-- if cwd and (vim.fn.filereadable(cwd .. "/pom.xml") == 1 or +-- vim.fn.filereadable(cwd .. "/build.gradle") == 1 or +-- vim.fn.filereadable(cwd .. "/build.gradle.kts") == 1) then +-- vim.defer_fn(detect_and_start_java_project, 500) +-- end +-- end +-- }) +-- +-- -- Global variable to control auto-compilation +-- vim.g.auto_compile_java_projects = true +-- +-- -- Global variable to control auto-opening main files +-- vim.g.auto_open_main_file = true +-- +-- -- Add command to toggle auto-compilation +-- vim.api.nvim_create_user_command("ToggleJavaAutoCompile", function() +-- vim.g.auto_compile_java_projects = not vim.g.auto_compile_java_projects +-- vim.notify( +-- "Java auto-compilation " .. (vim.g.auto_compile_java_projects and "enabled" or "disabled"), +-- vim.log.levels.INFO, +-- { title = "intellij.nvim" } +-- ) +-- end, {}) +-- +-- -- Add command to clean up cache and temporary files +-- vim.api.nvim_create_user_command("IntelliJCleanup", function() +-- require("intellij").cleanup() +-- end, {}) +-- +-- -- Add command to toggle auto-opening main files +-- vim.api.nvim_create_user_command("ToggleJavaAutoOpenMain", function() +-- vim.g.auto_open_main_file = not vim.g.auto_open_main_file +-- vim.notify( +-- "Java auto-open main file " .. (vim.g.auto_open_main_file and "enabled" or "disabled"), +-- vim.log.levels.INFO, +-- { title = "intellij.nvim" } +-- ) +-- end, {}) +-- +-- -- Add command to manually open main file +-- vim.api.nvim_create_user_command("OpenJavaMainFile", function() +-- if open_first_main_file() then +-- vim.notify("Main file opened", vim.log.levels.INFO, { title = "intellij.nvim" }) +-- else +-- vim.notify("No main file found in current project", vim.log.levels.WARN, { title = "intellij.nvim" }) +-- end +-- end, {}) +-- +-- -- Add command to debug file search +-- vim.api.nvim_create_user_command("DebugJavaFileSearch", function() +-- local actions = require("intellij.actions") +-- local configs = actions.get_run_configs() +-- +-- vim.notify("=== Java File Search Debug ===", vim.log.levels.INFO, { title = "intellij.nvim" }) +-- vim.notify("Project root: " .. vim.loop.cwd(), vim.log.levels.INFO, { title = "intellij.nvim" }) +-- +-- if configs and configs.mains then +-- vim.notify("Found main classes: " .. table.concat(configs.mains, ", "), vim.log.levels.INFO, { title = "intellij.nvim" }) +-- +-- for _, main_class in ipairs(configs.mains) do +-- local file_path = main_class:gsub("%.", "/") .. ".java" +-- local project_root = vim.loop.cwd() +-- +-- local possible_paths = { +-- project_root .. "/src/main/java/" .. file_path, +-- project_root .. "/src/java/" .. file_path, +-- project_root .. "/src/" .. file_path, +-- project_root .. "/" .. file_path, +-- project_root .. "/app/src/main/java/" .. file_path, +-- project_root .. "/main/java/" .. file_path, +-- } +-- +-- vim.notify("Searching for: " .. main_class, vim.log.levels.INFO, { title = "intellij.nvim" }) +-- for _, path in ipairs(possible_paths) do +-- local exists = vim.fn.filereadable(path) == 1 +-- vim.notify(" " .. path .. " -> " .. (exists and "EXISTS" or "NOT FOUND"), vim.log.levels.INFO, { title = "intellij.nvim" }) +-- end +-- end +-- else +-- vim.notify("No main classes found", vim.log.levels.WARN, { title = "intellij.nvim" }) +-- end +-- end, {}) +-- +-- -- Add command to manually detect Java project +-- vim.api.nvim_create_user_command("DetectJavaProject", function() +-- if detect_and_start_java_project() then +-- vim.notify("Java project detection completed", vim.log.levels.INFO, { title = "intellij.nvim" }) +-- else +-- vim.notify("No Java project detected in current directory", vim.log.levels.WARN, { title = "intellij.nvim" }) +-- end +-- end, {}) +-- +-- -- Check for config flag to auto-toggle main file opening +-- if type(require("intellij").opts) == "table" and require("intellij").opts.auto_open_main_on_start then +-- vim.g.auto_open_main_file = true +-- end +-- end +-- }