diff --git a/atom-extensions/atom-spring-boot/properties.json b/atom-extensions/atom-spring-boot/properties.json index 5f72a3b34..fd23a8bb8 100644 --- a/atom-extensions/atom-spring-boot/properties.json +++ b/atom-extensions/atom-spring-boot/properties.json @@ -1,3 +1,3 @@ { - "jarUrl": "https://s3-us-west-1.amazonaws.com/s3-test.spring.io/sts4/fatjars/snapshots/spring-boot-language-server-0.1.5-201803051440.jar" + "jarUrl": "https://s3-us-west-1.amazonaws.com/s3-test.spring.io/sts4/fatjars/snapshots/spring-boot-language-server-0.1.5-201803091709.jar" } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/links/AtomSourceLinks.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/links/AtomSourceLinks.java new file mode 100644 index 000000000..81d3c973a --- /dev/null +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/links/AtomSourceLinks.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2018 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.links; + +import java.io.File; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.file.Path; +import java.util.Optional; + +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents; +import org.springframework.ide.vscode.commons.java.IJavaProject; +import org.springframework.ide.vscode.commons.util.text.Region; + +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; + +/** + * Source links for Atom client + * + * @author Alex Boyko + * + */ +public class AtomSourceLinks extends AbstractSourceLinks { + + private static Supplier LOG = Suppliers.memoize(() -> LoggerFactory.getLogger(AbstractSourceLinks.class)); + + public AtomSourceLinks(BootJavaLanguageServerComponents server) { + super(server); + } + + @Override + public Optional sourceLinkForResourcePath(Path path) { + try { + return Optional.of("atom://core/open/file?filename=" + URLEncoder.encode(path.toString(), "UTF8")); + } catch (UnsupportedEncodingException e) { + LOG.get().error("Cannot build source URL for " + path, e); + } + return Optional.empty(); + } + + @Override + protected String positionLink(CompilationUnit cu, String fqName) { + if (cu != null) { + Region region = findTypeRegion(cu, fqName); + if (region != null) { + int column = cu.getColumnNumber(region.getOffset()); + int line = cu.getLineNumber(region.getOffset()); + StringBuilder sb = new StringBuilder(); + sb.append("&line="); + sb.append(line); + sb.append("&column="); + sb.append(column + 1); // 1-based columns? + return sb.toString(); + } + } + return null; + } + + @Override + protected Optional jarUrl(IJavaProject project, String fqName, File jarFile) { + // JAR URLs are not supported yet + return Optional.empty(); + } + +} diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/links/SourceLinkFactory.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/links/SourceLinkFactory.java index 5f64335bd..8d427bec8 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/links/SourceLinkFactory.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/links/SourceLinkFactory.java @@ -55,6 +55,8 @@ public final class SourceLinkFactory { return new VSCodeSourceLinks(server); case ECLIPSE: return new EclipseSourceLinks(); + case ATOM: + return new AtomSourceLinks(server); default: return NO_SOURCE_LINKS; }