mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-131863 Plugin.xml extension documentation: show EP definition in addition to javadoc
This commit is contained in:
@@ -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" +
|
||||
"<b>" + extensionPoint.getEffectiveName() + "</b>" +
|
||||
" [" + epDeclarationFile.getName() + "]\n" +
|
||||
(epClass == null ? "<unknown>" : 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("<unknown>");
|
||||
}
|
||||
|
||||
return (epModule == null ? "" : "[" + epModule.getName() + "]") +
|
||||
(epPrefix == null ? "" : " " + epPrefix) +
|
||||
"<br/>" +
|
||||
"<b>" + extensionPoint.getEffectiveName() + "</b>" +
|
||||
" [" + epDeclarationFile.getName() + "]<br/>" +
|
||||
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("<em>EP Definition</em><br/>");
|
||||
final String quickInfo = StringUtil.notNullize(getQuickNavigateInfo(element, originalElement));
|
||||
sb.append(quickInfo);
|
||||
sb.append("<br/>");
|
||||
sb.append("<br/>");
|
||||
sb.append("<em>EP Implementation</em>");
|
||||
sb.append(JavaDocumentationProvider.generateExternalJavadoc(epClass));
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
-51
@@ -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("""<small><b>bar</b></small><PRE>public interface <b>MyExtensionPoint</b></PRE>
|
||||
MyExtensionPoint JavaDoc.""", docBody)
|
||||
|
||||
assertEquals("""[$myModule.name] foo
|
||||
<b>bar</b> [extensionPointDocumentation.xml]
|
||||
bar.MyExtensionPoint""", provider.getQuickNavigateInfo(epPsiElement, originalElement))
|
||||
}
|
||||
}
|
||||
+44
@@ -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<br/>" +
|
||||
"<b>bar</b> " +
|
||||
"[extensionPointDocumentation.xml]<br/>" +
|
||||
"<a href=\"psi_element://bar.MyExtensionPoint\"><code>MyExtensionPoint</code></a>";
|
||||
|
||||
assertEquals(epDefinition,
|
||||
provider.getQuickNavigateInfo(epPsiElement, originalElement));
|
||||
|
||||
assertEquals("<em>EP Definition</em><br/>" +
|
||||
epDefinition +
|
||||
"<br/><br/>" +
|
||||
"<em>EP Implementation</em>" +
|
||||
"<html><head> <style type=\"text/css\"> #error { background-color: #eeeeee; margin-bottom: 10px; } p { margin: 5px 0; } </style></head>" +
|
||||
"<body><small><b>bar</b></small><PRE>public interface <b>MyExtensionPoint</b></PRE>\n" +
|
||||
" MyExtensionPoint JavaDoc.</body></html>",
|
||||
provider.generateDoc(epPsiElement, originalElement));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user