diff --git a/plugins/devkit/src/references/extensions/ExtensionPointDocumentationProvider.java b/plugins/devkit/src/references/extensions/ExtensionPointDocumentationProvider.java index e191bd8aeee3..cc9f3ed3ab26 100644 --- a/plugins/devkit/src/references/extensions/ExtensionPointDocumentationProvider.java +++ b/plugins/devkit/src/references/extensions/ExtensionPointDocumentationProvider.java @@ -15,13 +15,16 @@ */ package org.jetbrains.idea.devkit.references.extensions; +import com.intellij.codeInsight.javadoc.JavaDocInfoGenerator; import com.intellij.lang.documentation.DocumentationProviderEx; import com.intellij.lang.java.JavaDocumentationProvider; import com.intellij.lang.xml.XMLLanguage; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; +import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlToken; @@ -45,15 +48,23 @@ public class ExtensionPointDocumentationProvider extends DocumentationProviderEx final XmlFile epDeclarationFile = (XmlFile)extensionPoint.getXmlTag().getContainingFile(); final Module epModule = ModuleUtilCore.findModuleForFile(epDeclarationFile.getVirtualFile(), element.getProject()); - final PsiClass epClass = getExtensionPointClass(extensionPoint); final String epPrefix = extensionPoint.getNamePrefix(); - return - (epModule == null ? "" : "[" + epModule.getName() + "]") + - (epPrefix == null ? "" : " " + epPrefix) + - "\n" + - "" + extensionPoint.getEffectiveName() + "" + - " [" + epDeclarationFile.getName() + "]\n" + - (epClass == null ? "" : epClass.getQualifiedName()); + + final PsiClass epClass = getExtensionPointClass(extensionPoint); + StringBuilder epClassText = new StringBuilder(); + if (epClass != null) { + JavaDocInfoGenerator.generateType(epClassText, PsiTypesUtil.getClassType(epClass), epClass, true); + } + else { + epClassText.append(""); + } + + return (epModule == null ? "" : "[" + epModule.getName() + "]") + + (epPrefix == null ? "" : " " + epPrefix) + + "
" + + "" + extensionPoint.getEffectiveName() + "" + + " [" + epDeclarationFile.getName() + "]
" + + epClassText.toString(); } @Override @@ -63,7 +74,16 @@ public class ExtensionPointDocumentationProvider extends DocumentationProviderEx final PsiClass epClass = getExtensionPointClass(extensionPoint); if (epClass != null) { - return JavaDocumentationProvider.generateExternalJavadoc(epClass); + StringBuilder sb = new StringBuilder(); + sb.append("EP Definition
"); + final String quickInfo = StringUtil.notNullize(getQuickNavigateInfo(element, originalElement)); + sb.append(quickInfo); + sb.append("
"); + sb.append("
"); + sb.append("EP Implementation"); + sb.append(JavaDocumentationProvider.generateExternalJavadoc(epClass)); + + return sb.toString(); } return null; } diff --git a/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.groovy b/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.groovy deleted file mode 100644 index 6a3a89997b8d..000000000000 --- a/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.groovy +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2000-2014 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.idea.devkit.references.extensions -import com.intellij.codeInsight.documentation.DocumentationManager -import com.intellij.lang.documentation.DocumentationProvider -import com.intellij.openapi.application.PluginPathManager -import com.intellij.pom.PomTargetPsiElement -import com.intellij.psi.PsiElement -import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase -import com.intellij.util.ui.UIUtil -import com.intellij.util.xml.DomTarget - -class ExtensionPointDocumentationProviderTest extends LightCodeInsightFixtureTestCase { - - @Override - String getBasePath() { - return PluginPathManager.getPluginHomePathRelative("devkit") + "/testData/references/extensions" - } - - void testExtensionPointDocumentation() { - myFixture.configureByFiles("extensionPointDocumentation.xml", - "bar/MyExtensionPoint.java") - - PsiElement originalElement = myFixture.getFile().findElementAt(myFixture.getCaretOffset()) - PomTargetPsiElement pomTargetPsiElement = assertInstanceOf(myFixture.getElementAtCaret(), PomTargetPsiElement.class) - DomTarget domTarget = assertInstanceOf(pomTargetPsiElement.getTarget(), DomTarget.class) - PsiElement epPsiElement = domTarget.getNavigationElement() - - DocumentationProvider provider = DocumentationManager.getProviderFromElement(epPsiElement) - String docBody = UIUtil.getHtmlBody(provider.generateDoc(epPsiElement, originalElement)) - assertEquals("""bar
public interface MyExtensionPoint
- MyExtensionPoint JavaDoc.""", docBody) - - assertEquals("""[$myModule.name] foo -bar [extensionPointDocumentation.xml] -bar.MyExtensionPoint""", provider.getQuickNavigateInfo(epPsiElement, originalElement)) - } -} \ No newline at end of file diff --git a/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.java b/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.java new file mode 100644 index 000000000000..7cb0a30a0548 --- /dev/null +++ b/plugins/devkit/testSources/references/extensions/ExtensionPointDocumentationProviderTest.java @@ -0,0 +1,44 @@ +package org.jetbrains.idea.devkit.references.extensions; + +import com.intellij.codeInsight.documentation.DocumentationManager; +import com.intellij.lang.documentation.DocumentationProvider; +import com.intellij.openapi.application.PluginPathManager; +import com.intellij.pom.PomTargetPsiElement; +import com.intellij.psi.PsiElement; +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; +import com.intellij.util.xml.DomTarget; + +public class ExtensionPointDocumentationProviderTest extends LightCodeInsightFixtureTestCase { + @Override + public String getBasePath() { + return PluginPathManager.getPluginHomePathRelative("devkit") + "/testData/references/extensions"; + } + + public void testExtensionPointDocumentation() { + myFixture.configureByFiles("extensionPointDocumentation.xml", "bar/MyExtensionPoint.java"); + + PsiElement originalElement = myFixture.getFile().findElementAt(myFixture.getCaretOffset()); + PomTargetPsiElement pomTargetPsiElement = assertInstanceOf(myFixture.getElementAtCaret(), PomTargetPsiElement.class); + DomTarget domTarget = assertInstanceOf(pomTargetPsiElement.getTarget(), DomTarget.class); + PsiElement epPsiElement = domTarget.getNavigationElement(); + + DocumentationProvider provider = DocumentationManager.getProviderFromElement(epPsiElement); + + String epDefinition = "[" + myModule.getName() + "] foo
" + + "bar " + + "[extensionPointDocumentation.xml]
" + + "MyExtensionPoint"; + + assertEquals(epDefinition, + provider.getQuickNavigateInfo(epPsiElement, originalElement)); + + assertEquals("EP Definition
" + + epDefinition + + "

" + + "EP Implementation" + + " " + + "bar
public interface MyExtensionPoint
\n" + + " MyExtensionPoint JavaDoc.", + provider.generateDoc(epPsiElement, originalElement)); + } +}