Navigate to specific position in file via source link

This commit is contained in:
BoykoAlex
2018-02-14 10:27:14 -05:00
parent 9d89229cea
commit f3d6bba7ec
21 changed files with 611 additions and 239 deletions

View File

@@ -11,6 +11,7 @@
package org.springframework.ide.vscode.commons.java;
import java.io.File;
import java.net.URL;
import java.nio.file.Path;
import java.util.Optional;
import java.util.concurrent.Callable;
@@ -178,5 +179,11 @@ public class DelegatingCachedClasspath<T extends IClasspath> implements IClasspa
t.reindex();
}
}
@Override
public Optional<URL> sourceContainer(File classpathResource) {
T t = cachedClasspath.get();
return t == null ? Optional.empty() : t.sourceContainer(classpathResource);
}
}

View File

@@ -11,6 +11,7 @@
package org.springframework.ide.vscode.commons.java;
import java.io.File;
import java.net.URL;
import java.nio.file.Path;
import java.util.Optional;
import java.util.function.Predicate;
@@ -64,4 +65,6 @@ public interface IClasspath {
ClasspathData createClasspathData() throws Exception;
void reindex();
Optional<URL> sourceContainer(File classpathResource);
}

View File

@@ -14,51 +14,54 @@ package org.springframework.ide.vscode.commons.javadoc;
import java.net.URL;
import java.nio.file.Paths;
import org.springframework.ide.vscode.commons.java.IType;
@FunctionalInterface
public interface SourceUrlProviderFromSourceContainer {
public static final SourceUrlProviderFromSourceContainer JAR_SOURCE_URL_PROVIDER = (sourceContainerUrl, type) -> {
static String extractTopLevelType(String fqName) {
int innerTypeIdx = fqName.indexOf('$');
return innerTypeIdx > 0 ? fqName.substring(0, innerTypeIdx) : fqName;
}
public static final SourceUrlProviderFromSourceContainer JAR_SOURCE_URL_PROVIDER = (sourceContainerUrl, fqName) -> {
StringBuilder sourceUrlStr = new StringBuilder();
sourceUrlStr.append("jar:");
sourceUrlStr.append(sourceContainerUrl);
sourceUrlStr.append("!");
sourceUrlStr.append('/');
sourceUrlStr.append(type.getFullyQualifiedName().replaceAll("\\.", "/"));
sourceUrlStr.append(extractTopLevelType(fqName).replaceAll("\\.", "/"));
sourceUrlStr.append(".java");
return new URL(sourceUrlStr.toString());
};
public static final SourceUrlProviderFromSourceContainer SOURCE_FOLDER_URL_SUPPLIER = (sourceContainerUrl, type) -> {
return Paths.get(sourceContainerUrl.toURI()).resolve(type.getFullyQualifiedName().replaceAll("\\.", "/") + ".java").toUri().toURL();
public static final SourceUrlProviderFromSourceContainer SOURCE_FOLDER_URL_SUPPLIER = (sourceContainerUrl, fqName) -> {
return Paths.get(sourceContainerUrl.toURI()).resolve(extractTopLevelType(fqName).replaceAll("\\.", "/") + ".java").toUri().toURL();
};
public static final SourceUrlProviderFromSourceContainer JAR_JAVADOC_URL_PROVIDER = (javadocContainerUrl, type) -> {
public static final SourceUrlProviderFromSourceContainer JAR_JAVADOC_URL_PROVIDER = (javadocContainerUrl, fqName) -> {
StringBuilder sourceUrlStr = new StringBuilder();
sourceUrlStr.append("jar:");
sourceUrlStr.append(javadocContainerUrl);
sourceUrlStr.append("!");
sourceUrlStr.append('/');
// Inner classes are in separate Top.Nesting1.Nesting2.Nesting3.MyType.html files
sourceUrlStr.append(type.getFullyQualifiedName().replaceAll("\\.", "/").replaceAll("\\$", "."));
sourceUrlStr.append(fqName.replaceAll("\\.", "/").replaceAll("\\$", "."));
sourceUrlStr.append(".html");
return new URL(sourceUrlStr.toString());
};
public static final SourceUrlProviderFromSourceContainer JAVADOC_FOLDER_URL_SUPPLIER = (sourceContainerUrl, type) -> {
public static final SourceUrlProviderFromSourceContainer JAVADOC_FOLDER_URL_SUPPLIER = (sourceContainerUrl, fqName) -> {
String urlStr = sourceContainerUrl.toString();
StringBuilder sb = new StringBuilder(urlStr);
if (!urlStr.endsWith("/")) {
sb.append('/');
}
// Inner classes are in separate Top.Nesting1.Nesting2.Nesting3.MyType.html files
sb.append(type.getFullyQualifiedName().replaceAll("\\.", "/").replaceAll("\\$", ".") + ".html");
sb.append(fqName.replaceAll("\\.", "/").replaceAll("\\$", ".") + ".html");
return new URL(sb.toString());
};
URL sourceUrl(URL sourceContainerUrl, IType type) throws Exception;
URL sourceUrl(URL sourceContainerUrl, String fqName) throws Exception;
}