From 86b6e6d270b09a05b9dce87bc81436ad0339c477 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Fri, 2 Dec 2016 15:57:54 -0500 Subject: [PATCH] Remove roaster java parser lib to reduce jar footprint to 14Mb --- .../commons/commons-java/pom.xml | 11 -- .../commons/java/roaster/JavaUnitIndex.java | 47 -------- .../commons/java/roaster/RoasterJavadoc.java | 26 ----- .../java/roaster/RoasterJavadocProvider.java | 102 ------------------ .../maven/java/MavenProjectClasspath.java | 76 ++++++------- .../vscode/commons/maven/JavaIndexTest.java | 71 ------------ 6 files changed, 39 insertions(+), 294 deletions(-) delete mode 100644 vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/JavaUnitIndex.java delete mode 100644 vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/RoasterJavadoc.java delete mode 100644 vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/RoasterJavadocProvider.java diff --git a/vscode-extensions/commons/commons-java/pom.xml b/vscode-extensions/commons/commons-java/pom.xml index 2d90305ae..3079ee659 100644 --- a/vscode-extensions/commons/commons-java/pom.xml +++ b/vscode-extensions/commons/commons-java/pom.xml @@ -40,17 +40,6 @@ javaparser-core 2.5.1 - - org.jboss.forge.roaster - roaster-api - ${roaster.version} - - - org.jboss.forge.roaster - roaster-jdt - ${roaster.version} - runtime - io.projectreactor diff --git a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/JavaUnitIndex.java b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/JavaUnitIndex.java deleted file mode 100644 index 8d3244ded..000000000 --- a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/JavaUnitIndex.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.springframework.ide.vscode.commons.java.roaster; - -import java.io.InputStream; -import java.net.URL; -import java.util.concurrent.ExecutionException; - -import org.jboss.forge.roaster.Roaster; -import org.jboss.forge.roaster.model.JavaUnit; -import org.springframework.ide.vscode.commons.util.Log; - -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; - -public interface JavaUnitIndex { - - static final JavaUnitIndex DEFAULT = new JavaUnitIndex() { - - private LoadingCache cache = CacheBuilder.newBuilder().build(new CacheLoader() { - - @Override - public JavaUnit load(URL url) throws Exception { - InputStream in = url.openStream(); - try { - return Roaster.parseUnit(in); - } finally { - in.close(); - } - } - - }); - - @Override - public JavaUnit getJavaUnit(URL url) { - try { - return cache.get(url); - } catch (ExecutionException e) { - Log.log(e); - } - return null; - } - - }; - - JavaUnit getJavaUnit(URL url); - -} diff --git a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/RoasterJavadoc.java b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/RoasterJavadoc.java deleted file mode 100644 index 4420e2811..000000000 --- a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/RoasterJavadoc.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.springframework.ide.vscode.commons.java.roaster; - -import org.jboss.forge.roaster.model.JavaDoc; -import org.springframework.ide.vscode.commons.javadoc.IJavadoc; -import org.springframework.ide.vscode.commons.util.Renderable; - -public class RoasterJavadoc implements IJavadoc { - - private JavaDoc javadoc; - - public RoasterJavadoc(JavaDoc javadoc) { - this.javadoc = javadoc; - } - - @Override - public String raw() { - return javadoc.getFullText(); - } - - @Override - public Renderable getRenderable() { - throw new UnsupportedOperationException("Not yet implemented"); - } - - -} diff --git a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/RoasterJavadocProvider.java b/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/RoasterJavadocProvider.java deleted file mode 100644 index db051834b..000000000 --- a/vscode-extensions/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/roaster/RoasterJavadocProvider.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.springframework.ide.vscode.commons.java.roaster; - -import org.jboss.forge.roaster.model.Field; -import org.jboss.forge.roaster.model.FieldHolder; -import org.jboss.forge.roaster.model.JavaDocCapable; -import org.jboss.forge.roaster.model.JavaType; -import org.jboss.forge.roaster.model.JavaUnit; -import org.jboss.forge.roaster.model.Method; -import org.jboss.forge.roaster.model.MethodHolder; -import org.jboss.forge.roaster.model.TypeHolder; -import org.jboss.forge.roaster.model.source.JavaClassSource; -import org.springframework.ide.vscode.commons.java.IAnnotation; -import org.springframework.ide.vscode.commons.java.IField; -import org.springframework.ide.vscode.commons.java.IJavadocProvider; -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.SourceUrlProvider; -import org.springframework.ide.vscode.commons.util.Log; - -public class RoasterJavadocProvider implements IJavadocProvider { - - private SourceUrlProvider sourceUrlProvider; - - public RoasterJavadocProvider(SourceUrlProvider sourceUrlProvider) { - this.sourceUrlProvider = sourceUrlProvider; - } - - @Override - public IJavadoc getJavadoc(IType type) { - try { - JavaClassSource declaration = (JavaClassSource) getDeclaration(type); - return new RoasterJavadoc(declaration.getJavaDoc()); - } catch (Exception e) { - Log.log(e); - return null; - } - } - - @Override - public IJavadoc getJavadoc(IField field) { - try { - JavaType typeDeclaration = getDeclaration(field.getDeclaringType()); - if (typeDeclaration instanceof FieldHolder) { - Field fieldDeclaration = ((FieldHolder)typeDeclaration).getField(field.getElementName()); - if (fieldDeclaration instanceof JavaDocCapable) { - return new RoasterJavadoc(((JavaDocCapable)fieldDeclaration).getJavaDoc()); - } - } - } catch (Exception e) { - Log.log(e); - } - return null; - } - - @Override - public IJavadoc getJavadoc(IMethod method) { - if (method.parameters().findFirst().isPresent()) { - throw new UnsupportedOperationException("Only methods with no parameters are supported"); - } - try { - JavaType typeDeclaration = getDeclaration(method.getDeclaringType()); - if (typeDeclaration instanceof MethodHolder) { - Method methodDeclaration = ((MethodHolder)typeDeclaration).getMethod(method.getElementName()); - if (methodDeclaration instanceof JavaDocCapable) { - return new RoasterJavadoc(((JavaDocCapable)methodDeclaration).getJavaDoc()); - } - } - } catch (Exception e) { - Log.log(e); - } - return null; - } - - @Override - public IJavadoc getJavadoc(IAnnotation annotation) { - throw new UnsupportedOperationException("Not yet implemented"); - } - - private JavaUnit getJavaUnit(IType type) throws Exception { - return JavaUnitIndex.DEFAULT.getJavaUnit(sourceUrlProvider.sourceUrl(type)); - } - - private JavaType getDeclaration(IType type) throws Exception { - if (type == null) { - return null; - } - IType declaringType = type.getDeclaringType(); - if (declaringType == null) { - JavaUnit ju = getJavaUnit(type); - return ju.getTopLevelTypes().stream().filter(jt -> jt.getName().equals(type.getElementName())).findFirst().orElse(null); - } else { - JavaType declaringTypeDeclaration = getDeclaration(declaringType); - if (declaringTypeDeclaration instanceof TypeHolder) { - return ((TypeHolder)declaringTypeDeclaration).getNestedType(type.getElementName()); - } else { - return null; - } - } - } - -} diff --git a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectClasspath.java b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectClasspath.java index 31bf7bf79..5060bca06 100644 --- a/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectClasspath.java +++ b/vscode-extensions/commons/commons-maven/src/main/java/org/springframework/ide/vscode/commons/maven/java/MavenProjectClasspath.java @@ -28,7 +28,6 @@ import org.springframework.ide.vscode.commons.java.IJavadocProvider; import org.springframework.ide.vscode.commons.java.IType; import org.springframework.ide.vscode.commons.java.IJavaProject.TypeFilter; import org.springframework.ide.vscode.commons.java.parser.ParserJavadocProvider; -import org.springframework.ide.vscode.commons.java.roaster.RoasterJavadocProvider; import org.springframework.ide.vscode.commons.javadoc.HtmlJavadocProvider; import org.springframework.ide.vscode.commons.javadoc.SourceUrlProviderFromSourceContainer; import org.springframework.ide.vscode.commons.maven.MavenCore; @@ -53,7 +52,7 @@ public class MavenProjectClasspath implements IClasspath { public enum JavadocProviderTypes { JAVA_PARSER, - ROASTER, +// ROASTER, HTML } @@ -79,8 +78,8 @@ public class MavenProjectClasspath implements IClasspath { switch (providerType) { case JAVA_PARSER: return createParserJavadocProvider(classpathResource); - case ROASTER: - return createRoasterJavadocProvider(classpathResource); +// case ROASTER: +// return createRoasterJavadocProvider(classpathResource); default: return createHtmlJavdocProvider(classpathResource); } @@ -136,39 +135,42 @@ public class MavenProjectClasspath implements IClasspath { return Arrays.stream(scanner.getIncludedFiles()); }); } - - private IJavadocProvider createRoasterJavadocProvider(File classpathResource) { - if (classpathResource.isDirectory()) { - if (classpathResource.toString().startsWith(project.getBuild().getOutputDirectory())) { - return new RoasterJavadocProvider(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 RoasterJavadocProvider(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 RoasterJavadocProvider(type -> { - try { - Artifact artifact = getArtifactFromJarFile(classpathResource).get(); - URL sourceContainer = maven.getSources(artifact).getFile().toURI().toURL(); - 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; - }); - } - } + + /* + * Roaster lib is experiment to generate javadoc from source. Commented out for now since roaster lib is taken out + */ +// private IJavadocProvider createRoasterJavadocProvider(File classpathResource) { +// if (classpathResource.isDirectory()) { +// if (classpathResource.toString().startsWith(project.getBuild().getOutputDirectory())) { +// return new RoasterJavadocProvider(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 RoasterJavadocProvider(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 RoasterJavadocProvider(type -> { +// try { +// Artifact artifact = getArtifactFromJarFile(classpathResource).get(); +// URL sourceContainer = maven.getSources(artifact).getFile().toURI().toURL(); +// 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; +// }); +// } +// } private IJavadocProvider createParserJavadocProvider(File classpathResource) { if (classpathResource.isDirectory()) { diff --git a/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java b/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java index 70d909196..28076c9e3 100644 --- a/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java +++ b/vscode-extensions/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java @@ -250,77 +250,6 @@ public class JavaIndexTest { assertEquals(expected, method.getJavaDoc().raw().trim().substring(0, expected.length())); } - @Test - public void roaster_testClassJavadocForOutputFolder() throws Exception { - MavenProjectClasspath.providerType = JavadocProviderTypes.ROASTER; - MavenJavaProject project = createMavenProject(projectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file")); - IType type = project.findType("hello.Greeting"); - - assertNotNull(type); - assertEquals("Comment for Greeting class", type.getJavaDoc().raw()); - - IField field = type.getField("id"); - assertNotNull(field); - assertEquals("Comment for id field", field.getJavaDoc().raw()); - - IMethod method = type.getMethod("getId", Stream.empty()); - assertNotNull(method); - assertEquals("Comment for getId()", method.getJavaDoc().raw()); - } - - @Test - public void roaster_testInnerClassJavadocForOutputFolder() throws Exception { - MavenProjectClasspath.providerType = JavadocProviderTypes.ROASTER; - MavenJavaProject project = createMavenProject(projectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file")); - IType type = project.findType("hello.Greeting$TestInnerClass"); - assertNotNull(type); - assertEquals("Comment for inner class", type.getJavaDoc().raw()); - - IField field = type.getField("innerField"); - assertNotNull(field); - assertEquals("Comment for inner field", field.getJavaDoc().raw()); - - IMethod method = type.getMethod("getInnerField", Stream.empty()); - assertNotNull(method); - assertEquals("Comment for method inside nested class", method.getJavaDoc().raw()); - } - - @Test - public void roaster_testClassJavadocForJar() throws Exception { - MavenProjectClasspath.providerType = JavadocProviderTypes.ROASTER; - - MavenJavaProject project = createMavenProject(projectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file")); - - IType type = project.findType("org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener"); - assertNotNull(type); - String expected = "{@link ApplicationListener} that replaces the liquibase {@link ServiceLocator} with a"; - assertEquals(expected, type.getJavaDoc().raw().substring(0, expected.length())); - - type = project.findType("org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener$LiquibasePresent"); - assertNotNull(type); - assertEquals("Inner class to prevent class not found issues.", type.getJavaDoc().raw()); - } - - @Test - public void roaster_testFieldAndMethodJavadocForJar() throws Exception { - MavenProjectClasspath.providerType = JavadocProviderTypes.ROASTER; - - MavenJavaProject project = createMavenProject(projectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file")); - - IType type = project.findType("org.springframework.boot.SpringApplication"); - assertNotNull(type); - - IField field = type.getField("BANNER_LOCATION_PROPERTY_VALUE"); - assertNotNull(field); - assertEquals("Default banner location.", field.getJavaDoc().raw()); - - IMethod method = type.getMethod("getListeners", Stream.empty()); - assertNotNull(method); - String expected = "Returns read-only ordered Set of the {@link ApplicationListener} s that will be"; - assertEquals(expected, method.getJavaDoc().raw().substring(0, expected.length())); - } - - @Test public void html_testClassJavadoc() throws Exception { Assume.assumeTrue(javaVersionHigherThan(6));