Returns read-only ordered Set of the
ApplicationListeners that will be",
@@ -137,16 +134,16 @@ public class HtmlJavadocTest {
@Test
public void html_testInnerClassJavadocForOutputFolder() throws Exception {
MavenJavaProject project = projectSupplier.get();
-
+
IType type = project.findType("hello.Greeting$TestInnerClass");
assertNotNull(type);
IJavadoc javaDoc = type.getJavaDoc();
assertNotNull(javaDoc);
assertEquals("
Comment for inner class
", javaDoc.getRenderable().toHtml());
-
+
IField field = type.getField("innerField");
assertNotNull(field);
- String expected = String.join("\n",
+ String expected = String.join("\n",
"
innerField
",
"
protected int innerField
",
"
Comment for inner field
"
@@ -154,7 +151,7 @@ public class HtmlJavadocTest {
javaDoc = field.getJavaDoc();
assertNotNull(javaDoc);
assertEquals(expected, javaDoc.getRenderable().toHtml());
-
+
IMethod method = type.getMethod("getInnerField", Stream.empty());
assertNotNull(method);
expected = String.join("\n",
@@ -170,16 +167,16 @@ public class HtmlJavadocTest {
@Test
public void html_testInnerClassLevel2_JavadocForOutputFolder() throws Exception {
MavenJavaProject project = projectSupplier.get();
-
+
IType type = project.findType("hello.Greeting$TestInnerClass$TestInnerClassLevel2");
assertNotNull(type);
IJavadoc javaDoc = type.getJavaDoc();
assertNotNull(javaDoc);
assertEquals("
Comment for level 2 nested class
", javaDoc.getRenderable().toHtml());
-
+
IField field = type.getField("innerLevel2Field");
assertNotNull(field);
- String expected = String.join("\n",
+ String expected = String.join("\n",
"
innerLevel2Field
",
"
protected int innerLevel2Field
",
"
Comment for level 2 inner field
"
@@ -187,7 +184,7 @@ public class HtmlJavadocTest {
javaDoc = field.getJavaDoc();
assertNotNull(javaDoc);
assertEquals(expected, javaDoc.getRenderable().toHtml());
-
+
IMethod method = type.getMethod("getInnerLevel2Field", Stream.empty());
assertNotNull(method);
expected = String.join("\n",
@@ -204,13 +201,13 @@ public class HtmlJavadocTest {
public void html_testJavadocOutputFolder() throws Exception {
MavenJavaProject project = projectSupplier.get();
IType type = project.findType("hello.Greeting");
-
+
assertNotNull(type);
String expected = "
Comment for Greeting class
";
IJavadoc javaDoc = type.getJavaDoc();
assertNotNull(javaDoc);
assertEquals(expected, javaDoc.getRenderable().toHtml());
-
+
IField field = type.getField("id");
assertNotNull(field);
expected = String.join("\n",
@@ -221,7 +218,7 @@ public class HtmlJavadocTest {
javaDoc = field.getJavaDoc();
assertNotNull(javaDoc);
assertEquals(expected, javaDoc.getRenderable().toHtml());
-
+
IMethod method = type.getMethod("getId", Stream.empty());
assertNotNull(method);
expected = String.join("\n",
@@ -237,14 +234,14 @@ public class HtmlJavadocTest {
@Test
public void html_testMethodJavadoc() throws Exception {
Assume.assumeTrue(javaVersionHigherThan(6));
-
+
MavenJavaProject project = projectSupplier.get();
-
+
IType type = project.findType("java.util.ArrayList");
assertNotNull(type);
IMethod method = type.getMethod("size", Stream.empty());
assertNotNull(method);
-
+
String expected = String.join("\n",
"
size
",
"
public int size()
",
@@ -258,9 +255,9 @@ public class HtmlJavadocTest {
@Test
public void html_testNestedClassJavadoc() throws Exception {
Assume.assumeTrue(javaVersionHigherThan(6));
-
+
MavenJavaProject project = projectSupplier.get();
-
+
IType type = project.findType("java.util.Map$Entry");
assertNotNull(type);
String expected = String.join("\n",
@@ -274,7 +271,7 @@ public class HtmlJavadocTest {
@Test
public void html_testNoJavadocClass() throws Exception {
MavenJavaProject project = projectSupplier.get();;
-
+
IType type = project.findType("hello.GreetingController");
assertNotNull(type);
assertNull(type.getJavaDoc());
@@ -283,12 +280,12 @@ public class HtmlJavadocTest {
@Test
public void html_testNoJavadocField() throws Exception {
MavenJavaProject project = projectSupplier.get();
-
+
IType type = project.findType("hello.GreetingController");
assertNotNull(type);
IField field = type.getField("template");
assertNotNull(field);
- String expected = String.join("\n",
+ String expected = String.join("\n",
"
template
",
"
public static final String template
",
"
",
@@ -304,12 +301,12 @@ public class HtmlJavadocTest {
@Test
public void html_testNoJavadocMethod() throws Exception {
MavenJavaProject project = projectSupplier.get();
-
+
IType type = project.findType("hello.Application");
assertNotNull(type);
IMethod method = type.getMethod("corsConfigurer", Stream.empty());
assertNotNull(method);
- String expected = String.join("\n",
+ String expected = String.join("\n",
"corsConfigurer
",
"@Bean",
"public org.springframework.web.servlet.config.annotation.WebMvcConfigurer corsConfigurer()
"
diff --git a/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java b/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java
index c3f39e37e..6fca11381 100644
--- a/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java
+++ b/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/JavaIndexTest.java
@@ -15,6 +15,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.springframework.ide.vscode.languageserver.testharness.ClasspathTestUtil.getOutputFolder;
import java.io.File;
import java.nio.file.Path;
@@ -33,7 +34,6 @@ import org.springframework.ide.vscode.commons.java.IType;
import org.springframework.ide.vscode.commons.java.IVoidType;
import org.springframework.ide.vscode.commons.maven.java.MavenJavaProject;
import org.springframework.ide.vscode.commons.util.BasicFileObserver;
-import org.springframework.ide.vscode.commons.util.FileObserver;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
@@ -41,12 +41,10 @@ import com.google.common.cache.LoadingCache;
import reactor.util.function.Tuple2;
-import static org.springframework.ide.vscode.languageserver.testharness.ClasspathTestUtil.*;
-
public class JavaIndexTest {
-
+
private static BasicFileObserver fileObserver = new BasicFileObserver();
-
+
private static LoadingCache mavenProjectsCache = CacheBuilder.newBuilder().build(new CacheLoader() {
@Override
@@ -55,93 +53,100 @@ public class JavaIndexTest {
MavenBuilder.newBuilder(testProjectPath).clean().pack().javadoc().skipTests().execute();
return MavenJavaProject.create(fileObserver, MavenCore.getDefault(), testProjectPath.resolve(MavenCore.POM_XML).toFile());
}
-
+
});
-
+
@Test
public void fuzzySearchNoFilter() throws Exception {
- List> results = MavenCore.getDefault().getJavaIndexForJreLibs()
- .fuzzySearchTypes("util.Map", null)
+ MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
+ List> results = project.getIndex().fuzzySearchTypes("util.Map", null)
.collectSortedList((o1, o2) -> o2.getT2().compareTo(o1.getT2()))
.block();
assertTrue(results.size() > 10);
- assertEquals("java.util.Map", results.get(0).getT1().getFullyQualifiedName());
+ IType type = results.get(0).getT1();
+ System.out.println(type.getFullyQualifiedName() + ": " + type.getBindingKey());
+ assertEquals("java.util.Map", type.getFullyQualifiedName());
}
-
+
@Test
public void fuzzySearchWithFilter() throws Exception {
- List> results = MavenCore.getDefault().getJavaIndexForJreLibs()
+ MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
+ List> results = project.getIndex()
.fuzzySearchTypes("util.Map", (type) -> Flags.isPrivate(type.getFlags()))
.collectSortedList((o1, o2) -> o2.getT2().compareTo(o1.getT2()))
.block();
assertTrue(results.size() > 10);
- assertEquals("java.util.EnumMap$KeySet", results.get(0).getT1().getFullyQualifiedName());
+ IType type = results.get(0).getT1();
+ System.out.println(type.getFullyQualifiedName() + ": " + type.getBindingKey());
+ assertEquals("java.util.EnumMap$KeySet", type.getFullyQualifiedName());
}
-
+
@Test
public void fuzzySearchPackage() throws Exception {
- List> results = MavenCore.getDefault().getJavaIndexForJreLibs()
+ MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
+ List> results = project.getIndex()
.fuzzySearchPackages("util")
.collectSortedList((o1, o2) -> o2.getT2().compareTo(o1.getT2()))
.block();
assertTrue(results.size() > 10);
assertEquals("java.util", results.get(0).getT1());
}
-
+
@Test
public void findClassInJar() throws Exception {
MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
IType type = project.findType("org.springframework.test.web.client.ExpectedCount");
assertNotNull(type);
}
-
+
@Test
public void findClassInOutputFolder() throws Exception {
MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
IType type = project.findType("hello.Greeting");
assertNotNull(type);
}
-
+
@Test
public void classNotFound() throws Exception {
MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
IType type = project.findType("hello.NonExistentClass");
assertNull(type);
}
-
+
@Test
public void voidMethodNoParams() throws Exception {
MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
IType type = project.findType("java.util.ArrayList");
assertNotNull(type);
IMethod m = type.getMethod("clear", Stream.empty());
+ System.out.println("Method clear: " + m.getBindingKey());
assertEquals("clear", m.getElementName());
assertEquals(IVoidType.DEFAULT, m.getReturnType());
assertEquals(0, m.parameters().count());
}
-
+
@Test
public void voidConstructor() throws Exception {
MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
IType type = project.findType("java.util.ArrayList");
- assertNotNull(type);
+ assertNotNull(type);
IMethod m = type.getMethod("", Stream.empty());
assertEquals(type.getElementName(), m.getElementName());
assertEquals(IVoidType.DEFAULT, m.getReturnType());
assertEquals(0, m.parameters().count());
}
-
+
@Test
public void constructorMethodWithParams() throws Exception {
MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
IType type = project.findType("java.util.ArrayList");
- assertNotNull(type);
+ assertNotNull(type);
IMethod m = type.getMethod("", Stream.of(IPrimitiveType.INT));
assertEquals(m.getDeclaringType().getElementName(), m.getElementName());
assertEquals(IVoidType.DEFAULT, m.getReturnType());
- assertEquals(Collections.singletonList(IPrimitiveType.INT), m.parameters().collect(Collectors.toList()));
+ assertEquals(Collections.singletonList(IPrimitiveType.INT), m.parameters().collect(Collectors.toList()));
}
-
+
@Test
public void testFindJarResource() throws Exception {
MavenJavaProject project = mavenProjectsCache.get("gs-rest-service-cors-boot-1.4.1-with-classpath-file");
diff --git a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/Renderables.java b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/Renderables.java
index 7bb2e5297..4b6ede123 100644
--- a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/Renderables.java
+++ b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/Renderables.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2016 Pivotal, Inc.
+ * Copyright (c) 2016, 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
@@ -63,6 +63,21 @@ public class Renderables {
return htmlBlob(buffer -> buffer.raw(html));
}
+ public static Renderable mdBlob(String md) {
+ return new Renderable() {
+
+ @Override
+ public void renderAsMarkdown(StringBuilder buffer) {
+ buffer.append(md);
+ }
+
+ @Override
+ public void renderAsHtml(HtmlBuffer buffer) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+ };
+ }
+
public static Renderable concat(Renderable... pieces) {
return concat(ImmutableList.copyOf(pieces));
}
@@ -96,6 +111,25 @@ public class Renderables {
};
}
+ public static Renderable inlineSnippet(Renderable text) {
+ return new Renderable() {
+
+ @Override
+ public void renderAsMarkdown(StringBuilder buffer) {
+ buffer.append("`");
+ text.renderAsMarkdown(buffer);
+ buffer.append("`");
+ }
+
+ @Override
+ public void renderAsHtml(HtmlBuffer buffer) {
+ buffer.raw("");
+ text.renderAsHtml(buffer);
+ buffer.raw("");
+ }
+ };
+ }
+
public static Renderable paragraph(Renderable text) {
return new Renderable() {
diff --git a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java
index b322894f0..719408b41 100644
--- a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java
+++ b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java
@@ -94,6 +94,8 @@ import org.eclipse.lsp4j.WorkspaceEdit;
import org.eclipse.lsp4j.jsonrpc.messages.Either;
import org.eclipse.lsp4j.services.LanguageClientAware;
import org.springframework.ide.vscode.commons.languageserver.HighlightParams;
+import org.springframework.ide.vscode.commons.languageserver.JavadocParams;
+import org.springframework.ide.vscode.commons.languageserver.JavadocResponse;
import org.springframework.ide.vscode.commons.languageserver.ProgressParams;
import org.springframework.ide.vscode.commons.languageserver.STS4LanguageClient;
import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits;
@@ -310,6 +312,11 @@ public class LanguageServerHarness {
return CompletableFuture.completedFuture("ok");
}
+ @Override
+ public CompletableFuture javadoc(JavadocParams params) {
+ return CompletableFuture.completedFuture(new JavadocResponse());
+ }
+
});
}
diff --git a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/META-INF/MANIFEST.MF b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/META-INF/MANIFEST.MF
index 625386430..078952a08 100644
--- a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/META-INF/MANIFEST.MF
+++ b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/META-INF/MANIFEST.MF
@@ -7,6 +7,9 @@ Automatic-Module-Name: org.springframework.tooling.jdt.ls.commons
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.jdt.core,
- org.eclipse.core.resources
+ org.eclipse.core.resources,
+ com.google.guava
Export-Package: org.springframework.tooling.jdt.ls.commons,
- org.springframework.tooling.jdt.ls.commons.classpath
+ org.springframework.tooling.jdt.ls.commons.classpath,
+ org.springframework.tooling.jdt.ls.commons.javadoc,
+ org.springframework.tooling.jdt.ls.commons.resources
diff --git a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/javadoc/JavadocResponse.java b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/javadoc/JavadocResponse.java
new file mode 100644
index 000000000..e63133857
--- /dev/null
+++ b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/javadoc/JavadocResponse.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * 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.tooling.jdt.ls.commons.javadoc;
+
+public class JavadocResponse {
+
+ private String content;
+
+ public JavadocResponse() {
+ super();
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+}
diff --git a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/javadoc/JavadocUtils.java b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/javadoc/JavadocUtils.java
new file mode 100644
index 000000000..bc22192a2
--- /dev/null
+++ b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/javadoc/JavadocUtils.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * 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.tooling.jdt.ls.commons.javadoc;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.net.URI;
+import java.util.function.Function;
+
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.ITypeParameter;
+import org.springframework.tooling.jdt.ls.commons.resources.ResourceUtils;
+
+import com.google.common.io.CharStreams;
+
+public class JavadocUtils {
+
+ @FunctionalInterface
+ public interface ReaderProvider {
+ Reader getReader(IJavaElement javaElement);
+ }
+
+ private static String getString(Reader reader) {
+ try {
+ return CharStreams.toString(reader);
+ } catch (IOException ignored) {
+ //meh
+ }
+ return null;
+ }
+
+ public static final String javadoc(Function readerProvider, URI projectUri, String bindingKey) throws Exception {
+ IJavaProject project = ResourceUtils.getJavaProject(projectUri);
+ IJavaElement element = project.findElement(bindingKey, null);
+ return computeJavadoc(readerProvider, element);
+ }
+
+ private static String computeJavadoc(Function readerProvider, IJavaElement element) {
+ if (element == null) {
+ return null;
+ }
+ IMember member;
+ if (element instanceof ITypeParameter) {
+ member= ((ITypeParameter) element).getDeclaringMember();
+ } else if (element instanceof IMember) {
+ member= (IMember) element;
+ } else if (element instanceof IPackageFragment) {
+ Reader r = readerProvider.apply(element);
+ if(r == null ) {
+ return null;
+ }
+ return getString(r);
+ } else {
+ return null;
+ }
+
+ Reader r = readerProvider.apply(member);
+ if(r == null ) {
+ return null;
+ }
+ return getString(r);
+ }
+
+}
diff --git a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/META-INF/MANIFEST.MF b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/META-INF/MANIFEST.MF
index 69cf6e212..009dc59ba 100644
--- a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/META-INF/MANIFEST.MF
+++ b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/META-INF/MANIFEST.MF
@@ -9,4 +9,6 @@ Require-Bundle: org.eclipse.jdt.ls.core,
org.eclipse.core.runtime,
org.eclipse.jdt.core,
org.eclipse.core.resources,
- org.springframework.tooling.jdt.ls.commons
+ org.springframework.tooling.jdt.ls.commons,
+ com.google.guava,
+ com.google.gson
diff --git a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/plugin.xml b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/plugin.xml
index ba904cbf3..9be3d0c12 100644
--- a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/plugin.xml
+++ b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/plugin.xml
@@ -6,6 +6,12 @@
+
+
+
+
\ No newline at end of file
diff --git a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/src/org/springframework/tooling/jdt/ls/extension/JavadocHandler.java b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/src/org/springframework/tooling/jdt/ls/extension/JavadocHandler.java
new file mode 100644
index 000000000..347442046
--- /dev/null
+++ b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.extension/src/org/springframework/tooling/jdt/ls/extension/JavadocHandler.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.tooling.jdt.ls.extension;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jdt.ls.core.internal.IDelegateCommandHandler;
+import org.eclipse.jdt.ls.core.internal.javadoc.JavadocContentAccess2;
+import org.springframework.tooling.jdt.ls.commons.Logger;
+import org.springframework.tooling.jdt.ls.commons.javadoc.JavadocResponse;
+import org.springframework.tooling.jdt.ls.commons.javadoc.JavadocUtils;
+
+public class JavadocHandler implements IDelegateCommandHandler {
+
+ @Override
+ public Object executeCommand(String commandId, List