From 5a68303f7d6c4e4e4a61e0710c1b4c5d8ead69ac Mon Sep 17 00:00:00 2001 From: aboyko Date: Thu, 13 Jun 2024 00:24:58 -0400 Subject: [PATCH] Fix links in live hovers in VSCode --- .../ls/extension/JavadocHoverLinkHandler.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/src/org/springframework/tooling/jdt/ls/extension/JavadocHoverLinkHandler.java b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/src/org/springframework/tooling/jdt/ls/extension/JavadocHoverLinkHandler.java index 56836b45f..98740aa45 100644 --- a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/src/org/springframework/tooling/jdt/ls/extension/JavadocHoverLinkHandler.java +++ b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/src/org/springframework/tooling/jdt/ls/extension/JavadocHoverLinkHandler.java @@ -10,19 +10,21 @@ *******************************************************************************/ package org.springframework.tooling.jdt.ls.extension; -import java.lang.reflect.Method; import java.net.URI; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.ls.core.internal.javadoc.JavaElementLinks; import org.eclipse.jdt.ls.core.internal.IDelegateCommandHandler; +import org.eclipse.jdt.ls.core.internal.JDTUtils; +import org.eclipse.lsp4j.Location; import org.springframework.tooling.jdt.ls.commons.java.JavaData; +@SuppressWarnings("restriction") public class JavadocHoverLinkHandler implements IDelegateCommandHandler { + @SuppressWarnings("unchecked") @Override public Object executeCommand(String commandId, List arguments, IProgressMonitor monitor) throws Exception { Map obj = (Map) arguments.get(0); @@ -35,13 +37,10 @@ public class JavadocHoverLinkHandler implements IDelegateCommandHandler { if (element != null) { // Bug in JDT server one '(' not encoded while everything else in the query is // encoded - try { - Class clazz = getClass().getClassLoader().loadClass("org.eclipse.jdt.internal.ui.viewsupport.CoreJavaElementLinks"); - Method method = clazz.getDeclaredMethod("createURI", String.class, IJavaElement.class); - return method.invoke(null, null, element); - } catch (Exception e) { - return JavaElementLinks.createURI(null, element).replace("(", "%28"); - } + Location locationToElement = JDTUtils.toLocation(element); + if (locationToElement != null) { + return (locationToElement.getUri() + "#" + (locationToElement.getRange().getStart().getLine() + 1)).replace("(", "%28"); + } } } catch (Exception e) { JdtLsExtensionPlugin.getInstance().getLog().error("Failed to compute java data for " + bindingKey + " in project " + uri, e);