From 2a61c0ed56561ae4bf37c1d60758b3eb0b29ce09 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 28 Jun 2010 17:54:46 +0400 Subject: [PATCH] [by peter:] get quick doc info from the place-specific documentation provider; DomChildrenDescription<: PomTarget --- .../documentation/DocumentationManager.java | 2 +- .../navigation/CtrlMouseHandler.java | 6 ++-- .../psi/impl/PomTargetPsiElementImpl.java | 9 ++++++ .../xml/impl/DomChildDescriptionImpl.java | 19 +++++++++++++ .../xml/impl/dom/DomElementXmlDescriptor.java | 28 +++++++++++++++---- .../xml/reflect/DomChildrenDescription.java | 3 +- 6 files changed, 56 insertions(+), 11 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java index c762b8c32109..9f1ddcece42c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java @@ -753,7 +753,7 @@ public class DocumentationManager { } @NotNull - private static DocumentationProvider getProviderFromElement(@Nullable PsiElement element, @Nullable PsiElement originalElement) { + public static DocumentationProvider getProviderFromElement(@Nullable PsiElement element, @Nullable PsiElement originalElement) { if (element != null && !element.isValid()) { element = null; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java index da222b6d45ff..41c1532c96d1 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java @@ -223,8 +223,8 @@ public class CtrlMouseHandler extends AbstractProjectComponent { } @Nullable - private static String generateInfo(PsiElement element) { - final DocumentationProvider documentationProvider = DocumentationManager.getProviderFromElement(element); + private static String generateInfo(PsiElement element, PsiElement atPointer) { + final DocumentationProvider documentationProvider = DocumentationManager.getProviderFromElement(element, atPointer); String info = documentationProvider.getQuickNavigateInfo(element); if (info != null) { @@ -305,7 +305,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent { @Nullable public String getInfo() { try { - return generateInfo(myTargetElement); + return generateInfo(myTargetElement, myElementAtPointer); } catch (IndexNotReadyException e) { showDumbModeNotification(myTargetElement.getProject()); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PomTargetPsiElementImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/PomTargetPsiElementImpl.java index 085a802a8cf7..61102051d940 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PomTargetPsiElementImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PomTargetPsiElementImpl.java @@ -16,6 +16,7 @@ package com.intellij.psi.impl; import com.intellij.ide.IconProvider; +import com.intellij.lang.Language; import com.intellij.openapi.project.Project; import com.intellij.pom.*; import com.intellij.psi.PsiElement; @@ -164,6 +165,14 @@ public class PomTargetPsiElementImpl extends RenameableFakePsiElement implements return null; } + @NotNull + public Language getLanguage() { + if (myTarget instanceof PsiTarget) { + return ((PsiTarget)myTarget).getNavigationElement().getLanguage(); + } + return Language.ANY; + } + @NotNull @Override public Project getProject() { diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/DomChildDescriptionImpl.java b/xml/dom-impl/src/com/intellij/util/xml/impl/DomChildDescriptionImpl.java index 2a04bde8752b..957e8b8ea0b8 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/DomChildDescriptionImpl.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/DomChildDescriptionImpl.java @@ -21,6 +21,25 @@ public abstract class DomChildDescriptionImpl extends AbstractDomChildDescriptio myTagName = tagName; } + public String getName() { + return myTagName.getLocalName(); + } + + public boolean isValid() { + return true; + } + + public void navigate(boolean requestFocus) { + } + + public boolean canNavigate() { + return false; + } + + public boolean canNavigateToSource() { + return false; + } + @NotNull public String getXmlElementName() { return myTagName.getLocalName(); diff --git a/xml/dom-impl/src/com/intellij/xml/impl/dom/DomElementXmlDescriptor.java b/xml/dom-impl/src/com/intellij/xml/impl/dom/DomElementXmlDescriptor.java index d16e6d3e4ad3..0cba5fe1b7a6 100644 --- a/xml/dom-impl/src/com/intellij/xml/impl/dom/DomElementXmlDescriptor.java +++ b/xml/dom-impl/src/com/intellij/xml/impl/dom/DomElementXmlDescriptor.java @@ -17,9 +17,9 @@ package com.intellij.xml.impl.dom; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.pom.references.PomService; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; -import com.intellij.psi.impl.FakePsiElement; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlDocument; import com.intellij.psi.xml.XmlFile; @@ -204,11 +204,7 @@ public class DomElementXmlDescriptor implements XmlElementDescriptor { if (declaration != null) return declaration.getXmlElement(); - return new FakePsiElement() { - public PsiElement getParent() { - return DomUtil.getFile(mySomeElement); - } - }; + return PomService.convertToPsi(myManager.getProject(), myChildrenDescription); } @NonNls @@ -255,6 +251,25 @@ public class DomElementXmlDescriptor implements XmlElementDescriptor { myDomElement = domElement; } + public String getName() { + return getXmlElementName(); + } + + public boolean isValid() { + return true; + } + + public void navigate(boolean requestFocus) { + } + + public boolean canNavigate() { + return false; + } + + public boolean canNavigateToSource() { + return false; + } + @NotNull public XmlName getXmlName() { throw new UnsupportedOperationException("Method getXmlName not implemented in " + getClass()); @@ -304,4 +319,5 @@ public class DomElementXmlDescriptor implements XmlElementDescriptor { throw new UnsupportedOperationException("Method getAnnotation not implemented in " + getClass()); } } + } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomChildrenDescription.java b/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomChildrenDescription.java index e86e69ca3f7e..90639030baaa 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomChildrenDescription.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/reflect/DomChildrenDescription.java @@ -15,6 +15,7 @@ */ package com.intellij.util.xml.reflect; +import com.intellij.pom.PomNamedTarget; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomNameStrategy; import com.intellij.util.xml.XmlName; @@ -23,7 +24,7 @@ import org.jetbrains.annotations.NotNull; /** * @author peter */ -public interface DomChildrenDescription extends AbstractDomChildrenDescription { +public interface DomChildrenDescription extends AbstractDomChildrenDescription, PomNamedTarget { @NotNull XmlName getXmlName();