Factor common logic for javadoc in javadoc package
This commit is contained in:
@@ -1,31 +0,0 @@
|
||||
package org.springframework.ide.vscode.commons.java.parser;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
import org.springframework.ide.vscode.commons.java.IType;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
public class JarSourcesJavadocProvider extends AbstractJavadocProvider {
|
||||
|
||||
private Supplier<URL> sourcesJarUrl;
|
||||
|
||||
public JarSourcesJavadocProvider(Supplier<URL> sourcesJarUrl) {
|
||||
super();
|
||||
this.sourcesJarUrl = sourcesJarUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected URL createSourceUrl(IType type) throws MalformedURLException {
|
||||
StringBuilder sourceUrlStr = new StringBuilder();
|
||||
sourceUrlStr.append("jar:");
|
||||
sourceUrlStr.append(sourcesJarUrl.get());
|
||||
sourceUrlStr.append("!");
|
||||
sourceUrlStr.append('/');
|
||||
sourceUrlStr.append(type.getFullyQualifiedName().replaceAll("\\.", "/"));
|
||||
sourceUrlStr.append(".java");
|
||||
return new URL(sourceUrlStr.toString());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.springframework.ide.vscode.commons.java.parser;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -11,6 +10,7 @@ import org.springframework.ide.vscode.commons.java.IMethod;
|
||||
import org.springframework.ide.vscode.commons.java.IType;
|
||||
import org.springframework.ide.vscode.commons.javadoc.IJavadoc;
|
||||
import org.springframework.ide.vscode.commons.javadoc.RawJavadoc;
|
||||
import org.springframework.ide.vscode.commons.javadoc.SourceUrlProvider;
|
||||
import org.springframework.ide.vscode.commons.util.Log;
|
||||
|
||||
import com.github.javaparser.ast.CompilationUnit;
|
||||
@@ -21,7 +21,13 @@ import com.github.javaparser.ast.body.MethodDeclaration;
|
||||
import com.github.javaparser.ast.body.VariableDeclarator;
|
||||
import com.github.javaparser.ast.visitor.GenericVisitorAdapter;
|
||||
|
||||
public abstract class AbstractJavadocProvider implements IJavadocProvider {
|
||||
public class JavadocProvider implements IJavadocProvider {
|
||||
|
||||
private SourceUrlProvider sourceUrlProvider;
|
||||
|
||||
public JavadocProvider(SourceUrlProvider sourceUrlProvider) {
|
||||
this.sourceUrlProvider = sourceUrlProvider;
|
||||
}
|
||||
|
||||
public IJavadoc getJavadoc(IType type) {
|
||||
if (type.isEnum()) {
|
||||
@@ -64,9 +70,9 @@ public abstract class AbstractJavadocProvider implements IJavadocProvider {
|
||||
|
||||
private CompilationUnit getCompilationUnit(IType type) {
|
||||
try {
|
||||
URL sourceUrl = createSourceUrl(type);
|
||||
URL sourceUrl = sourceUrlProvider.sourceUrl(type);
|
||||
return CompilationUnitIndex.DEFAULT.getCompilationUnit(sourceUrl);
|
||||
} catch (MalformedURLException e) {
|
||||
} catch (Exception e) {
|
||||
Log.log("Invalid source URL for type " + type, e);
|
||||
return null;
|
||||
}
|
||||
@@ -156,6 +162,4 @@ public abstract class AbstractJavadocProvider implements IJavadocProvider {
|
||||
};
|
||||
}
|
||||
|
||||
abstract protected URL createSourceUrl(IType type) throws MalformedURLException;
|
||||
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package org.springframework.ide.vscode.commons.java.parser;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
import org.springframework.ide.vscode.commons.java.IType;
|
||||
|
||||
public class SourceFolderJavadocProvider extends AbstractJavadocProvider {
|
||||
|
||||
private File sourceFolder;
|
||||
|
||||
public SourceFolderJavadocProvider(File sourceFolder) {
|
||||
super();
|
||||
this.sourceFolder = sourceFolder;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected URL createSourceUrl(IType type) throws MalformedURLException {
|
||||
return new File(sourceFolder, type.getFullyQualifiedName().replaceAll("\\.", "/") + ".java").toURI().toURL();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package org.springframework.ide.vscode.commons.javadoc;
|
||||
|
||||
import java.net.URL;
|
||||
|
||||
import org.springframework.ide.vscode.commons.java.IType;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface SourceUrlProvider {
|
||||
|
||||
URL sourceUrl(IType type) throws Exception;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
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) -> {
|
||||
StringBuilder sourceUrlStr = new StringBuilder();
|
||||
sourceUrlStr.append("jar:");
|
||||
sourceUrlStr.append(sourceContainerUrl);
|
||||
sourceUrlStr.append("!");
|
||||
sourceUrlStr.append('/');
|
||||
sourceUrlStr.append(type.getFullyQualifiedName().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();
|
||||
};
|
||||
|
||||
URL sourceUrl(URL sourceContainerUrl, IType type) throws Exception;
|
||||
|
||||
}
|
||||
@@ -12,8 +12,8 @@ package org.springframework.ide.vscode.commons.maven.java;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Stream;
|
||||
@@ -25,8 +25,8 @@ import org.springframework.ide.vscode.commons.jandex.JandexIndex;
|
||||
import org.springframework.ide.vscode.commons.java.IClasspath;
|
||||
import org.springframework.ide.vscode.commons.java.IJavadocProvider;
|
||||
import org.springframework.ide.vscode.commons.java.IType;
|
||||
import org.springframework.ide.vscode.commons.java.parser.JarSourcesJavadocProvider;
|
||||
import org.springframework.ide.vscode.commons.java.parser.SourceFolderJavadocProvider;
|
||||
import org.springframework.ide.vscode.commons.java.parser.JavadocProvider;
|
||||
import org.springframework.ide.vscode.commons.javadoc.SourceUrlProviderFromSourceContainer;
|
||||
import org.springframework.ide.vscode.commons.maven.MavenCore;
|
||||
import org.springframework.ide.vscode.commons.maven.MavenException;
|
||||
import org.springframework.ide.vscode.commons.util.Log;
|
||||
@@ -45,7 +45,7 @@ public class MavenProjectClasspath implements IClasspath {
|
||||
private MavenCore maven;
|
||||
private MavenProject project;
|
||||
private Supplier<JandexIndex> javaIndex;
|
||||
|
||||
|
||||
public MavenProjectClasspath(MavenProject project) {
|
||||
this(project, MavenCore.getInstance());
|
||||
}
|
||||
@@ -67,9 +67,9 @@ public class MavenProjectClasspath implements IClasspath {
|
||||
@Override
|
||||
public Stream<Path> getClasspathEntries() throws Exception {
|
||||
return Stream.concat(maven.resolveDependencies(project, null).stream().map(artifact -> {
|
||||
return Paths.get(artifact.getFile().toURI());
|
||||
}), Stream.of(Paths.get(new File(project.getBuild().getOutputDirectory()).toURI()),
|
||||
Paths.get(new File(project.getBuild().getTestOutputDirectory()).toURI())));
|
||||
return artifact.getFile().toPath();
|
||||
}), Stream.of(new File(project.getBuild().getOutputDirectory()).toPath(),
|
||||
new File(project.getBuild().getTestOutputDirectory()).toPath()));
|
||||
}
|
||||
|
||||
public IType findType(String fqName) {
|
||||
@@ -87,25 +87,34 @@ public class MavenProjectClasspath implements IClasspath {
|
||||
private IJavadocProvider createJavadocProvider(File classpathResource) {
|
||||
if (classpathResource.isDirectory()) {
|
||||
if (classpathResource.toString().startsWith(project.getBuild().getOutputDirectory())) {
|
||||
return new SourceFolderJavadocProvider(new File(project.getBuild().getSourceDirectory()));
|
||||
return new JavadocProvider(type -> {
|
||||
return SourceUrlProviderFromSourceContainer.SOURCE_FOLDER_URL_SUPPLIER
|
||||
.sourceUrl(new File(project.getBuild().getSourceDirectory()).toURI().toURL(), type);
|
||||
});
|
||||
} else if (classpathResource.toString().startsWith(project.getBuild().getTestOutputDirectory())) {
|
||||
return new SourceFolderJavadocProvider(new File(project.getBuild().getTestSourceDirectory()));
|
||||
return new JavadocProvider(type -> {
|
||||
return SourceUrlProviderFromSourceContainer.SOURCE_FOLDER_URL_SUPPLIER
|
||||
.sourceUrl(new File(project.getBuild().getTestSourceDirectory()).toURI().toURL(), type);
|
||||
});
|
||||
} else {
|
||||
throw new IllegalArgumentException("Cannot find source folder for " + classpathResource);
|
||||
}
|
||||
} else {
|
||||
// Assume it's a JAR file
|
||||
return new JarSourcesJavadocProvider(Suppliers.memoize(() -> {
|
||||
return new JavadocProvider(type -> {
|
||||
try {
|
||||
Artifact artifact = getArtifactFromJarFile(classpathResource).get();
|
||||
return maven.getSources(artifact).getFile().toURI().toURL();
|
||||
URL sourceContainer = maven.getSources(artifact).getFile().toURI().toURL();
|
||||
System.out.println("----> SOURCE " + sourceContainer);
|
||||
return SourceUrlProviderFromSourceContainer.JAR_SOURCE_URL_PROVIDER.sourceUrl(sourceContainer,
|
||||
type);
|
||||
} catch (MavenException e) {
|
||||
Log.log("Failed to find sources JAR for " + classpathResource, e);
|
||||
} catch (MalformedURLException e) {
|
||||
Log.log("Invalid URL for sources JAR for " + classpathResource, e);
|
||||
}
|
||||
return null;
|
||||
}));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user