From b5ab3eed1f83bf05fe395432e9616452b91c361c Mon Sep 17 00:00:00 2001 From: arookieofc <2128194521@qq.com> Date: Fri, 6 Nov 2026 20:47:22 +0800 Subject: [PATCH] Revert merge-commit landings of #1796 #1797 #1798 #1799 #1803 #1805 (#1814) * Revert "Merge pull request #1805 from a-rookie-of-C-language/fix/gradle-all-tests-cwd" This reverts commit 37975fd71abce55e84cdcf9d490effdb24213588, reversing changes made to 2028772ab2d29a710803fbbcffea17c199559445. * Revert "Merge pull request #1803 from a-rookie-of-C-language/feat/flash-taskbar-on-breakpoint" This reverts commit 2028772ab2d29a710803fbbcffea17c199559445, reversing changes made to 5b53b579d9b2adf697decd556e667f7e70061805. * Revert "Merge pull request #1799 from a-rookie-of-C-language/fix/mybatis-annotation-method-name" This reverts commit 5b53b579d9b2adf697decd556e667f7e70061805, reversing changes made to 9db90c714165163bb0ab6631dfbed58d0d99c5a4. * Revert "Merge pull request #1798 from a-rookie-of-C-language/fix/squeezed-tab-close-button" This reverts commit 9db90c714165163bb0ab6631dfbed58d0d99c5a4, reversing changes made to 3bb58ff5427c5fac8419605023952efe97aead37. * Revert "Merge pull request #1797 from a-rookie-of-C-language/fix/open-recent-path-tooltip" This reverts commit 3bb58ff5427c5fac8419605023952efe97aead37, reversing changes made to f0ad100a255c4233f144db687934519c8d1a06ec. * Revert "Merge pull request #1796 from a-rookie-of-C-language/fix/find-match-fg-color" This reverts commit f0ad100a255c4233f144db687934519c8d1a06ec, reversing changes made to fca9d1e08faab6e686fc6018eb5e10a37c0ed8bb. --- plugins/official/mybatis/dist/plugin.wasm | Bin 168245 -> 167191 bytes .../official/mybatis/dist/plugin.wasm.sources | 2 +- plugins/official/mybatis/src/lib.rs | 58 +----------------- src-tauri/src/application_focus.rs | 2 +- src-tauri/src/events.rs | 25 +------- src/editor/core/cm/theme.ts | 2 - src/features/run/producers.test.ts | 9 --- src/features/run/producers.ts | 37 +---------- src/ui/Menu.tsx | 4 +- src/ui/Tabs.module.css | 7 --- 10 files changed, 8 insertions(+), 138 deletions(-) diff --git a/plugins/official/mybatis/dist/plugin.wasm b/plugins/official/mybatis/dist/plugin.wasm index 5c7d59bc8ff04641b4529ed06619272452241a62..4f71ecf9dab6feba5bf719c93a6fd50a31fa2638 100644 GIT binary patch delta 11116 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 a!V!lf0Y`5f18}6{c&Mkk;2~Cd_x}MRd9%v^ delta 12031 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 diff --git a/plugins/official/mybatis/dist/plugin.wasm.sources b/plugins/official/mybatis/dist/plugin.wasm.sources index 26af2f4b7..e59d759a4 100644 --- a/plugins/official/mybatis/dist/plugin.wasm.sources +++ b/plugins/official/mybatis/dist/plugin.wasm.sources @@ -1 +1 @@ -5e7f7adc2c49503d2278ed2a446f18f69561ce51df264100f77f50d69804c277 +c29594e55d321ee5240f8f61223d72c9095695a5b19ff1f8a25c5a6402a4a736 diff --git a/plugins/official/mybatis/src/lib.rs b/plugins/official/mybatis/src/lib.rs index f84cd0188..d10b135a5 100644 --- a/plugins/official/mybatis/src/lib.rs +++ b/plugins/official/mybatis/src/lib.rs @@ -70,51 +70,6 @@ fn ident(c: char) -> bool { c.is_alphanumeric() || c == '_' || c == '$' } -/// Index of the `(` opening a method's parameter list inside a declaration -/// fragment. `(`s that belong to annotation arguments — `@Anno(…)` — are -/// skipped so `@DataPermission(column = "id") int count()` finds the paren -/// after `count`, not the one after `DataPermission`. -fn method_paren(stmt: &str) -> Option { - let mut rest = stmt; - let mut base = 0; - while let Some(i) = rest.find('(') { - // Is the token right before this `(` an annotation name (`@Anno`, `@a.b.Anno`)? - let before = rest[..i].trim_end(); - let annotation = before.rfind('@').is_some_and(|a| before[a + 1..].chars().all(|c| ident(c) || c == '.')); - if !annotation { - return Some(base + i); - } - // Skip the annotation's argument list (it may nest and hold literals). - let mut depth = 1usize; - let mut end = None; - let mut chars = rest[i + 1..].char_indices().peekable(); - while let Some((j, c)) = chars.next() { - match c { - '"' | '\'' => { - for (_, d) in chars.by_ref() { - if d == c { - break; - } - } - } - '(' => depth += 1, - ')' => { - depth -= 1; - if depth == 0 { - end = Some(i + 1 + j + 1); - break; - } - } - _ => {} - } - } - let skip = end?; - base += skip; - rest = &rest[skip..]; - } - None -} - /// The interface's name and methods (with their parameter names). pub fn parse_java(text: &str) -> MapperJava { let package = @@ -140,7 +95,7 @@ pub fn parse_java(text: &str) -> MapperJava { } ';' if depth == 0 => { let stmt = &text[stmt_start..k]; - if let Some(paren) = method_paren(stmt) { + if let Some(paren) = stmt.find('(') { let before = stmt[..paren].trim_end(); let name_start = before.rfind(|c: char| !ident(c)).map_or(0, |p| p + 1); let method = &before[name_start..]; @@ -406,17 +361,6 @@ mod tests { assert_eq!(n.line_markers(&xml)[0].tooltip, "Go to UserMapper.findById()"); } - #[test] - fn method_annotations_do_not_swallow_the_method_name() { - // A method-level annotation with arguments: `stmt.find('(')` would land - // inside `@DataPermission(…)` and read `DataPermission` as the name. - let java = parse_java( - "package com.acme;\n\npublic interface SecuredMapper {\n @DataPermission(column = \"id\", scope = (@Scope(\"self\")))\n List findAll(@Param(\"org\") String org);\n\n @org.acme.Check(value = \"(nested)\")\n int count();\n}\n", - ); - let names: Vec<_> = java.methods.iter().map(|(m, p)| (m.name.as_str(), p.clone())).collect(); - assert_eq!(names, [("findAll", vec!["org".to_owned()]), ("count", Vec::::new())]); - } - #[test] fn completes_ids_and_parameters() { let _host = setup(); diff --git a/src-tauri/src/application_focus.rs b/src-tauri/src/application_focus.rs index be929ce70..292370580 100644 --- a/src-tauri/src/application_focus.rs +++ b/src-tauri/src/application_focus.rs @@ -66,7 +66,7 @@ pub fn observe(app: &tauri::AppHandle) { } } -pub(crate) fn application_active(app: &tauri::AppHandle) -> bool { +fn application_active(app: &tauri::AppHandle) -> bool { // A settings window, utility window or native dialog is still this application. #[cfg(target_os = "macos")] { diff --git a/src-tauri/src/events.rs b/src-tauri/src/events.rs index 2fbdc44a9..ef2576f85 100644 --- a/src-tauri/src/events.rs +++ b/src-tauri/src/events.rs @@ -1,5 +1,5 @@ use ide_core::{EventSink, IdeEvent}; -use tauri::{AppHandle, Emitter, Manager, UserAttentionType}; +use tauri::{AppHandle, Emitter}; /// Name of the single backend → UI event. Payload: [`IdeEvent`]. pub const IDE_EVENT: &str = "ide://event"; @@ -38,31 +38,8 @@ pub struct TauriSink { pub window: Option, } -/// A debug session stopped on a breakpoint: bounce/flash the taskbar icon -/// (IDEA) unless the user is already looking at an OpenIDEA window. The focus -/// check and the request both touch the windowing system, so they run on the -/// main thread; `emit` itself can come from any debug worker thread. -fn flash_taskbar_unless_focused(app: &AppHandle) { - let handle = app.clone(); - let _ = app.run_on_main_thread(move || { - if crate::application_focus::application_active(&handle) { - return; - } - for window in handle.webview_windows().values() { - let _ = window.request_user_attention(Some(UserAttentionType::Informational)); - } - }); -} - impl EventSink for TauriSink { fn emit(&self, event: IdeEvent) { - if matches!( - &event, - IdeEvent::Debug { event: ide_core::event::DebugEvent::Stopped { reason, .. }, .. } - if matches!(reason.as_str(), "breakpoint" | "function breakpoint") - ) { - flash_taskbar_unless_focused(&self.app); - } let result = match &self.window { Some(label) => { for target in crate::windows::document_windows(&self.app, label) { diff --git a/src/editor/core/cm/theme.ts b/src/editor/core/cm/theme.ts index 3ae068345..23eb911c7 100644 --- a/src/editor/core/cm/theme.ts +++ b/src/editor/core/cm/theme.ts @@ -18,7 +18,6 @@ export const findLocals = { export const findStyles = { ".cm-openidea-findMatch": { backgroundColor: "var(--editor-search)", - color: "var(--fg-search-match, inherit)", borderRadius: "2px", }, ".cm-openidea-findExcluded": { @@ -30,7 +29,6 @@ export const findStyles = { }, ".cm-openidea-findMatch-current": { backgroundColor: "var(--editor-search-current)", - color: "var(--fg-search-match, inherit)", outline: "1px solid color-mix(in srgb, var(--editor-search-current) 60%, var(--fg-strong))", }, }; diff --git a/src/features/run/producers.test.ts b/src/features/run/producers.test.ts index f7c45827c..6a9a42b21 100644 --- a/src/features/run/producers.test.ts +++ b/src/features/run/producers.test.ts @@ -813,15 +813,6 @@ describe("project producers", () => { expect( produceDirectory({ path: `${ROOT}/src/test/java/com/acme`, root: ROOT, configs: gradle })!.config!.args, ).toEqual(["test", "--tests", "com.acme.*"]); - // A module's tests run from the build root so `./gradlew` resolves, - // qualified by the module's Gradle path. - const dir = produceDirectory({ path: `${ROOT}/services/api/src/test/java`, root: ROOT, configs: gradle })!; - expect(dir.config).toMatchObject({ cwd: null }); - expect(dir.config!.args).toEqual([":services:api:test"]); - expect( - produceDirectory({ path: `${ROOT}/services/api/src/test/java/com/acme`, root: ROOT, configs: gradle })!.config! - .args, - ).toEqual([":services:api:test", "--tests", "com.acme.*"]); expect(produceDirectory({ path: `${ROOT}/src/main`, root: ROOT, configs })).toBeNull(); expect(produceDirectory({ path: ROOT, root: ROOT, configs })).toBeNull(); }); diff --git a/src/features/run/producers.ts b/src/features/run/producers.ts index df973f223..a0a90bf61 100644 --- a/src/features/run/producers.ts +++ b/src/features/run/producers.ts @@ -14,7 +14,6 @@ import { ipcPath, isSameOrInside } from "@/platform/paths"; import { isTestPath } from "@/platform/languageSettings"; import { currentRoots } from "@/platform/projectRoots"; import { applicationConfig, jvmModuleDir } from "./application"; -import { useBuildModel } from "@/platform/buildModel"; import { formatArgs } from "./configs"; import { goGenerateConfig } from "./goGenerate"; import { goTestParts } from "./goArguments"; @@ -1147,27 +1146,6 @@ function rubyDirectory( return make(minitest, label, [...args, relToCwd(minitest)]); } -/** - * The Gradle build and project path a module directory belongs to, so a module - * test run can stay in the build root (where `./gradlew` resolves) and qualify - * its task (`:services:api:test`). `null` for non-Gradle bases and modules the - * base configuration already runs. Without a loaded model, the Gradle path is - * guessed from the directory's segments — right for the standard layout the - * wrapper itself implies. - */ -function gradleOwnerFor(module: string, base: RunConfig): { dir: string | null; path: string } | null { - if (base.kind !== "gradle" || !module || module === base.cwd) return null; - const dir = module.replace(/\\/g, "/"); - const gradle = useBuildModel - .getState() - .model?.gradle?.find((g) => g.projects.some((p) => p.dir.replace(/\\/g, "/") === dir)); - const project = gradle?.projects.find((p) => p.dir.replace(/\\/g, "/") === dir); - return { - dir: gradle?.dir ?? base.cwd, - path: project?.path ?? `:${module.split("/").join(":")}`, - }; -} - export function produceDirectory(input: ContextInput): Produced | null { input = scopedInput(input); const { root } = input; @@ -1203,20 +1181,11 @@ export function produceDirectory(input: ContextInput): Produced | null { const base = closest(["gradle", "maven"]); if (base) { const module = jvmModuleDir(rel + "/x.java", input.configs); - // Gradle in a multi-module project: run from the build root so the - // wrapper (`./gradlew`) resolves, qualifying the task with the module's - // Gradle path (`services/api` → `:services:api:test`). Other builds run - // in the module directory as before. - const owner = gradleOwnerFor(module, base); - const moduleBase = { ...base, cwd: owner ? owner.dir : module || base.cwd }; - const moduleArgs = (base: RunConfig): string[] => { - if (!owner) return [...base.args]; - return base.args.map((a) => (a === "test" ? `${owner.path}:test` : a)); - }; - if (!jvmPackage) return make(moduleBase, "All Tests", moduleArgs(base)); + const moduleBase = { ...base, cwd: module || base.cwd }; + if (!jvmPackage) return make(moduleBase, "All Tests", [...base.args]); const pkg = jvmPackage[2]!.replace(/\//g, "."); return base.kind === "gradle" - ? make(moduleBase, `Tests in '${pkg}'`, [...moduleArgs(base), "--tests", `${pkg}.*`]) + ? make(moduleBase, `Tests in '${pkg}'`, [...base.args, "--tests", `${pkg}.*`]) : make(moduleBase, `Tests in '${pkg}'`, [ ...base.args, `-Dtest=${pkg}.**.*`, diff --git a/src/ui/Menu.tsx b/src/ui/Menu.tsx index 3dcb46738..0b083979c 100644 --- a/src/ui/Menu.tsx +++ b/src/ui/Menu.tsx @@ -273,9 +273,7 @@ export function MenuList({ items, onDone, onCloseLevel, autoFocusFirst = true, . {r.checked ? : r.icon ? : null} - - {r.label} - + {r.label} {r.shortcut && {r.shortcut}} {hasSub && } diff --git a/src/ui/Tabs.module.css b/src/ui/Tabs.module.css index 7601bf4f7..4f5180c8e 100644 --- a/src/ui/Tabs.module.css +++ b/src/ui/Tabs.module.css @@ -140,13 +140,6 @@ flex: 0 1 auto; min-width: 40px; } -/* A closable tab keeps room for its close slot: only the label shrinks. */ -.squeeze .closable { - min-width: 64px; -} -.squeeze .closeSlot { - flex: none; -} .squeeze .tabButton { flex: 1 1 auto; min-width: 0;