From 63a99baff8402d90cf8c14737406ac1b27e211c4 Mon Sep 17 00:00:00 2001 From: aboyko Date: Fri, 22 Mar 2024 10:19:12 -0400 Subject: [PATCH] Setting for browser to open live request mapping URL via CodeLens --- .../commons/HighlightsCodeLensProvider.java | 21 ++++++++++++------- .../RequestMappingHoverProvider.java | 4 ++-- .../vscode-spring-boot/lib/Main.ts | 6 ++++++ .../vscode-spring-boot/package.json | 20 ++++++++++++++++++ 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/HighlightsCodeLensProvider.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/HighlightsCodeLensProvider.java index fda4ce168..bad0449f4 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/HighlightsCodeLensProvider.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/HighlightsCodeLensProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018, 2023 Pivotal, Inc. + * Copyright (c) 2018, 2024 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -48,14 +48,19 @@ public class HighlightsCodeLensProvider extends AbstractCodeMiningProvider { private static final Map>> ACTION_MAP = new HashMap<>(); static { ACTION_MAP.put("sts.open.url", (cmd) -> { - return (me) -> { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof JsonPrimitive) { - String url = ((JsonPrimitive)cmd.getArguments().get(0)).getAsString(); - LSPEclipseUtils.open(url, page, null); - } - }; + return (me) -> opneUrlCommand(cmd); }); + ACTION_MAP.put("vscode-spring-boot.open.url", (cmd) -> { + return (me) -> opneUrlCommand(cmd); + }); + } + + private static void opneUrlCommand(Command cmd) { + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof JsonPrimitive) { + String url = ((JsonPrimitive)cmd.getArguments().get(0)).getAsString(); + LSPEclipseUtils.open(url, page, null); + } } private static Consumer action(Command cmd) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/RequestMappingHoverProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/RequestMappingHoverProvider.java index 6158985c2..7fb8608f6 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/RequestMappingHoverProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/RequestMappingHoverProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2023 Pivotal, Inc. + * Copyright (c) 2017, 2024 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -376,7 +376,7 @@ public class RequestMappingHoverProvider implements HoverProvider { String content = codeLensContent.toString(); codeLens.setData(content); cmd.setTitle(content); - cmd.setCommand("sts.open.url"); + cmd.setCommand("vscode-spring-boot.open.url"); cmd.setArguments(ImmutableList.of(url)); } diff --git a/vscode-extensions/vscode-spring-boot/lib/Main.ts b/vscode-extensions/vscode-spring-boot/lib/Main.ts index a4bc66753..fbf49f803 100644 --- a/vscode-extensions/vscode-spring-boot/lib/Main.ts +++ b/vscode-extensions/vscode-spring-boot/lib/Main.ts @@ -172,6 +172,12 @@ export function activate(context: ExtensionContext): Thenable { } }); + commands.registerCommand('vscode-spring-boot.open.url', (openUrl) => { + const openWithExternalBrowser = workspace.getConfiguration("spring.tools").get("openWith") === "external"; + const browserCommand = openWithExternalBrowser ? "vscode.open" : "simpleBrowser.api.open"; + return commands.executeCommand(browserCommand, Uri.parse(openUrl)); + }); + return new ApiManager(client).api; }); } diff --git a/vscode-extensions/vscode-spring-boot/package.json b/vscode-extensions/vscode-spring-boot/package.json index d37f557be..76e4f7dfb 100644 --- a/vscode-extensions/vscode-spring-boot/package.json +++ b/vscode-extensions/vscode-spring-boot/package.json @@ -134,6 +134,12 @@ "command": "vscode-spring-boot.set.log-levels", "title": "Set Log Levels", "category": "Spring Boot" + }, + { + "command": "vscode-spring-boot.open.url", + "title": "Open Boot App Page URL", + "category": "Spring Boot", + "enablement": "never" } ], "configuration": [ @@ -238,6 +244,20 @@ "type": "boolean", "default": true, "description": "Enable/Disable Spring Boot TestJars launch environment variables" + }, + "spring.tools.openWith": { + "default": "integrated", + "type": "string", + "enum": [ + "integrated", + "external" + ], + "enumDescriptions": [ + "VS Code's integrated browser", + "External default browser" + ], + "scope": "window", + "description": "Defines which browser to use when opening Spring Boot apps web pages." } } },