IDEA-131862 Missing quick doc in extension tag completion

This commit is contained in:
Yann Cébron
2014-10-28 08:22:40 +01:00
parent c3faa89b21
commit 2c3e37ab0f
2 changed files with 19 additions and 25 deletions
@@ -18,21 +18,19 @@ 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.pom.PomTarget;
import com.intellij.pom.PomTargetPsiElement;
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;
import com.intellij.psi.xml.XmlTokenType;
import com.intellij.util.xml.DomElement;
import com.intellij.util.xml.DomTarget;
import com.intellij.util.xml.DomUtil;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.devkit.dom.Extension;
import org.jetbrains.idea.devkit.dom.ExtensionPoint;
import org.jetbrains.idea.devkit.util.DescriptorUtil;
@@ -43,7 +41,7 @@ public class ExtensionPointDocumentationProvider extends DocumentationProviderEx
@Override
public String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) {
ExtensionPoint extensionPoint = findExtensionPoint(originalElement);
ExtensionPoint extensionPoint = findExtensionPoint(element);
if (extensionPoint == null) return null;
final XmlFile epDeclarationFile = (XmlFile)extensionPoint.getXmlTag().getContainingFile();
@@ -69,7 +67,7 @@ public class ExtensionPointDocumentationProvider extends DocumentationProviderEx
@Override
public String generateDoc(PsiElement element, @Nullable PsiElement originalElement) {
ExtensionPoint extensionPoint = findExtensionPoint(originalElement);
ExtensionPoint extensionPoint = findExtensionPoint(element);
if (extensionPoint == null) return null;
final PsiClass epClass = getExtensionPointClass(extensionPoint);
@@ -89,15 +87,15 @@ public class ExtensionPointDocumentationProvider extends DocumentationProviderEx
}
@Nullable
private static ExtensionPoint findExtensionPoint(@Nullable PsiElement element) {
if (element == null) return null;
if (element.getLanguage() == XMLLanguage.INSTANCE &&
(element instanceof XmlTag ||
element instanceof XmlToken && ((XmlToken)element).getTokenType() == XmlTokenType.XML_NAME) &&
private static ExtensionPoint findExtensionPoint(PsiElement element) {
if (element instanceof PomTargetPsiElement &&
DescriptorUtil.isPluginXml(element.getContainingFile())) {
final DomElement domElement = DomUtil.getDomElement(element);
if (domElement instanceof Extension) {
return ((Extension)domElement).getExtensionPoint();
final PomTarget pomTarget = ((PomTargetPsiElement)element).getTarget();
if (pomTarget instanceof DomTarget) {
final DomElement domElement = ((DomTarget)pomTarget).getDomElement();
if (domElement instanceof ExtensionPoint) {
return (ExtensionPoint)domElement;
}
}
}
return null;
@@ -3,10 +3,8 @@ 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
@@ -17,12 +15,10 @@ public class ExtensionPointDocumentationProviderTest extends LightCodeInsightFix
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);
final PsiElement docElement =
DocumentationManager.getInstance(getProject()).findTargetElement(myFixture.getEditor(),
myFixture.getFile());
DocumentationProvider provider = DocumentationManager.getProviderFromElement(docElement);
String epDefinition = "[" + myModule.getName() + "] foo<br/>" +
"<b>bar</b> " +
@@ -30,7 +26,7 @@ public class ExtensionPointDocumentationProviderTest extends LightCodeInsightFix
"<a href=\"psi_element://bar.MyExtensionPoint\"><code>MyExtensionPoint</code></a>";
assertEquals(epDefinition,
provider.getQuickNavigateInfo(epPsiElement, originalElement));
provider.getQuickNavigateInfo(docElement, null));
assertEquals("<em>EP Definition</em><br/>" +
epDefinition +
@@ -39,6 +35,6 @@ public class ExtensionPointDocumentationProviderTest extends LightCodeInsightFix
"<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));
provider.generateDoc(docElement, null));
}
}